龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

不依赖于DLL就能工作的全局钩子(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
info = "key up"; else if (w == WM_SYSKEYDOWN) info = "sys key dn"; else if (w == WM_SYSKEYUP) info = "sys key up"; printf ("%s - vkCode [%04x], scanCode [%04x]", info, p-vkCode, p-scanCode); // always

  info = "key up";

  else if (w == WM_SYSKEYDOWN)

  info = "sys key dn";

  else if (w == WM_SYSKEYUP)

  info = "sys key up";

  printf ("%s - vkCode [%04x], scanCode [%04x] ",

  info, p->vkCode, p->scanCode);

  // always call next hook

  return CallNextHookEx (g_kb_hook, code, w, l);

  };

  int main (void)

  {

  g_main_tid = GetCurrentThreadId ();

  SetConsoleCtrlHandler (&con_handler, TRUE);

  g_kb_hook = SetWindowsHookEx (

  WH_KEYBOARD_LL,

  &kb_proc,
  GetModuleHandle (NULL), // 不能为NULL,否则失败

  0);

  if (g_kb_hook == NULL)

  {

  fprintf (stderr,

  "SetWindowsHookEx failed with error %d ",

  ::GetLastError ());

  return 0;

  };

  // 消息循环是必须的,想知道原因可以查msdn

  MSG msg;

  while (GetMessage (&msg, NULL, 0, 0))

  {

  TranslateMessage (&msg);

  DispatchMessage (&msg);

  };

  UnhookWindowsHookEx (g_kb_hook);

  return 0;

  };

精彩图集

赞助商链接