M-Y-Y
@M-Y-Y

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C# 仮想デスクトップ GetWindowDesktopIdでエクスプローラーが取得できない?

Win11で、C#を使ってエクスプローラーの該当ウィンドウがどの仮想デスクトップにあるのかを取得したいと色々調べています。
https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ivirtualdesktopmanager
を参考に取得する方法はなんとかわかったのですが、肝心のエクスプローラーだけがうまくいきません…。

エクスプローラーはひとつの親ハンドルで複数の仮想デスクトップに存在するのでそもそもこの方法では不可能なのかもという気がしているのですが、何か正しい方法をご存じの方はおられるでしょうか…?

該当するソースコード

[InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("a5cd92ff-29be-454c-8d04-d82879fb3f1b")]
public interface IVirtualDesktopManager
{
    bool IsWindowOnCurrentVirtualDesktop(IntPtr topLevelWindow);
    Guid GetWindowDesktopId(IntPtr topLevelWindow);
    void MoveWindowToDesktop(IntPtr topLevelWindow, ref Guid desktopId);
}

Guid guid = VirtualDesktopManager.DesktopManager.GetWindowDesktopId(new IntPtr(<ハンドル>));

ハンドルはテスト用に手打ちしてまして、エクスプローラー以外の諸々のソフトでは問題なくGUIDが取得できるのですがエクスプローラーだけは↓のようなエラーが出てしまいます。

型 'System.Runtime.InteropServices.COMException' のハンドルされていない例外が XXXX.exe で発生しました
追加情報: 要素が見つかりません。 (HRESULT からの例外:0x8002802B (TYPE_E_ELEMENTNOTFOUND))

0

No Answers yet.

Your answer might help someone💌