如何在使用 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);
但是,它会在默认桌面上打开记事本,但不会在运行主应用程序的扩展桌面上打开记事本。
现在,问题是,如何在活动桌面上打开记事本,即当前应用程序正在运行的窗口?
除了指定初始窗口状态(正常、隐藏等)之外,您基本上无法控制新启动的应用程序的启动方式以及它显示的位置。
这里最好的办法是启动应用程序,然后使用其窗口句柄告诉它移动。这一切都需要使用 P/Invoke 来调用 MoveWindow
。所有这些函数的 C# 签名都在 pinvoke.net。
这是一个非常简单(VB.NET)的示例,显示了基本思想。在这种情况下,正如@Lloyd指出的那样,您需要的窗口句柄是您从Process.Start
中获取Process.MainWindowHandle
。请注意,Process.MainWindowHandle
不会立即填写;通常需要调用 WaitForInputIdle
以确保实际创建窗口。如果MainWindowHandle
是0,那么你就会知道这太早了。