新規にデスクトップを作成するには
デスクトップは作成しようと思えば作成できますし、切り替えも可能です。
ただし、デスクトップの作成や切り替えはプログラムからは可能ですが、ユーザーの操作ではできません。
あるデスクトップ(A)からあるデスクトップ(B)へ切り替えていると、デスクトップ(A)で動作しているウィンドウをマウスでクリックすることや、キーボードで操作することができなくなります。
かといって、デスクトップ(A)で動作しているアプリケーションは、そのまま問題なく動き続けています。
なので、新規にデスクトップを作成するのは、ユーザーがマウスやキーボードで操作できるウィンドウを制限することができる、結構便利な方法です。
以下は、デスクトップを作成し、そこにメッセージを表示する例です。
※ Debugでステップ実行する際は気をつけてください。
デスクトップが切り替わっているあいだは、Visual C++が動作しているデスクトップの操作が何もできなくなります。
■■■ newdesktop プロジェクト
■ main.cpp
#include <windows.h>
#include <tchar.h>
// エントリポイント
int WINAPI _tWinMain ( HINSTANCE,
HINSTANCE,
_TCHAR *,
int )
{
// 現在のデスクトップを保持
HDESK hSrcThread = GetThreadDesktop ( GetCurrentThreadId () );
if ( NULL == hSrcThread )
{
return 0;
}
HDESK hSrcInput = OpenInputDesktop ( 0,
FALSE,
DESKTOP_SWITCHDESKTOP );
if ( NULL == hSrcInput )
{
return 0;
}
// 新規デスクトップ作成
_TCHAR sz[] = _TEXT ( "サンプル" );
HDESK hNewDesktop = CreateDesktop ( sz,
NULL,
NULL,
0,
GENERIC_ALL,
NULL );
if ( NULL == hNewDesktop )
{
return 0;
}
// カレントを新規のデスクトップへスイッチ
SetThreadDesktop ( hNewDesktop );
SwitchDesktop ( hNewDesktop );
//------------------------------------------------------------
// ここから新規デスクトップで作業可能
MessageBox ( NULL,
_TEXT ( "新デスクトップ" ),
_TEXT ( "テスト" ),
MB_OK );
// ここまで新規デスクトップで作業可能
//------------------------------------------------------------
// 元に戻す
SetThreadDesktop ( hSrcThread );
SwitchDesktop ( hSrcInput );
// 新規デスクトップ終了
CloseDesktop ( hNewDesktop );
return 0;
} |
|