我在用
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);
但是,它在默认桌面上打开记事本,而不是在运行主应用程序的扩展桌面上。
现在,问题是,如何在当前应用程序正在运行的活动桌面即窗口上打开记事本?
1条答案
按热度按时间g2ieeal71#
除了指定初始窗口状态(正常、隐藏等)之外,您基本上无法控制新启动的应用程序如何启动以及在哪里显示。
这里最好的方法是启动应用程序,然后使用其窗口句柄告诉它移动。这都需要使用P/Invoke来调用
MoveWindow
。所有这些函数的C#签名都在pinvoke.net上。这里有一个非常好的simple (VB.NET) example,它展示了基本思想,在这个例子中,正如@Lloyd指出的,您需要的窗口句柄是从
Process.Start
返回的Process.MainWindowHandle
,请注意,Process.MainWindowHandle
不会立即填充;你通常需要调用WaitForInputIdle
来确保窗口被创建。如果MainWindowHandle
是0,你就知道它太快了。