程序A和程序B,其中程序A向程序B发送自定义消息,在Win7、XP上都没有问题,但是在Win8、Win10中有些时候无法收到消息,导致调用失败。
经过一番测试,最终发现问题所在:
情景1: 用户账户控制中设置为从不通知 ===》 收发消息成功
情景2: 用户账户控制设置为其他(除了从不通知的任意一个)
2.1:程序A、程序B都以正常模式启动 ===》 收发消息成功
2.2:程序A以正常模式启动,程序B以管理员模式启动 ===》 收发消息失败
解决办法:
1、发送消息的程序(程序A)的发送消息调用
void SendMessageTo(HWND hWnd)
{
//将消息注册到系统
const UINT myMsg = RegisterWindowMessage(_T("MYMESSAGE"));
SendMessage(hWnd, myMsg, 0, 0);
}
2、在需要接收消息的程序( 程序B)的开始位置添调用
<span style="white-space:pre"></span><pre name="code" class="cpp">void InitMessage()
{
//将消息注册到系统
m_myMsg = RegisterWindowMessage(_T("MYMESSAGE"));
//将m_myMsg消息加入白名单,不会因为权限被阻止
ChangeWindowMessageFilter(m_myMsg, MSGFLT_ADD);
}
其中m_myMsg就是需要监视的消息
用户账户控制设置如下图: