敬业的IT人 >> 编程开发 >> C++Builder >> 用C++ Builder 5.0编HOOK程序

用C++ Builder 5.0编HOOK程序

敬业的IT人 互联网 佚名 2008-1-3 21:39:04

  一,

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);
}



二,

在Borland的Community上找到了这篇文章,可以解决这个问题了。如下:

///
C++Builder 4.0 is the first C++Builder compiler that supports shared memory segments. This document explains how to use this feature in windows DLL.

To change the data segment and the class name, you need to add #pragma option -zR[SEGMENT NAME] and #pragma option -zT[CLASS NAME] to the file you want the data shared from. Below is the source file I am going to export the integer named 'data':

File: SharedData.cpp
//---------------------------------------------------------------------------
// Borland C++Builder
// Copyrig
///
C++Builder 4.0 is the first C++Builder compiler that supports shared memory segments.

This document explains how to use this feature in windows DLL.

To change the data segment and the class name, you need to add
#pragma option -zR[SEGMENT NAME] and
#pragma option -zT[CLASS NAME] to the file you want the data shared from.
Below is the source file I am going to export the integer named 'data':

File: SharedData.cpp
//---------------------------------------------------------------------------
// Borland C++Bu
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com