我在新建立线程里执行PostMessage(pDlg->GetSafeHwnd(),STATUS_MESSAGE,0,0); 意思是给窗口发送信息pDlg->GetSafeHwnd(),为窗口HWND
UINT _LockKey(LPVOID lparam)//返回机器信息
{
CMychatDlg *pDlg=(CMychatDlg *)lparam;

    PostMessage(pDlg->GetSafeHwnd(),STATUS_MESSAGE,0,0);
return 0;

}
_LockKey为线程函数  如果执行1次就正常 执行2次就出现错误 请问这是为什么呢

解决方案 »

  1.   

    检查消息处理函数的类型,参考ON_MESSAGE的文档
      

  2.   

    对了我有点没有说清楚 我第2次执行PostMessage() 仍然能执行消息处理函数 但是消息处理函数执行完毕就出现错误了 是接连弹出几个错误!
      

  3.   

    这个就是我的消息处理函数 我是设置一个全局钩子 如果只执行一次的话 设置钩子可以运行成功 但第2次消息函数执行了以后(注意是执行了消息函数以后证明:消息函数是可以执行过去的) 然后就连续出现几个 关闭程序错误。
    ////////////////////////////////////////////////消息处理函数
    void CMychatDlg::OnListenkey() 
    {

    hhkLowLevelKybd2000  = SetWindowsHookEx(WH_KEYBOARD_LL,        LowLevelKeyboardProc,AfxGetApp()->m_hInstance,0);

    }
      

  4.   

    你不能连续的SetWindowsHookEx呀你应该检查,如果已经SetWindowsHookEx同样的钩子,那么就直接返回就可以了.比如判断:if (hhkLowLevelKybd2000)
    {
        return ;
    }
    else
    {
    hhkLowLevelKybd2000  = SetWindowsHookEx(WH_KEYBOARD_LL,        LowLevelKeyboardProc,AfxGetApp()->m_hInstance,0);
    }
      

  5.   

    你安装的是系统钩子,只能安装一次,也只需要安装一次,因为你的SetWindowsHookEx最后的参数传递的是: 0 .