如何在使用 Process.Start() 时在活动显示器上打开应用程序

本文关键字:显示器 活动 应用程序 Process Start | 更新日期: 2023-09-27 17:55:39

我正在使用

System.Diagnostics.Process.Start(ProcessInfo);

以从我的 Windows 窗体应用程序中打开记事本中的文本文件。

详细的代码片段是

ProcessStartInfo PSI = new ProcessStartInfo("notepad.exe", LogFile);
PSI.WindowStyle = ProcessWindowStyle.Normal;
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI);
但是,它会在默认桌面上打开记事本

,但不会在运行主应用程序的扩展桌面上打开记事本。

现在,问题是,如何在活动桌面上打开记事本,即当前应用程序正在运行的窗口?

如何在使用 Process.Start() 时在活动显示器上打开应用程序

除了指定初始窗口状态(正常、隐藏等)之外,您基本上无法控制新启动的应用程序的启动方式以及它显示的位置。

这里最好的办法是启动应用程序,然后使用其窗口句柄告诉它移动。这一切都需要使用 P/Invoke 来调用 MoveWindow 。所有这些函数的 C# 签名都在 pinvoke.net。

这是一个非常简单(VB.NET)的示例,显示了基本思想。在这种情况下,正如@Lloyd指出的那样,您需要的窗口句柄是您从Process.Start中获取Process.MainWindowHandle。请注意,Process.MainWindowHandle不会立即填写;通常需要调用 WaitForInputIdle 以确保实际创建窗口。如果MainWindowHandle是0,那么你就会知道这太早了。