Win32 API 日本語リファレンス
ホームUI.Shell › IVirtualDesktopManager

IVirtualDesktopManager

COM
IIDa5cd92ff-29be-454c-8d04-d82879fb3f1b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アプリケーションが仮想ワークスペースを構成するウィンドウのグループと連携できるようにするメソッドを公開します。

解説(Remarks)

ユーザーは複数のウィンドウをまとめて仮想デスクトップを作成できます。すべてのウィンドウは、いずれかの仮想デスクトップに属していると見なされます。ある仮想デスクトップが非表示になると、それに関連付けられたすべてのウィンドウも非表示になります。これにより、ユーザーは複数の作業環境を作成し、それらを切り替えられるようになります。同様に、ある仮想デスクトップがアクティブとして選択されると、その仮想デスクトップに関連付けられたウィンドウが画面に表示されます。

この概念をサポートするため、アプリケーションはユーザーをある仮想デスクトップから別の仮想デスクトップへ自動的に切り替えることは避けるべきです。その変更を行えるのはユーザーのみであるべきです。これをサポートするため、新しく作成されたウィンドウは現在アクティブな仮想デスクトップ上に表示されるべきです。さらに、アプリケーションが現在アクティブなウィンドウを再利用できる場合は、そのウィンドウが現在アクティブな仮想デスクトップ上にある場合にのみ再利用すべきです。そうでない場合は、新しいウィンドウを作成すべきです。

Virtual desktop visualization 上の図では、ユーザーは 2 つの仮想デスクトップを持っており、現在アクティブな仮想デスクトップは VD2 です。ユーザーが Outlook のメッセージ内のリンクをクリックすると、URI のアクティブ化が発生し、そのリンクを Internet Explorer のウィンドウで開くべきです。ユーザーが IE でリンクを現在のウィンドウで開くように構成している場合、通常は現在開いているウィンドウが使用されます。しかしこの場合、IE は非アクティブな仮想デスクトップ上にあります。このシナリオでは、IE は現在アクティブな仮想デスクトップ上に新しいウィンドウを作成すべきです。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT IsWindowOnCurrentVirtualDesktop(HWND topLevelWindow, BOOL* onCurrentDesktop)

指定したウィンドウが現在アクティブな仮想デスクトップ上にあるかどうかを示します。

topLevelWindowHWNDin対象のウィンドウ。
onCurrentDesktopBOOL*outtopLevelWindow が現在アクティブな仮想デスクトップ上にある場合は True、それ以外の場合は false

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 4 HRESULT GetWindowDesktopId(HWND topLevelWindow, GUID* desktopId)

指定したトップレベルウィンドウをホストしている仮想デスクトップの識別子を取得します。

topLevelWindowHWNDin対象とする仮想デスクトップのトップレベルウィンドウ。
desktopIdGUID*outtopLevelWindow をホストしている仮想デスクトップの識別子。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT MoveWindowToDesktop(HWND topLevelWindow, GUID* desktopId)

ウィンドウを指定した仮想デスクトップに移動します。

topLevelWindowHWNDin移動するウィンドウ。
desktopIdGUID*in移動先の仮想デスクトップの識別子。ウィンドウの識別子を取得するには GetWindowDesktopId を使用します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IVirtualDesktopManager "{A5CD92FF-29BE-454C-8D04-D82879FB3F1B}"
#usecom global IVirtualDesktopManager IID_IVirtualDesktopManager "{AA509086-5CA9-4C25-8F95-589D3C07B48A}"
#comfunc global IVirtualDesktopManager_IsWindowOnCurrentVirtualDesktop  3 sptr,var
#comfunc global IVirtualDesktopManager_GetWindowDesktopId               4 sptr,var
#comfunc global IVirtualDesktopManager_MoveWindowToDesktop              5 sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。