【发布时间】:2021-04-11 10:37:12
【问题描述】:
每当用户按下 Ctrl+A 击键时,我都需要检测它们。这是我到目前为止所做的
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (GetKeyState(65)>0) then
begin
caption:='CTRL+A Pressed!';
end else
begin
caption:='Not pressed';
end;
end;
如何知道CTRL键是否被按下?
【问题讨论】:
-
如果您的窗口没有输入焦点,那么您将永远看不到任何调用
GetKeyState的东西。至少这就是我从你所说的“在其他应用程序中”得到的。 -
这是XY Problem。您的真正问题的解决方案是WinEvents。
-
@DavidHeffernan 那么像 Camtasia 这样的许多应用程序如何检测击键呢?
-
@DavidHeffernan:只是出于好奇。 “如果您的窗口没有输入焦点,那么您将永远看不到任何调用 GetKeyState 的内容”您是否真的尝试过? (我问是因为过去几年我有几次,而且一直有效。不过,这可能是无证行为。)
-
@AndreasRejbrand 我刚刚测试了它。在 XP 上,
GetKeyState()确实看到了关键状态更改,而我的测试应用程序没有输入焦点。 直接矛盾 what Raymond Chen said 在这个问题上:“如果用户切换到另一个程序,那么 GetKeyState 函数将看不到用户在另一个程序中键入的输入
标签: delphi winapi delphi-10.3-rio