<Return[C]><Top>

CreateDesktop

Declare Function Api_CreateDesktop& Lib "user32" Alias "CreateDesktopA" (ByVal lpszDesktop$, ByVal lpszDevice$, pDevmode As DEVMODE, ByVal dwFlags&, ByVal dwDesiredAccess&, lpsa As SECURITY_ATTRIBUTES)

Declare Function CreateDesktop Lib "user32" Alias "CreateDesktopA" (ByVal lpszDesktop As String, ByVal lpszDevice As String, pDevmode As DEVMODE, ByVal dwFlags As Long, ByVal dwDesiredAccess As Long, lpsa As SECURITY_ATTRIBUTES) As Long

呼び出し側プロセスに関連付けられているウィンドウステーション上に、新しいデスクトップを作成する。この関数は、新しいデスクトップにアクセスするために使用できるハンドルを返す。呼び出し側プロセスに、プロセスの作成時にシステムが割り当てたウィンドウステーションか、SetProcessWindowStation 関数を使って設定したウィンドウステーションを関連付けておかなければならない。デスクトップとは、ウィンドウステーションオブジェクト内にある安全なオブジェクトのことである。デスクトップは1つの論理的なディスプレイ表面(display surface)と、ウィンドウ、メニュー、フックを備えている。

パラメータ
lpszDesktop
    [入力]作成するデスクトップの名前を表す、NULL で終わる文字列へのポインタを指定する。デスクトップの名前は大文字と小文字を区

    別しないが、円記号(\)を使うことはできない。
lpszDevice
    予約されている。NULL でなければならない。
pDevmode
    予約されている。NULL でなければならない。
dwFlags
    [入力]呼び出し側アプリケーションが、デスクトップ上で他のアプリケーションと協調動作する方法を指定する。

    0 または次の値を指定する。

    値                                                        

説明                                                                                                                         

    DF_ALLOWOTHERACCOUNTHOOK

 

他のアカウント内で動作するプロセスが、デスクトップ上でこのプロセスに対してフックを設定することを認める。

dwDesiredAccess
    [入力]返されるハンドルのデスクトップ上でのアクセス権を指定する。このパラメータには、DESKTOP_CREATEWINDOW フラグをセット

    しなければならない。CreateDesktop 関数は、内部でこのハンドルを使って 1 つのウィンドウを作成するからである。このほかに

    READ_CONTROL や WRITE_DAC などの標準的なアクセス権や、次のデスクトップ固有のアクセス権を任意に組み合わせて指定するこ

    とができる。

    値                                                  

説明                                                                                                       

    DESKTOP_CREATEMENU

デスクトップ上にメニューを作成するために必要である。

    DESKTOP_CREATEWINDOW

デスクトップ上にウィンドウを作成するために必要である。

    DESKTOP_ENUMERATE

デスクトップを列挙するために必要である。

    DESKTOP_HOOKCONTROL

何らかのウィンドウフックを確立するために必要である。

    DESKTOP_JOURNALPLAYBACK

デスクトップ上でジャーナルを再生するために必要である。

    DESKTOP_JOURNALRECORD

デスクトップ上でジャーナルを記録するために必要である。

    DESKTOP_READOBJECTS

デスクトップ上でオブジェクトを読み取るために必要である。

    DESKTOP_SWITCHDESKTOP

SwitchDesktop 関数を使ってデスクトップをアクティブ化するために必要である。

    DESKTOP_WRITEOBJECTS

デスクトップ上でオブジェクトを書き込むために必要である。

lpsa
    [入力]返されたハンドルを子プロセスが継承できるかどうかを決定する SECURITY_ATTRIBUTES 構造体へのポインタを指定する。こ

    のパラメータが NULL の場合、このハンドルは継承できない。
    この構造体の lpSecurityDescriptor メンバは、新しいデスクトップのセキュリティ記述子を指定する。このパラメータが NULL の場合、この

    デスクトップは親ウィンドウステーションからセキュリティ記述子を継承する。

戻り値
    関数が成功すると、新しく作成されたデスクトップのハンドルが返る。指定されたデスクトップがすでに存在する場合も関数は成功し、既存

    のデスクトップのハンドルが返る。このハンドルを使い終わった後は、CloseDesktop 関数を呼び出してこのハンドルを閉じる。
    関数が失敗すると、NULL が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    CreateDesktop 関数は、デスクトップにアクセスするために使用できるハンドルを返す。
    dwDesiredAccess パラメータに、デスクトップオブジェクトのセキュリティ記述子にアクセスするための標準的なアクセス権である

    READ_CONTROL、WRITE_DAC、WRITE_OWNER のいずれかをセットしている場合、DESKTOP_READOBJECTS アクセス権と

    DESKTOP_WRITEOBJECTS アクセス権もセットしなければならない。