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; } BOOL IsVistaOrLater() { OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); if( osvi.dwMajorVersion >= 6 ) return TRUE; return FALSE; }
简单使用:
if (IsVistaOrLater()) { if ( !AllowMeesageForWin7(0xAAA,TRUE) || !AllowMeesageForWin7(0xBBB,TRUE) ) { MessageBox("注册消息失败.","发生错误!",0); return FALSE; } }