当用户点击一个键时显示一条消息
Posted
技术标签:
【中文标题】当用户点击一个键时显示一条消息【英文标题】:displaying a message when the user taps a key 【发布时间】:2012-05-25 07:12:12 【问题描述】:以下 sn-p 用于在用户键入键时显示消息。即使焦点不在应用程序上。但是下面的代码似乎有问题。它不会调用在 windows 的钩子链中注册的函数。我想问题出在HINSTANCE hInst
。我应该如何修改下面的代码,以便在用户点击一个键时能够看到消息。
// Global Variables
static HHOOK handleKeyboardHook = NULL;
HINSTANCE hInst = NULL;
void TestKeys_setWinHook // i call this function to activate the keyboard hook
(...)
hInst = GetModuleHandle(NULL);
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // LowLevelKeyboardProc should be put in the hook chain by the windows,but till now it doesn't do so.
printf("Inside function setWinHook !");
// the following function should be called when the user taps a key.
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
printf("You pressed a key !\n");
return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);
但是windows没有调用函数LowLevelKeyboardProc
。我不明白原因,但我确信问题在于钩子函数中的hInst
。我需要如何初始化它?
到目前为止,我看到的输出是Inside function setWinHook !
【问题讨论】:
与***.com/questions/10731172/…非常相似 @Deanna 是的!看了那个问题后开始了这项工作! 【参考方案1】:这是 LowLevelKeyboardProc 的示例。
HHOOK hHook;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
printf("You pressed a key!\n");
return CallNextHookEx(hHook, nCode, wParam, lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
TranslateMessage(&msg);
DispatchMessage(&msg);
return msg.wParam;
【讨论】:
调用SetWindowsHookEx
后handleKeyboardHook
是否为NULL?
哦,我的错。您应该使用传递给 WinMain 的 hInstance 作为 hMod。
安装钩子的线程需要一个消息循环。 en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows
我只是在我的回答中放了一个带有消息循环的 LowLevelKeyboardProc 示例。以上是关于当用户点击一个键时显示一条消息的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jquery 或 Javascript 触发 mousemove 事件
如何在 android 中获得 ClusterManager 点击和 ClusterManager 项目点击
jquery beforeunload 关闭(不离开)页面时?