2

我需要打开两个 Internet 浏览器实例,每个实例在控制台应用程序的不同监视器(有两个)中打开。我找到了 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);
    }

谢谢大卫

4

2 回答 2

0

您传递给该方法的那个窗口句柄是空的,因为该进程没有时间打开它的主窗口。

在调用 SetWindowPos 之前尝试添加一个合理的超时时间,一两秒就足够了:

process.Start();

System.Threading.Thread.Sleep(1000);
process.WaitForInputIdle(); // just in case

SetWindowPos(...);
于 2012-08-22T17:05:12.147 回答
0

例如,此代码适用于 notepad.exe。使用 iexplore.exe 无法正常工作,因为process.MainWindowHandle == IntPtr.Zero, 和process.HasExited == true. 您需要找到找到窗口句柄的正确方法。

于 2012-08-22T17:05:23.160 回答