Как я могу контролировать размер и положение нового окна процесса из приложения WinForms? - PullRequest
3 голосов
/ 23 июля 2010

В моем приложении WinForms Process.Start() используется для открытия файлов в их собственном приложении.Я хочу разделить экран пополам, показывая приложение WinForms на одной половине и новый процесс на другой.Я знаю, что могу использовать Process.MainWindowHandle, чтобы получить дескриптор окна, но как я могу установить его размер и положение?

Я предполагаю, что мне нужно использовать какой-то Windows API, но какой и как?Поскольку это не совсем «в моей рулевой рубке», я не уверен, нужно ли (и как) мне использовать разные API на 64-битной Windows.

1 Ответ

5 голосов
/ 23 июля 2010

Рассматриваемый метод Windows API - SetWindowPos. Вы можете объявить это так:

[DllImport("user32.dll")]
private extern static bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

и читайте об этом здесь: http://msdn.microsoft.com/en-us/library/ms633545.aspx

Добавлена ​​

Process.MainWindowHandle - это параметр hWnd, который вы будете использовать. hWndInsertAfter, вероятно, будет вашим дескриптором формы (Form.Handle). Вы можете использовать тип экрана для доступа к информации о рабочем столе: http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx

Добавлен комментарий Томаса

Убедитесь, что вы WaitForInputIdle перед вызовом SetWindowPos.

Process process = Process.Start(...);
if (process.WaitForInputIdle(15000))
    SetWindowPos(process.MainWindowHandle, this.Handle, ...);

Объявление для SetWindowPos выше работает как для 32-, так и для 64-битных Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...