发送端dll
LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
CWPSTRUCT *p = (CWPSTRUCT *)lParam;
if (HC_ACTION == nCode && p->message == WM_MOVE)
{
int cTxtLen = GetWindowTextLength(p->hwnd);
LPSTR szWndName = new char[cTxtLen+1];
GetWindowText(p->hwnd, (LPWSTR)szWndName, cTxtLen+1);
SendMessage(g_hWnd,WM_DISPLAY_MSG,0,(LPARAM)szWndName);
delete [] szWndName;
}
LRESULT ret = CallNextHookEx(hMessage, nCode, wParam, lParam);
return 0;}
接受端MFC
LRESULT CSystestView::OnDisplayMsg(WPARAM wParam,LPARAM lParam)
{ AfxMessageBox((LPSTR)lParam);
return 0;
}
运行总是崩溃,不知如何改?大家帮帮忙,谢谢!
LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
CWPSTRUCT *p = (CWPSTRUCT *)lParam;
if (HC_ACTION == nCode && p->message == WM_MOVE)
{
int cTxtLen = GetWindowTextLength(p->hwnd);
LPSTR szWndName = new char[cTxtLen+1];
GetWindowText(p->hwnd, (LPWSTR)szWndName, cTxtLen+1);
SendMessage(g_hWnd,WM_DISPLAY_MSG,0,(LPARAM)szWndName);
delete [] szWndName;
}
LRESULT ret = CallNextHookEx(hMessage, nCode, wParam, lParam);
return 0;}
接受端MFC
LRESULT CSystestView::OnDisplayMsg(WPARAM wParam,LPARAM lParam)
{ AfxMessageBox((LPSTR)lParam);
return 0;
}
运行总是崩溃,不知如何改?大家帮帮忙,谢谢!
如果是DLL端,不好用VC调试器的话。
你可以用Ollydbg的“断在DLL加载处”一步一步检测,确定在哪个地方蹦的。
应该可以找到问题的地方。
也不知道蹦的是哪?
SendMessage(g_hWnd,WM_DISPLAY_MSG,0,(LPARAM)szWndName);
后没有检测成功与否!
AfxMessageBox((LPSTR)lParam); //不知道有没有成功的弹出过没,搞不好问题出在这
也没有检测lParam!
如果发送不成功,那不就蹦了~~~~~
AfxMessageBox(“ok”);倒是可以的
1。钩子dll会映射到其他进程,g_hWnd就没有用了,建议用FindWindow取得主窗口句柄
2。发送一个字符串,请用COPYDATA消息,原因同上,不是一个进程了
3。LRESULT ret = CallNextHookEx(hMessage, nCode, wParam, lParam);
return 0; 应该是reutrn ret;吧?