首页 > 解决方案 > VB/C# 中的 Windows 10 VirtualDesktop/任务视图

问题描述

参考https://github.com/MScholtes/VirtualDesktop/issues/15

我希望以编程方式做三件事,特别是:

  1. 如何激活任务视图,即 Win-Tab
  2. 如何停用任务视图
  3. 如何判断我们当前是否在任务视图中

我可以通过在命令提示符下运行以下命令来调出任务视图:

explorer shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}

但是每次我需要任务视图时都在 C# 中启动一个进程是最好的方法吗?我更喜欢调用某些函数等的编程方式。我尝试了以下激活方法,但它什么也没做

public static readonly Guid CLSID_taskview = new Guid("3080F90E-D7AD-11D9-BD98-0000947B0257");
Activator.CreateInstance(Type.GetTypeFromCLSID(Guids.CLSID_taskview));

谢谢你。

标签: c#windowsvirtual-desktop

解决方案


我找到了一种无需启动进程即可激活任务视图的方法:

ShellExecuteA(NULL, "open", "shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257}", NULL, NULL, SW_SHOWDEFAULT);

相同的调用也可用于停用它。

要查看任务视图是否打开,您可以获取当前前台窗口的句柄并检查其类名,如下所示:

bool IsTaskViewOpen() {
    WCHAR className[100];
    HWND foreground = GetForegroundWindow();
    
    if (!foreground) {
        return false;
    }
    
    GetClassName(foreground, className, 100);
    return wcscmp(className, L"MultitaskingViewFrame") == 0;
}

我没有广泛测试过这个功能,所以我不知道它是否适用于所有情况。


推荐阅读