如何使用AutoIt3将流程窗口放在前面


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的一部分所以我在检查这个过程是否存在。如果不运行它,它将显示在屏幕中央的前面。

问题是,如果进程已经在运行,我想最大化它,并将它放在屏幕的前面到中心。

我在au3(AutoIt3XClass)中找不到任何将其推向前台的属性。做au3.Run会把它放在前面,但如果它已经在运行,我不想再运行了。

那么,也许au3有一个特性,只是把它展示/带到前面?如果不是,也许可以用其他方式把它带到前面?

编辑:

若进程正在运行,将其最大化并执行鼠标单击。若进程未运行,则运行进程并缓存其id,根据该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:WindowsSystem32mspaint.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);
}

您应该使用ProcessExists而不是WinExsits。要使窗口显示在前面,可以使用WinActivate。

相关内容

  • 没有找到相关文章

最新更新