그 방법에 대해서는 Window7 이상에서 File Drag & Drop이 안될 때 를 참조하기 바란다.
만일 권한이 낮은 프로세스의 메세지를 받고 싶다면 ChangeWindowMessageFilter를 이용하여 권한이 높은 프로세스에서수신하고싶은 메세지를 등록해야 한다. 하지만 이 함수는 Window XP에는 존재하지 않기에 윈도우의 버전을 구분해서 비스타 이상인 경우만 사용해야 한다.
OS의 버전을 확인하기위해 보통은 이렇게 사용한다.
OSVERSIONINFOEX osVer = { sizeof(OSVERSIONINFOEX), }; ::GetVersionEx ((OSVERSIONINFO*) &osVer); if (osVer.dwMajorVersion>= 6) { // 비스타 or 윈도우7 } else { // XP or 그 이하 }
하지만 위와 같이 구현하면 XP에서는 오류가 날 것이다. 왜냐면 ChangeWindowMessageFilter 라는 함수는 USER32.DLL 파일에 있는데 그 파일이 XP에는 없기 때문이다. 이럴경우 해당 함수를 동적으로 읽어서 함수포인터를 이용해서 실행하는 형식으로 코드를 바꿔줘야한다. 그리고 버전 확인 또한 위와 같이 하는게 아니라 해당 함수의 존재 유무로 하면 될 것이다.
BOOL (WINAPI *pfn)(UINT,DWORD); HMODULE hUSER32= LoadLibrary(_T("USER32.DLL")); if (hUSER32) pfn = (BOOL (WINAPI *)(UINT,DWORD)) GetProcAddress(hUSER32, _T("ChangeWindowMessageFilter")); if (pfn) { // 비스타 또는이후 버전 윈도우 pfn (WM_COPYDATA,1 /* MSGFLT_ADD */); pfn (WM_MY_BNA,1 /* MSGFLT_ADD */); FreeLibrary(hUSER32); } }
참조 : http://skysblue.tistory.com
댓글 없음:
댓글 쓰기