我制作了一个使用GetKeyState()
函数的程序,但我希望该程序可以在不需要我选择它的情况下完成它的工作(例如选择该应用程序的窗口,我希望这看起来清晰易懂),这意味着,即使我有另一个窗口打开,我选择了那个窗口,我希望我的控制台在我按下指定的键时做它的事情。
我不知道我说的是否清楚,假设我打开了 chrome,我正在浏览网页,并且控制台在旁边运行(但没有选择它的窗口,因为我选择了 chrome 进程,因为我正在用它冲浪),我希望控制台程序在我按下我所说的键时完成它的工作,而我仍然在 chrome 中(甚至在它最小化时)。
例如:Discord 的叠加和“一键通”,您可以启用/禁用叠加,或在不同程序中的一键通,甚至最小化。
注意:我不需要这个键盘记录器。
有没有办法做到这一点?
嗯,很简单,在 Win10 上用 VS2017 试过:
#include <stdio.h>
#include <Windows.h>
int main(void)
{
puts("Quit by pressing Ctrl-C");
for (;;) {
Sleep(100);
printf("a=%X R-Ctrl=%X CapsLock=%X\n", GetKeyState('A'), GetKeyState(VK_RCONTROL), GetKeyState(VK_CAPITAL));
}
return 0;
}
当 keys A, rightCtrl和CapsLockresp.时,它会产生此输出(缩短以使其可读)。被按下和释放:
Quit by pressing Ctrl-C
a=0 R-Ctrl=0 CapsLock=0
a=0 R-Ctrl=0 CapsLock=0
a=FFFFFF80 R-Ctrl=0 CapsLock=0
a=FFFFFF80 R-Ctrl=0 CapsLock=0
a=0 R-Ctrl=0 CapsLock=0
a=0 R-Ctrl=0 CapsLock=0
a=0 R-Ctrl=FFFFFF81 CapsLock=0
a=0 R-Ctrl=FFFFFF81 CapsLock=0
a=0 R-Ctrl=1 CapsLock=0
a=0 R-Ctrl=1 CapsLock=0
a=0 R-Ctrl=1 CapsLock=FFFFFF81
a=0 R-Ctrl=1 CapsLock=FFFFFF81
a=0 R-Ctrl=1 CapsLock=1
a=0 R-Ctrl=1 CapsLock=1
编辑:
即使在另一个应用程序被置顶(在前面)或控制台应用程序被最小化时,这也有效。
你想完成什么取决于你。该测试仅打印 GetKeyState() 的返回值。顺便说一句,如果您轮询状态太慢,您可能会错过按键。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句