HDESK OpenInputDesktop( DWORD ControlFlags, BOOL Inheritance, DWORD AccessFlags);
この関数はNT3.51以降で使用可能である。
オープンしたハンドルをクローズするには、CloseDesktop関数を実行する。
引数の意味は以下の通り。
ControlFlags | CreateDesktopを参照。 |
Interitance | 選られたハンドルが継承可能かどうかを表すハンドル。 |
AccessFlags | CreateDesktopを参照。 |
戻り値は、オープンしたアクティブなデスクトップのハンドルである。
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); }