当用户点击一个键时显示一条消息

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;

【讨论】:

调用SetWindowsHookExhandleKeyboardHook是否为NULL? 哦,我的错。您应该使用传递给 WinMain 的 hInstance 作为 hMod。 安装钩子的线程需要一个消息循环。 en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows 我只是在我的回答中放了一个带有消息循环的 LowLevelKeyboardProc 示例。

以上是关于当用户点击一个键时显示一条消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery 或 Javascript 触发 mousemove 事件

如何在 android 中获得 ClusterManager 点击和 ClusterManager 项目点击

jquery beforeunload 关闭(不离开)页面时?

空ListView显示另一个活动

如何通过 Javascript / jQuery 在按钮单击时显示引导警报?

当活动方向被锁定时检测设备方向