2

私はこれで髪を引っ張っています。別のプロセスのウィンドウにメッセージを送信しようとしています。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;
    }
4

2 に答える 2

2

メッセージである必要はありますか?異なるプロセス間で通信する方法はたくさんあります。

  • パイプ
  • ソケット
  • 共有メモリ
  • ファイル
于 2009-05-29T05:35:07.040 に答える