UAC Escalation Notification

Published 13 October 06 01:07 PM | hiroyuk 

Windows Vista でユーザー アカウントを超える操作 (例えばインストールや管理者として実行) を行おうとすると、デスクトップが暗くなって、UAC (User Account Control) エスカレーション ダイアログが表示されます。このダイアログが表示されることをアプリケーションから知りたいときは、次のように SetWinEventHook でイベントとコールバックを指定します。

  SetWinEventHook(
          EVENT_SYSTEM_DESKTOPSWITCH,
          EVENT_SYSTEM_DESKTOPSWITCH,
          NULL,
          WinEventCallback,
          0, 
          0,
          WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNTHREAD);

...

VOID CALLBACK WinEventCallback(
          HWINEVENTHOOK hWinEventHook,
          DWORD event,
          HWND hwnd,
          LONG idObject, 
          LONG idChild,
          DWORD dwEventThread, 
          DWORD dwmsEventTime)
{
     switch( event )
     {
          case EVENT_SYSTEM_DESKTOPSWITCH:
               MessageBox(hwnd, TEXT("EVENT_SYSTEM_DESKTOPSWITCH"), NULL, MB_OK );
               break;
     }

}

ここで注意が必要なのは、EVENT_SYSTEM_DESKTOPSWITCH は Windows Vista でしか使えないので、次のようにバージョンを宣言する必要があります。

#define _WIN32_WINNT 0x0600

EVENT_SYSTEM_DESKTOPSWITCH は WinUser.h で次のように宣言されているからです。

#if(_WIN32_WINNT >= 0x0600)
#define EVENT_SYSTEM_DESKTOPSWITCH      0x0020
#endif /* _WIN32_WINNT >= 0x0600 */

 

 

Filed under:

Comments

No Comments
Anonymous comments are disabled

About hiroyuk

マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。

Search

This Blog

DirectX 情報

Silverlight 情報

Windows 情報

WPF 情報

並列コンピューティング情報

著書

Syndication

Page view tracker