首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

为什么Win7下管理员权限运行程序SentMessage和postMessage拒绝访问?该怎么解决

2012-01-14 
为什么Win7下管理员权限运行程序SentMessage和postMessage拒绝访问?我以管理员权限启动了一个程序,关联文

为什么Win7下管理员权限运行程序SentMessage和postMessage拒绝访问?
我以管理员权限启动了一个程序,关联文件双击又启动了一个程序,在程序互斥里我用SentMessageTimerOut发给管理员权限运行的窗口一个消息,失败了,返回值5,拒绝访问,我用postMessage也是一样失败了!如何解决请告知一下,我怀疑是权限不同的程序不能交互通讯?我想遇到此问题的朋友告诉我一下解决办法!(请别灌水,很急的,麻烦大姐了,在此谢过了)

[解决办法]
integrity level低的进程不能向高的进程发消息
用ChangeWindowMessageFilter调整
[解决办法]
typedef BOOL (WINAPI *_ChangeWindowMessageFilter)( UINT , DWORD); 

BOOL AllowMeesageForWin7(UINT uMessageID, BOOL bAllow)//注册Win7全局消息 

BOOL bResult = FALSE; 

HMODULE hUserMod = NULL; 

hUserMod = LoadLibrary( _T("user32.dll") ); 

if( NULL == hUserMod ) 

return FALSE; 


do
{
_ChangeWindowMessageFilter pChangeWindowMessageFilter = (_ChangeWindowMessageFilter)GetProcAddress( hUserMod, "ChangeWindowMessageFilter" ); 

if( NULL == pChangeWindowMessageFilter ) 

AfxMessageBox(_T("create windowmessage filter failed")); 

break;


bResult = pChangeWindowMessageFilter( uMessageID, bAllow ? 1 : 2 );//MSGFLT_ADD: 1, MSGFLT_REMOVE: 2 
}while (0);


if( NULL != hUserMod ) 

FreeLibrary( hUserMod ); 


return bResult; 
}
[解决办法]
注意
ChangeWindowMessageFilter第一个参数的消息值必须大于WM_USER
即是一个自定义消息。
[解决办法]
Vista之後加入了所謂UIPI 除了前述ChangeWindowMessageFilter 還可以考慮其他方式通信 比如socket

热点排行