2016-07-17 10 views
0

Как программно увеличить программу, которую я сейчас выполняю на своем компьютере. Например, если у меня есть WINWORD.exe, работающий в диспетчере задач. Как его максимизировать?Развернуть окно другой запущенной программы

В моем коде я пробовал:

private void button1_Click(object sender, EventArgs e) 
{ 
    this.WindowState = FormWindowState.Maximised; 
} 

К сожалению, это только показывает мое приложение. Я бы хотел, чтобы он максимизировал другой exe, НО, если он не может найти его, я хочу, чтобы он вышел.

+1

https://msdn.microsoft.com/en-us/library/system.windows.automation. windowpattern.setwindowvisualstate (v = vs.110) .aspx –

+0

Поскольку я знал ['ShowWindow'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548 (v = vs.85) .aspx), поэтому я не искал дублирующийся пост. Но вы найдете ссылку, размещенную @PeterDuniho, действительно полезной. Он также содержит другой способ найти окно, используя ['FindWindow'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499 (v = vs.85) .aspx). Также он охватывает минимизацию и закрытие окна. Кроме того, если вы сочтете это полезным, вы можете проголосовать за него, чтобы сделать его более полезным для будущих читателей. –

+0

Я также добавил простой пример для [WindowPattern.SetWindowVisualState] (https://msdn.microsoft.com/en-us/library/system.windows.automation.windowpattern.setwindowvisualstate (v = vs.110) .aspx) Спасибо @HansPassant. –

ответ

3

Использование ShowWindow

Вы можете установить окна состояния с помощью ShowWindow метода. Для этого вам сначала нужно найти дескриптор окна, а затем использовать метод. Затем развернуть окно таким образом:

private const int SW_MAXIMIZE = 3; 
[System.Runtime.InteropServices.DllImport("user32.dll")] 
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 
private void button1_Click(object sender, EventArgs e) 
{ 
    var p = System.Diagnostics.Process.GetProcessesByName("WINWORD").FirstOrDefault(); 
    if(p!=null) 
    { 
     ShowWindow(p.MainWindowHandle, SW_MAXIMIZE); 
    } 
} 

Использования WindowPattern.SetWindowVisualState

Кроме того, как другой вариант (на основе комментариев Ханс), вы можете использовать SetWindowVisualState метод для установки состояния окна. Чтобы так себе, сначала добавьте ссылку на UIAutomationClient.dll и UIAutomationTypes.dll затем добавить using System.Windows.Automation; и разворачивать окно таким образом:

var p = System.Diagnostics.Process.GetProcessesByName("WINWORD").FirstOrDefault(); 
if (p != null) 
{ 
    var element = AutomationElement.FromHandle(p.MainWindowHandle); 
    if (element != null) 
    { 
     var pattern = element.GetCurrentPattern(WindowPattern.Pattern) as WindowPattern; 
     if (pattern != null) 
      pattern.SetWindowVisualState(WindowVisualState.Maximized); 
    } 
}