UAC Escalation Notification
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 */
Comments
- Anonymous
August 16, 2012
Windows 8 で、ユーザーがログインして、メトロのスタートメニューで「デスクトップ」を選択して、初めて通常のデスクトップを開いたときにイベントを取得したいんですが、SetWinEventHook みたいなので取得できる方法はご存じでしょうか?