Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> システム >> 新規にデスクトップを作成するには

新規にデスクトップを作成するには

  デスクトップは作成しようと思えば作成できますし、切り替えも可能です。
  ただし、デスクトップの作成や切り替えはプログラムからは可能ですが、ユーザーの操作ではできません。

  あるデスクトップ(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;
}
  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita