delphi - 当我的应用程序没有焦点时,如何捕获键盘状态?

标签 delphi delphi-xe8

我女朋友的新笔记本电脑没有 NumLock 和 CapsLock 的 LED 指示灯,因此我编写了一个小程序,在屏幕上显示它们的状态:

procedure TForm1.Timer1Timer(Sender: TObject);  
var  
  KeyState: TKeyboardState;  
begin  
  GetKeyboardState(KeyState);  
  if KeyState[VK_NUMLOCK] = 0 then  
    PanelNumLock.Color := clSilver  
  else  
    PanelNumLock.Color := clLime;  
  if KeyState[VK_CAPITAL] = 0 then  
    PanelCapsLock.Color := clSilver  
  else  
    PanelCapsLock.Color := clLime;  
end;

enter image description here

只要我的程序具有焦点,此功能就有效,但是当焦点转到另一个程序时,程序状态将不再更新。 (但是,只需将鼠标移到表单上,无需单击,就足以更新。)

当另一个应用程序获得焦点时,如何让程序更新?

最佳答案

您可以简单地使用 GetKeyState在你的计时器中。

if GetKeyState(VK_NUMLOCK) = 1 then
  PanelNumLock.Color := clLime
else
  PanelNumLock.Color := clSilver;

if GetKeyState(VK_CAPITAL) = 1 then
  PanelCapsLock.Color := clLime
else
  PanelCapsLock.Color := clSilver;

即使您的应用程序没有焦点,这也可以工作。 在 XP 上测试。

关于delphi - 当我的应用程序没有焦点时,如何捕获键盘状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410158/

相关文章:

android - 在备忘录中列出原始传感器数据

macos - Delphi REST mac 内存泄漏

windows - 使用 DrawText 或类似函数渲染下标

Delphi:从具有总体进度的文件夹中复制文件。复制文件Ex?

delphi - Delphi 中 Sybase ASE 支持的质量

delphi - 在 Delphi 中从任务栏隐藏应用程序不起作用

delphi - Firemonkey 中的 KEYDOWN [ CTRL 和 "+"]

Delphi自身关键字

Delphi XE8 Firemonkey TListView - 如何以编程方式设置背景颜色

delphi - 使用应用程序网络共享在 Delphi XE 中对客户端上的服务器端数据进行分页