首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vista中从动态链接库SendMessage到另一个进程中的窗口

在Vista中从动态链接库SendMessage到另一个进程中的窗口
EN

Stack Overflow用户
提问于 2009-05-29 02:59:41
回答 2查看 4.7K关注 0票数 2

在这件事上,我是在拔掉我的头发。我正在尝试向另一个进程中的窗口发送消息。在调用SendMessage、PostMessage或PostThreadMessage之后,我一直收到来自GetLastError()的访问拒绝(0x5)。我试过关闭UAC。我还通过确保各个流程的完整性级别匹配来考虑UIPI。(我查看了来自SysInternals的进程资源管理器,现在是MS),我还关闭了Windows Defender,但没有成功。我可以从进程内部向窗口发送一条消息,但是从外部我得到了bupkus!这看起来像是某种安全问题,但我不知道它是什么,因为两个进程具有相同的完整性级别(中十进制8192)

来自发送消息的DLL的代码

代码语言:javascript
复制
UINT MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
::PostMessage(hwnd1,MsgCode,(WPARAM)1,(LPARAM)1);
DWORD errorcode = ::GetLastError();

从接收窗口中选择的代码

代码语言:javascript
复制
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;
    }
EN

回答 2

Stack Overflow用户

发布于 2009-05-29 05:35:07

它一定要是一条消息吗?在不同进程之间进行通信的方法有很多:

  • Pipes
  • Sockets
  • Shared Memory
  • Files
票数 2
EN

Stack Overflow用户

发布于 2015-06-22 22:11:16

看起来像是用户界面权限隔离(UIPI)的情况(即,如果您的DLL被加载到另一个进程)

在接收过程中使用ChangeWindowMessageFilterEx。我希望它能起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/924215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档