在Win32上,如何使用Perl,Python或Ruby(或C)检测是否按下了Left Shift或Right ALT?

在Win32上,我想知道如何使用Perl,Python或Ruby(甚至在C)中检测是否按下了Left Shift或Right ALT?

不仅适用于当前窗口,还适用于整体环境。 示例:当我输入文档时,我可以按下右键ALT启动用Ruby编写的音乐播放器,然后再次按下右键ALT,它可以暂停或停止程序。 谢谢。

您需要设置低级键盘挂钩。 您可以通过使用LowLevelKeyboardProc调用SetWindowsHookEx来执行此操作 ,然后查看相应的虚拟键代码 。

左右移位和al​​t键有关键代码。

我相信你也可以通过GetKeyState获取虚拟键的状态,例如GetKeyState(VK_RSHIFT)。 虽然使用Reed Copsey描述的钩子可能更适合您的目的而不是轮询此function。

而不是WM_KEYDOWN和WM_KEYUP,使用WM_SYSKEYDOWN和WM_SYSKEYUP; 然后你可以检查它是否是VK_LSHIFT或VK_MENU等,它会在发生时捕获这些事件。

如果您想立即知道键的当前状态,可以分别使用带有VK_LSHIFTVK_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消息以了解何时释放密钥。