c# - VB/C# 中的 Windows 10 VirtualDesktop/任务视图
问题描述
参考https://github.com/MScholtes/VirtualDesktop/issues/15
我希望以编程方式做三件事,特别是:
- 如何激活任务视图,即 Win-Tab
- 如何停用任务视图
- 如何判断我们当前是否在任务视图中
我可以通过在命令提示符下运行以下命令来调出任务视图:
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));
谢谢你。
解决方案
我找到了一种无需启动进程即可激活任务视图的方法:
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;
}
我没有广泛测试过这个功能,所以我不知道它是否适用于所有情况。
推荐阅读
- c# - 管理自动滚动
- amazon-web-services - 使用 lambda 函数的 AWS 弹性搜索更改策略
- java - Client Server tcp reset 导致丢包
- javascript - 为什么我们还要在 html 中使用表单元素?
- python - 带有 Apache 光束 TypeError 的云发布/订阅
- c - 如何使用 gdb 将反汇编语法更改为 intel?
- c# - C# - 我应该从什么集合大小开始使用 Dictionary
- android - Android/Kotlin:我尝试创建一个简单的Singleton,但是当我想使用它时,它并没有导入我想使用的类中的类
- xaml - 当绑定到自定义类的 IsEnabled 时,样式触发器仅以一种方式工作
- vue.js - 为什么单击手风琴项会打开所有项?