我需要打开两个互联网浏览器实例,每个实例在控制台应用程序的不同显示器(有两个)中打开。我发现SetWindowPos方法并没有找到使用它的方法。就我而言,它没有做任何事......
请帮助我正确使用这种方法...
以下是我正在使用的代码:
[DllImport("user32.dll")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
public static void Launch()
{
Process process = new Process();
process.StartInfo.FileName = "iexplore.exe";
process.StartInfo.Arguments = "microsoft.com";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
Rectangle monitor = Screen.AllScreens[1].WorkingArea;
SetWindowPos(process.MainWindowHandle, 0, monitor.Left, monitor.Top, monitor.Width - 200, monitor.Height, 0);
}
谢谢大卫
答案 0 :(得分:0)
您传递给该方法的窗口句柄为空,因为该进程没有时间打开其主窗口。
尝试在调用SetWindowPos之前添加合理的超时,一两秒就足够了:
process.Start();
System.Threading.Thread.Sleep(1000);
process.WaitForInputIdle(); // just in case
SetWindowPos(...);
答案 1 :(得分:0)
此代码可用于例如notepad.exe。由于process.MainWindowHandle == IntPtr.Zero
和process.HasExited == true
,iexplore.exe无效。您需要找到找到窗口句柄的正确方法。