2015-07-05 3 views
1
if (au3.WinExists(processName, "") == 0) 
      { 
       au3.Run(@"C:\Program Files (x86)\Paint.exe", "", au3.SW_SHOW); 
       Thread.Sleep(10000); 
       au3.MouseClick("LEFT", 358, 913, 1, -1); 

      } 
      else 
      { 
       au3.Run(@"C:\Program Files (x86)\Paint.exe", "", au3.SW_SHOW); 
Thread.Sleep(10000); 
       au3.MouseClick("LEFT", 358, 913, 1, -1); 
      } 

Я использую AutoIt3XClass, которая является частью AutoIt3XLib Так я проверяю, если процесс существует или нет. Если его не запустить, он будет отображаться спереди в центре экрана.Как я могу открыть окно процесса с помощью AutoIt3?

Проблема в том, что процесс уже запущен, и я хочу его максимизировать и вывести его на передний план в центр экрана.

Я не нашел никаких объектов в au3(AutoIt3XClass), которые доставят его на передний план. Выполнение au3.Run вывести его на передний план, но я не хочу запускать его снова, если он уже запущен.

Возможно, у au3 есть свойство просто показать/перенести его на передний план? Если не возможно, используя другой способ, чтобы вывести его на передний план?

ответ

0

EDITED:

Если процесс запущен, довести его до передней развернутом и выполнить щелчок мыши. Если процесс не запущен, запустите процесс и кешируйте его идентификатор, получите процесс с помощью этого идентификатора, доведите его до фронта и подождите 10 секунд перед тем, как щелкнуть мышью. Я попробовал это и работает как ожидалось.

[DllImport("User32.dll")] 
private static extern bool SetForegroundWindow(IntPtr handle); 

[DllImport("User32.dll")] 
private static extern bool ShowWindow(IntPtr handle, int nCmdShow); 

private const int SW_SHOWMAXIMIZED = 3; 

public static void BringToFront(IntPtr handle) 
{ 
    if (handle == IntPtr.Zero) 
     return; 

    // Maximize window 
    ShowWindow(handle, SW_SHOWMAXIMIZED); 

    SetForegroundWindow(handle); 
} 

Программа логика:

AutoItX3 au3 = new AutoItX3(); 

string processName = "mspaint"; 
Process[] processes = Process.GetProcessesByName(processName); 

if (processes.Length == 0) // Process not running 
{ 
    int processId = au3.Run(@"C:\Windows\System32\mspaint.exe", "", au3.SW_SHOW); 
    Process process = Process.GetProcessById(processId); 
    IntPtr handle = process.MainWindowHandle; 
    BringToFront(handle); 
    Thread.Sleep(10000); 
    au3.MouseClick("LEFT", 358, 913, 1, -1); 
} 
else // Process running 
{ 
    BringToFront(processes[0].MainWindowHandle); 
    au3.MouseClick("LEFT", 358, 913, 1, -1); 
} 
+0

В том случае, если в первой части мне нужно сделать au3.Run, но на другой части мне тоже нужно? Или просто BringToFront? В моем коде я дважды запускал в if и else. –

+0

Да, но я не уверен, почему вы проверяете, если (au3.WinExists (processName, "") == 0), когда вы собираетесь делать то же самое, что и правда или ложь. – msmolcic

+0

Тогда что я должен проверить? Только если процесс запущен или нет? Я хочу проверить, запущен ли процесс, просто вывести его на передний план и сделать au3 mouseclick. Но если процесс еще не запущен, сначала запустите его, затем спящий 10 секунд, затем сделайте щелчок. –

0

Вы должны использовать ProcessExists вместо WinExsits. Чтобы перенести окно на передний план, вы можете использовать WinActivate.

Смежные вопросы