過去に作ったソフトがVistaで動かない

・プロセス間通信がうまくいかないらしい。

セキュリティレベルの違うアプリケーション間では高いレベルのアプリケーションへSendMessage/PostMessageできないらしい。

  typedef BOOL (WINAPI *CHANGEWINDOWMESSAGEFILTER)(UINT message, DWORD dwFlag);
  CHANGEWINDOWMESSAGEFILTER ChangeWindowMessageFilter = NULL;
  HINSTANCE hDll;               
  DWORD WM_COPYDATA2 = RegisterWindowMessage(“WM_COPYDATA2”);
  hDll = LoadLibrary(“USER32.DLL”);
  if (hDll){
    ChangeWindowMessageFilter=(CHANGEWINDOWMESSAGEFILTER)GetProcAddress(hDll,”ChangeWindowMessageFilter”);
    if (ChangeWindowMessageFilter) {
      ChangeWindowMessageFilter(WM_COPYDATA,MSGFLT_ADD/*1*/);
    }
    FreeLibrary(hDll);
  }

これでSendMessage(WM_COPYDATA2,MSG,WP,LP)が通るらしい。

韓国サイトに、WM_COPYDATAがこれで使えるってあちこちに同じソースがはりつけてあったが、噂によると、WM_USERS以降のメッセージでしか利用できないという話。

ここで問題発生。 RegisterWindowMessageを異なる権限で実行するとUniqなIDが返ってこないことが判明!

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です