Win8、Win10中不同进程间发送自定义消息失败

程序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)的开始位置添调用

void InitMessage()
{
	//将消息注册到系统
	m_myMsg = RegisterWindowMessage(_T("MYMESSAGE"));
	//将m_myMsg消息加入白名单,不会因为权限被阻止
	ChangeWindowMessageFilter(m_myMsg, MSGFLT_ADD);
}
 
  

其中m_myMsg就是需要监视的消息


用户账户控制设置如下图:

Win8、Win10中不同进程间发送自定义消息失败_第1张图片



你可能感兴趣的:(Windows)