我想拦截其他进程文本框的WM_CHAR消息,实现不管输入什么字符统统都转换为我自己需要的字符这样一个功能。下面是我的DLL源程序:
// 窗口过程钩子函数
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CWPSTRUCT* pStruct = (CWPSTRUCT*)lParam;
if ((pStruct->message == WM_CHAR) && (pStruct->hwnd == g_hwnd))
{
long lInputLen = SendMessage(g_hwnd, WM_GETTEXTLENGTH, 0, 0);
if (lInputLen < g_nLength) pStruct->wParam = g_lpString[lInputLen];
};
// 传给系统中的下一个钩子
     return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}//开始Hook,hwnd为需要拦截的文本框句柄,lpString
BOOL WINAPI StartHookWnd(HWND hwnd, LPBYTE lpString, int nLength)
{
     // 如果已经安装窗口过程钩子则返回 FALSE
     if (g_hHook != NULL) return FALSE;
 g_hwnd = hwnd;
     g_lpString = (LPBYTE)malloc(nLength);
     LPBYTE tmpString = g_lpString;
     for (int i = 0; i < nLength; i++)
     {
         *tmpString++ = *lpString++;
     }
     g_nLength = nLength;
     // 安装窗口过程钩子
     g_hHook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hInstance, NULL);
     if (g_hHook == NULL) return FALSE;
     return TRUE;
}因为VC目前处于初学阶段,问题可能很多,反正修改消息是不成功的,也不知道为什么,望高手能给予解答。主要是希望能挂接到VB中用