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

时间:2013-01-24 17:07:42

标签: c# .net process.start

我正在使用

System.Diagnostics.Process.Start(ProcessInfo);

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

详细的代码段是

ProcessStartInfo PSI = new ProcessStartInfo("notepad.exe", LogFile);
PSI.WindowStyle = ProcessWindowStyle.Normal;
System.Diagnostics.Process p = System.Diagnostics.Process.Start(PSI);

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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