在Win32上,如何使用Perl,Python或Ruby(或C)检测是否按下了Left Shift或Right ALT?
在Win32上,我想知道如何使用Perl,Python或Ruby(甚至在C)中检测是否按下了Left Shift或Right ALT?
不仅适用于当前窗口,还适用于整体环境。 示例:当我输入文档时,我可以按下右键ALT启动用Ruby编写的音乐播放器,然后再次按下右键ALT,它可以暂停或停止程序。 谢谢。
您需要设置低级键盘挂钩。 您可以通过使用LowLevelKeyboardProc调用SetWindowsHookEx来执行此操作 ,然后查看相应的虚拟键代码 。
左右移位和alt键有关键代码。
我相信你也可以通过GetKeyState获取虚拟键的状态,例如GetKeyState(VK_RSHIFT)。 虽然使用Reed Copsey描述的钩子可能更适合您的目的而不是轮询此function。
而不是WM_KEYDOWN和WM_KEYUP,使用WM_SYSKEYDOWN和WM_SYSKEYUP; 然后你可以检查它是否是VK_LSHIFT或VK_MENU等,它会在发生时捕获这些事件。
如果您想立即知道键的当前状态,可以分别使用带有VK_LSHIFT
或VK_RMENU
参数的VK_LSHIFT
GetAsyncKeyState()
分别用于左移和右移。 确保测试结果的最高位,因为结果包含多个信息,例如
if(GetAsyncKeyState(VK_LSHIFT) & 0x8000) ; // left shift is currently down
如果您希望收到按键通知而不是异步轮询它们,则应该监听WM_KEYDOWN
窗口通知。 把这样的东西放在窗口的消息处理程序中:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { ... case WM_KEYDOWN: if(wparam == VK_LSHIFT) ; // left shift was pressed // etc. break; } }
您还必须处理WM_KEYUP
消息以了解何时释放密钥。