我们公司有作为任务栏图标运行的应用程序 - 除了任务栏图标之外没有 UI。
某些事件会导致任务栏启动 explorer.exe 以显示目录。用户交互不会导致这种情况,因此我们的应用程序没有焦点。
我可以使用如下代码在 Windows 资源管理器中显示目录:
Process.Start("explorer.exe", "c:\somedirectory");
问题是,文件夹在后台启动,我似乎无法给它焦点。
部分问题是 explorer.exe 进程立即退出,单独启动 explorer.exe 进程。我能够使用 Process.processes()
找到启动的窗口,并查看窗口标题和进程的开始时间。
一旦我最终掌握了流程(并等待它打开),我就会努力集中精力。这是我尝试过的:
//trying to bring the application to the front
form.TopMost = true;
form.Activate();
form.BringToFront();
form.Focus();
Process process = ...;
ShowWindow(process.Handle, WindowShowStyle.ShowNormal);
SetForegroundWindow(process.Handle);
SwitchToThisWindow(process.Handle, true);
ShowWindow(process.MainWindowHandle, WindowShowStyle.ShowNormal);
SetForegroundWindow(process.MainWindowHandle);
SwitchToThisWindow(process.MainWindowHandle, true);
这会使任务栏中的窗口闪烁,但它仍然没有聚焦。
如何让窗口出现在屏幕前面?
最佳答案
您可以使用 Shell.Application
scripting interface要求资源管理器创建并显示一个新窗口。我相信使用类型化接口(interface)也可以做到这一点,但目前我不知道确切的接口(interface)。
var shellApplication = Type.GetTypeFromProgID("Shell.Application");
dynamic shell = Activator.CreateInstance(shellApplication);
shell.Open(@"C:\drop\");
这似乎打开了带有焦点的窗口(在 Win 8.1 上使用定时器在 30 秒后打开进行了测试,然后在聚焦的 Web 浏览器中导航直到定时器触发)。
关于c# - 在任务栏中从 C# 应用程序聚焦 Windows 资源管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224673/