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