Macos 如何使用OSX上的FireMonkey获取当前修改器状态?
对于Windows的Delphi,我通常使用以下代码:Macos 如何使用OSX上的FireMonkey获取当前修改器状态?,macos,delphi,delphi-xe2,firemonkey,keyevent,Macos,Delphi,Delphi Xe2,Firemonkey,Keyevent,对于Windows的Delphi,我通常使用以下代码: function isCtrlDown : Boolean; var ksCurrent : TKeyboardState; begin GetKeyboardState(ksCurrent); Result := ((ksCurrent[VK_CONTROL] and 128) <> 0); end; 我还在调查。。。 现在,我发现这个单元有关键事件东西。。。 unitmacapi.AppKit基于此,您可以尝试
function isCtrlDown : Boolean;
var
ksCurrent : TKeyboardState;
begin
GetKeyboardState(ksCurrent);
Result := ((ksCurrent[VK_CONTROL] and 128) <> 0);
end;
我还在调查。。。
现在,我发现这个单元有关键事件东西。。。
unitmacapi.AppKit代码>基于此,您可以尝试以下方法:
function isCtrlDown : Boolean;
begin
Result := NSControlKeyMask and TNSEvent.OCClass.modifierFlags = NSControlKeyMask;
end;
这将返回当前的换档状态:
uses
Macapi.CoreGraphics;
function KeyboardModifiers: TShiftState;
const
kVK_Shift = $38;
kVK_RightShift = $3C;
kVK_Control = $3B;
kVK_Command = $37;
kVK_Option = $3A;
begin
result := [];
if (CGEventSourceKeyState(0, kVK_Shift) <> 0) or (CGEventSourceKeyState(0, kVK_RightShift) <> 0) then Include(result, ssShift);
if CGEventSourceKeyState(0, kVK_Command) <> 0 then Include(result, ssCommand);
if CGEventSourceKeyState(0, kVK_Option) <> 0 then Include(result, ssAlt);
if CGEventSourceKeyState(0, kVK_Control) <> 0 then Include(result, ssCtrl);
end;
使用
Macapi.coreprographics;
功能键盘修改器:tshift状态;
常数
kVK_班次=38美元;
kVK_RightShift=$3C;
kVK_控制=30亿美元;
kVK_命令=37美元;
kVK_选项=3A美元;
开始
结果:=[];
如果(CGEventSourceKeyState(0,kVK_-Shift)0)或(CGEventSourceKeyState(0,kVK_-RightShift)0),则包括(result,ssShift);
如果CGEventSourceKeyState(0,kVK_命令)0,则包括(result,ssCommand);
如果CGEventSourceKeyState(0,kVK_选项)0,则包括(结果,ssAlt);
如果CGEventSourceKeyState(0,kVK_控制)0,则包括(结果,ssCtrl);
结束;
我睡觉时发布的两种解决方案都有效。对不起,我已经接受了另一个,因为它是在几分钟前发布的。。。很难在你们两人之间做出选择。顺便说一句,你会得到一个+1汉克斯惠勒,我也会给你+1汉克斯惠勒
uses
Macapi.CoreGraphics;
function KeyboardModifiers: TShiftState;
const
kVK_Shift = $38;
kVK_RightShift = $3C;
kVK_Control = $3B;
kVK_Command = $37;
kVK_Option = $3A;
begin
result := [];
if (CGEventSourceKeyState(0, kVK_Shift) <> 0) or (CGEventSourceKeyState(0, kVK_RightShift) <> 0) then Include(result, ssShift);
if CGEventSourceKeyState(0, kVK_Command) <> 0 then Include(result, ssCommand);
if CGEventSourceKeyState(0, kVK_Option) <> 0 then Include(result, ssAlt);
if CGEventSourceKeyState(0, kVK_Control) <> 0 then Include(result, ssCtrl);
end;