在这件事上,我是在拔掉我的头发。我正在尝试向另一个进程中的窗口发送消息。在调用SendMessage、PostMessage或PostThreadMessage之后,我一直收到来自GetLastError()的访问拒绝(0x5)。我试过关闭UAC。我还通过确保各个流程的完整性级别匹配来考虑UIPI。(我查看了来自SysInternals的进程资源管理器,现在是MS),我还关闭了Windows Defender,但没有成功。我可以从进程内部向窗口发送一条消息,但是从外部我得到了bupkus!这看起来像是某种安全问题,但我不知道它是什么,因为两个进程具有相同的完整性级别(中十进制8192)
来自发送消息的DLL的代码
UINT MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
::PostMessage(hwnd1,MsgCode,(WPARAM)1,(LPARAM)1);
DWORD errorcode = ::GetLastError();从接收窗口中选择的代码
BEGIN_MESSAGE_MAP(CMessageMailBox, CDialog)
ON_REGISTERED_MESSAGE(MsgCode, TextFromApp)
END_MESSAGE_MAP()
// Class Constructor
CMessageMailBox::CMessageMailBox(CWnd* pParent /*=NULL*/)
: CDialog(CMessageMailBox::IDD, pParent){
MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
}
//Message Handler
afx_msg LRESULT CMessageMailBox::TextFromApp(WPARAM wParam,LPARAM lParam){
::MessageBox(NULL,L"message recieved",L"yea!",MB_OK);
return 0L;
}发布于 2009-05-29 05:35:07
它一定要是一条消息吗?在不同进程之间进行通信的方法有很多:
发布于 2015-06-22 22:11:16
看起来像是用户界面权限隔离(UIPI)的情况(即,如果您的DLL被加载到另一个进程)
在接收过程中使用ChangeWindowMessageFilterEx。我希望它能起作用。
https://stackoverflow.com/questions/924215
复制相似问题