- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2011-3-30 09:18:36
|
显示全部楼层
这个容易,不过我不懂D,只能看,不会写,我举个C的例子,希望对LZ有帮助。
我举一个走路的例子。
在EXE和DLL中都定义一个消息:- #define WM_AUTOMOVE WM_USER+101
复制代码 EXE中发送消息:
- void CLoaderDlg::OnBtnMoveto()
- {
- UpdateData();
- ::SendMessage(m_hCHWnd,WM_AUTOMOVE,m_ItemX,m_ItemY);
- }
复制代码 DLL中的回调时这样写的:
- LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- try
- {
- if (nCode == HC_ACTION)
- {
- switch(((PCWPSTRUCT)lParam)->message)
- {
- case WM_AUTOMOVE:
- OutToHookLog("移动到坐标: %d,%d",((PCWPSTRUCT)lParam)->wParam, ((PCWPSTRUCT)lParam)->lParam);
- PGAME_ITEMPOS pstItemPos = new GAME_ITEMPOS;
- RtlZeroMemory(pstItemPos, sizeof(GAME_ITEMPOS));
- pstItemPos->x = (float)((PCWPSTRUCT)lParam)->wParam;
- pstItemPos->y = (float)((PCWPSTRUCT)lParam)->lParam;
- CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)AutoPath, pstItemPos, 0, NULL);
- break;
- }
- bStartHook = TRUE;
- }
- }
- catch (...)
- {
- OutToHookLog("catch error...");
- }
- return CallNextHookEx(g_hHook,nCode,wParam,lParam);
- }
复制代码 这样就OK了,SendMessage本来就支持传递参数的嘛,嘿嘿。 |
|