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

jgovgodb  于 2022-12-20  发布在  .NET
关注(0)|答案(1)|浏览(300)

我在用

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);

但是,它在默认桌面上打开记事本,而不是在运行主应用程序的扩展桌面上。
现在,问题是,如何在当前应用程序正在运行的活动桌面即窗口上打开记事本?

g2ieeal7

g2ieeal71#

除了指定初始窗口状态(正常、隐藏等)之外,您基本上无法控制新启动的应用程序如何启动以及在哪里显示。
这里最好的方法是启动应用程序,然后使用其窗口句柄告诉它移动。这都需要使用P/Invoke来调用MoveWindow。所有这些函数的C#签名都在pinvoke.net上。
这里有一个非常好的simple (VB.NET) example,它展示了基本思想,在这个例子中,正如@Lloyd指出的,您需要的窗口句柄是从Process.Start返回的Process.MainWindowHandle,请注意,Process.MainWindowHandle不会立即填充;你通常需要调用WaitForInputIdle来确保窗口被创建。如果MainWindowHandle是0,你就知道它太快了。

相关问题