首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么小弟我在DLL中用PostThreadMessage给进程发消息总是不成功

2012-01-23 
为什么我在DLL中用PostThreadMessage给进程发消息总是不成功?我把HOOK放在了DLL中,想在HOOK到数据时PostTh

为什么我在DLL中用PostThreadMessage给进程发消息总是不成功?
我把HOOK放在了DLL中,想在HOOK到数据时PostThreadMessage给调用进程。可是没反应。

C/C++ code
DLL代码:DWORD        dwThreadID = 0; //它是全局变量...//Install hookHHOOK InstallHook( DWORD dwID ) {    dwThreadID = dwID;    g_hHook = SetWindowsHookEx( WH_GETMESSAGE, KeyboardProc, g_hInstance, 0 );    return g_hHook;}//Record functionLRESULT CALLBACK KeyboardProc( int nCode, WPARAM wParam, LPARAM lParam ){    if ( nCode < 0 )        return CallNextHookEx( g_hHook, nCode, wParam, lParam );    //if action    if ( HC_ACTION == nCode )    {        MSG *pMsg = (MSG *)lParam;        if ( WM_IME_COMPOSITION == pMsg->message )        {            if ( pMsg->lParam & GCS_RESULTSTR )            {                PostThreadMessage( dwThreadID, WM_CHARMSG, 0, 0 ); //不能断点,所以我也不知道有没有成功            }        }    }    return CallNextHookEx( g_hHook, nCode, wParam, lParam );}EXE代码:void CTestDlg::OnBnClickedStart(){    PeekMessage( &msg, NULL, WM_USER, WM_USER + 1000, PM_NOREMOVE );    InstallHook( GetCurrentThreadId() );    while ( ::GetMessage( &msg, NULL, WM_USER, WM_USER + 1000 ) )    {        switch(msg.message)         {         case WM_CHARMSG:            AfxMessageBox( "收到" );            break;        }     }}


[解决办法]
PeekMessage( &msg, NULL, WM_USER, WM_USER + 1000, PM_NOREMOVE );//这句可以注释掉吧
有了::GetMessage( &msg, NULL, WM_USER, WM_USER + 1000 )就行了
GetMessage第3个和第4个参数直接传NULL;


[解决办法]
PostThreadMessage( dwThreadID, WM_CHARMSG, 0, 0 ); //不能断点,所以我也不知道有没有成功
下面加个
MessageBox(NULL,"postmsg","",MB_OK);//试试代码到这没有
DLL可以被调试吧?怎么会跟踪不到?
而且我感觉,截取键盘消息还是用DirInput的好用,貌似可以全局监视键盘,以前我做的DNF一键召唤就是用的DirInput,HOOK没用- -!

热点排行