我女朋友的新笔记本电脑没有 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;
只要我的程序具有焦点,此功能就有效,但是当焦点转到另一个程序时,程序状态将不再更新。 (但是,只需将鼠标移到表单上,无需单击,就足以更新。)
当另一个应用程序获得焦点时,如何让程序更新?
最佳答案
您可以简单地使用 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/