« 久しぶりに | トップページ | ハロー キティ ツールバー -@nifty »

2009.03.31

Vista 対応

いまさらながら、Vista の UAC 対応について調べた。

一般 or 保護モードで起動されたプロセスからの、管理者モード で起動されたプロセスへの PostMessage() は失敗するのだね。

今まで、当然のように UAC は解除してたので気付いてなかったです^^;

VD では、ウィンドウをドラッグする瞬間に、そのドラッグされたウィンドウを subclass 化してそのウィンドウの情報を取得しているのだが、その情報を PostMesssage() で VD に伝えてるので、UAC Enable だと届かず、謎な状態でした^^;

で、ちょっとぐぐったら、ChangeWindowMessageFilter() で、PostMessage() できるメッセージを登録できるとのこと。

で、試したら、一発でいまくいきました!

Vista 以外だと、この API は無いかもしれないので、LoadLibrary() して

typedef BOOL (__stdcall *FUNC_BOOL_UINT_DWORD)(UINT, DWORD);
void ChangeWindowMessageFilterForVista(void)
{
 FUNC_BOOL_UINT_DWORD ChangeWindowMessageFilter;

 HMODULE hDll = LoadLibrary("user32.dll");
 if (hDll) {
  ChangeWindowMessageFilter = (FUNC_BOOL_UINT_DWORD) GetProcAddress(hDll, "ChangeWindowMessageFilter");
  if (ChangeWindowMessageFilter) {
   ChangeWindowMessageFilter(WM_USER_DRAGGING_CAPTION, MSGFLT_ADD);
   ChangeWindowMessageFilter(WM_USER_FINISH_DRAGGING_CAPTION, MSGFLT_ADD);
  }
  FreeLibrary(hDll);
 }
}


こんな感じでうまくいきました。管理者権限、難しいね。。。

#WM_USER(= 0x0400) 以上のメッセージじゃないと ADD できないっぽいね。

明日、会社でXPでも試してみよう。(XP は持ってないの。。。)

(←フリーソフトを作るモチベーションアップのために、ぜひ。)

|

« 久しぶりに | トップページ | ハロー キティ ツールバー -@nifty »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Vista 対応:

« 久しぶりに | トップページ | ハロー キティ ツールバー -@nifty »