c++ - 从 DLL 向 Vista 中另一个进程的窗口发送消息

标签 c++ winapi windows-vista sendmessage uipi

我对这个很抓狂。我正在尝试向另一个进程中的窗口发送消息。调用 SendMessage 或 PostMessage 或 PostThreadMessage 后,我不断收到来自 GetLastError() 的访问被拒绝 (0x5) 的消息。我试过关闭UAC。我还通过确保完整性级别在进程之间匹配来考虑 UIPI。 (我用 SysInternals(现在是 MS)的 Process Explorer 进行了检查)我还关闭了 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;
    }

最佳答案

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

  • 管道
  • 套接字
  • 共享内存
  • 文件

关于c++ - 从 DLL 向 Vista 中另一个进程的窗口发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/924215/

相关文章:

winapi - gcc 将输入通过管道传输到其中时出现错误文件描述符错误

delphi - TPageControl 选项卡区域 OnMouseEnter OnMouseLeave 事件

windows - winhttp.dll 一个标准的windows文件?

c++ - UAC 打开时如何在 VC++ 6.0 中创建文件?

c++ - ThreadSanitizer 说我的 spin_lock 有数据竞争,但是怎么办?

c++ - IJawsRenderer() 抛出的异常

c++ - 如何将剪贴板文本分配给 C++ 中的变量?

c++ - 部分特化和 SFINAE

c++ - 询问帐户类型两次

带有 RS-232 串行端口的 Javascript 接口(interface)