首页 > 解决方案 > 如何使用 Delphi 在其他应用程序中检测 CTRL+A

问题描述

每当用户按下它们时,我都需要检测 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 键?

标签: delphiwinapidelphi-10.3-rio

解决方案


每当用户按下它们时,我都需要检测 Ctrl+A 击键。

如果你真的是那个意思,没有别的意思,那就考虑一下RegisterHotkey()

  • 优点:随时通知您。无需轮询,不浪费性能。
  • 缺点:这也意味着您“窃取”每个其他窗口的输入 - 由您来为焦点窗口合成此组合键,以便恢复现实。此功能不用于拦截。

示例:您的程序/窗口没有集中,甚至可能最小化。在记事本中,您按 CTRL+A 选择所有文本。您的程序会收到通知,而记事本从未收到过这样的输入。您可以使用SendInput()为记事本生成 CTRL+A,然后最终选择所有文本。


推荐阅读