1

我在用

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

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

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

4

1 回答 1

1

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

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

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

于 2013-01-24T17:16:36.350 回答