モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

Windows 10 2004 (20H1) で追加された `IVirtualDesktopNotification2` について

 一応参照しやすい形としてブログに残しておきます。

1. IVirtualDesktopNotification との違い

[ComImport]
[Guid("c179334c-4295-40d3-bea1-c654d965605a")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IVirtualDesktopNotification
{
  void VirtualDesktopCreated(IVirtualDesktop pDesktop);

  void VirtualDesktopDestroyBegin(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void VirtualDesktopDestroyFailed(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void VirtualDesktopDestroyed(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void ViewVirtualDesktopChanged(IntPtr pView);

  void CurrentVirtualDesktopChanged(IVirtualDesktop pDesktopOld, IVirtualDesktop pDesktopNew);
}

に仮想デスクトップの名前変更通知が追加されただけのようです。

[ComImport]
[Guid("1ba7cf30-3591-43fa-abfa-4aaf7abeedb7")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IVirtualDesktopNotification2
{
  void VirtualDesktopCreated(IVirtualDesktop pDesktop);

  void VirtualDesktopDestroyBegin(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void VirtualDesktopDestroyFailed(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void VirtualDesktopDestroyed(IVirtualDesktop pDesktopDestroyed, IVirtualDesktop pDesktopFallback);

  void ViewVirtualDesktopChanged(IntPtr pView);

  void CurrentVirtualDesktopChanged(IVirtualDesktop pDesktopOld, IVirtualDesktop pDesktopNew);

  void VirtualDesktopRenamed(IVirtualDesktop pDesktop, [MarshalAs(UnmanagedType.HString)] string name);
}

サービス interface は次のとおりこのまま利用できます。coclass (通知を受けるクラス) には IVirtualDesktopNotificationIVirtualDesktopNotification2 を継承していれば問題ないかと。

[ComImport]
[Guid("0cd45e71-d927-4f15-8b0a-8fef525337bf")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IVirtualDesktopNotificationService
{
  uint Register(IVirtualDesktopNotification pNotification);

  void Unregister(uint dwCookie);
}

2. 仮想デスクトップの名前の取得および設定に関して

 先に発見されている方がおられるのでそちらを参照してください。

Update to V1.7 · MScholtes/VirtualDesktop@f7c0018 · GitHub

最後に

 SylphyHorn のベースになっている VirtualDesktop に PR を投げました。

github.com

 COM interface の バージョン 2 を使うためのパッチは綺麗でないのですが,手ごろないい実装も思いつかなかったので,このまま PR 送ることにしました。我こそは綺麗にかけるぞ! って人がいたら PR 投げるといいでしょう。

(眠いのでミスあったらすみません,後日直します

7/26 追記: 某 Issue 読んでたらこんな便利なものがあるんですね。すごいですねこれ。

github.com

mstdn.jp