用C++ Builder 5.0编HOOK程序

豆豆网   技术应用频道   2006年03月31日  【字号: 收藏本文

本文详细介绍用C++ Builder 5.0编HOOK程序

  一,

  HINSTANCE g_hinstDll = NULL;
HHOOK g_hhook   = NULL;
HWND g_hwndPost = NULL;
UINT g_uMsgNotify = WM_USER;
HOOKPROC KeyboardHook_HookProc ( int nCode, WPARAM wParam, LPARAM lParam)
{
  LRESULT lResult = CallNextHookEx(g_hhook, nCode, wParam, lParam);
  if (nCode == HC_ACTION)
  {
    PostMessage(g_hwndPost, g_uMsgNotify, wParam, lParam);
  }
  return((HOOKPROC)lResult);
}
///////////
BOOL WINAPI SetKeyboardHook (HWND hWndPost, UINT Msg)
{
  HHOOK hhook;
  if (g_hhook != NULL) return(FALSE);
  g_hwndPost = hWndPost;
  g_uMsgNotify = Msg;
  Sleep(0);
  if (g_hLogHook==NULL)
  hhook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardHook_HookProc,g_hinstDll, 0);
  InterlockedExchange((PLONG) &g_hhook, (LONG) hhook);
  return(g_hhook != NULL);
}
///
BOOL WINAPI ReleaseKeyboardHook()
{
  BOOL fOK = TRUE;
  if (g_hhook != NULL)
  {
    fOK = UnhookWindowsHookEx(g_hhook);
    g_hhook = NULL;
  }
  return(fOK);
}
BOOL WINAPI DllMain (HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
  switch (fdwReason)
  {
    case DLL_PROCESS_ATTACH:
     g_hinstDll = hinstDll;
     break;
  }
  return(TRUE);
}

责编:豆豆技术应用

正在加载评论...