BOOL CloseDesktop(HDESK hDesktop)
この関数はNT3.51以降で使用可能。
オープンされているデスクトップの全てのハンドルがクローズされると、デスクトップはシステムによって破棄される。
引数の意味は、以下の通り。
hDesktop | クローズするデスクトップのハンドル |
戻り値は、関数の実行に成功したか否かを表す真偽値である。
void DispNewDesktop() { HDESK hNewDesk, hOrgDesk, hInputDesk; DWORD AccessFlag; /* 新規に作成するデスクトップ用のアクセス権を初期設定 */ AccessFlag = STANDARD_RIGHTS_ALL | DESKTOP_CREATEMENU /* これがないとコントロールメニューがなくなる->メッセージボックスの移動不可 */ | DESKTOP_CREATEWINDOW /* 必須 */ | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD; /* 元のスレッドのデスクトップを退避 */ hOrgDesk = GetThreadDesktop(GetCurrentThreadId()); /* 元の入力デスクトップを退避 */ hInputDesk = OpenInputDesktop(0, FALSE, AccessFlag); /* 新規デスクトップを作成 */ hNewDesk = CreateDesktop( "HogeHoge", NULL, NULL, 0, AccessFlag, NULL); if(hNewDesk == NULL) { MessageBox(NULL, "CreateDesktop() error.", "DiskNewDesktop", MB_OK); return; } /* 作成したデスクトップと現在のスレッドを関連付ける */ SetThreadDesktop(hNewDesk); /* 作成したデスクトップをアクティブにする */ SwitchDesktop(hNewDesk); /* メッセージの表示 */ MessageBox(NULL, "Hello", "DispNewDesktop", MB_OK); /* 元の入力デスクトップをアクティブにする */ SwitchDesktop(hInputDesk); /* 元のデスクトップと現在のスレッドを関連付ける */ SetThreadDesktop(hOrgDesk); /* 作成したデスクトップの破棄 */ CloseDesktop(hNewDesk); /* 入力デスクトップのクローズ */ CloseDesktop(hInputDesk); }