私はこれで髪を引っ張っています。別のプロセスのウィンドウにメッセージを送信しようとしています。SendMessage または PostMessage または PostThreadMessage を呼び出した後、GetLastError() から Access Denied (0x5) を取得し続けます。UACをオフにしてみました。また、整合性レベルがプロセス全体で一致するようにすることで、UIPI も考慮しました。(SysInternals、現在はMSのProcess Explorerで確認しました)Windows Defenderも無効にしましたが、うまくいきませんでした。プロセス内からウィンドウにメッセージを送信することはできますが、外部からはブプカスが発生します。これはある種のセキュリティ上の問題のように思えますが、両方のプロセスが同じ整合性レベル (中 - 10 進数の 8192) を持っているため、それが何であるかはわかりません。
メッセージを送信する DLL からのコード
UINT MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
::PostMessage(hwnd1,MsgCode,(WPARAM)1,(LPARAM)1);
DWORD errorcode = ::GetLastError();
受信ウィンドウから選択されたコード
BEGIN_MESSAGE_MAP(CMessageMailBox, CDialog)
ON_REGISTERED_MESSAGE(MsgCode, TextFromApp)
END_MESSAGE_MAP()
// Class Constructor
CMessageMailBox::CMessageMailBox(CWnd* pParent /*=NULL*/)
: CDialog(CMessageMailBox::IDD, pParent){
MsgCode = ::RegisterWindowMessage(_T("MESSAGE_CODING_STRING"));
::ChangeWindowMessageFilter(MsgCode,MSGFLT_ADD);
}
//Message Handler
afx_msg LRESULT CMessageMailBox::TextFromApp(WPARAM wParam,LPARAM lParam){
::MessageBox(NULL,L"message recieved",L"yea!",MB_OK);
return 0L;
}