2015-07-05 33 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

編輯:

如果進程正在運行,把它前面最大化,並進行鼠標點擊。如果進程沒有運行,運行進程並緩存它的id,通過該進程獲取進程,將其放在前面並等待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

在第一部分的if else中,我需要製作au3.Run,​​但在其他部分我也需要?或者只是BringToFront?在我的代碼中,我在if和else中運行了兩次。 –

+0

是的,但我不知道你爲什麼要檢查if(au3.WinExists(processName,「」)== 0),當你要做同樣的事情時,它是真的還是假的。 – msmolcic

+0

那麼我應該檢查什麼?只有在流程運行或沒有運行?我想檢查過程是否已經運行,只需將它放在前面,然後進行au3鼠標點擊即可。但是如果這個過程還沒有運行,那麼首先運行它然後睡10秒然後點擊。 –

0

您應該使用ProcessExists代替WinExsits。要將窗口置於前面,您可以使用WinActivate。