C# 如何使用AutoIt3将流程窗口置于前端?

C# 如何使用AutoIt3将流程窗口置于前端?,c#,.net,winforms,autoit-c#-wrapper,C#,.net,Winforms,Autoit C# Wrapper,我使用的是AutoIt3XClass,它是AutoIt3XLib 所以我正在检查这个过程是否存在。如果不运行它,它将显示在屏幕中央的前面 问题是,如果进程已经在运行,我想将其最大化,并将其放在屏幕中央的前面 我在au3(AutoIt3XClass)中找不到任何能让它走到前面的属性。执行au3.Run将它放到前面,但如果它已经在运行,我不想再次运行它 那么,也许au3有一个属性可以将其显示/带到前台?如果没有,可以用其他方式将其放在前面?编辑: 若进程正在运行,将其置于最前面并执行鼠标单击。若进程

我使用的是
AutoIt3XClass
,它是
AutoIt3XLib
所以我正在检查这个过程是否存在。如果不运行它,它将显示在屏幕中央的前面

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

我在
au3(AutoIt3XClass)
中找不到任何能让它走到前面的属性。执行
au3.Run
将它放到前面,但如果它已经在运行,我不想再次运行它


那么,也许
au3
有一个属性可以将其显示/带到前台?如果没有,可以用其他方式将其放在前面?

编辑:

若进程正在运行,将其置于最前面并执行鼠标单击。若进程并没有运行,运行进程并缓存它的id,根据该id获取进程,将其带到前面并等待10秒钟,然后执行鼠标单击。我试过了,效果如预期

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);
            }
程序逻辑:

[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);
}

编辑:

若进程正在运行,将其置于最前面并执行鼠标单击。若进程并没有运行,运行进程并缓存它的id,根据该id获取进程,将其带到前面并等待10秒钟,然后执行鼠标单击。我试过了,效果如预期

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);
            }
程序逻辑:

[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);
}

您应该使用ProcessExists而不是winexists。要将窗口置于最前面,可以使用WinActivate。

应该使用ProcessExists而不是WinExsits。要将窗口置于最前面,您可以使用WinActivate。

在if-else中,在第一部分中,我需要生成au3。运行,但在else部分,我也需要?还是仅仅是带着山峦?在我的代码中,我确实在if和else中运行了两次。是的,但我不确定当你要做相同的事情时,为什么要检查if(au3.WinExists(processName,“”)==0),无论它是真是假。那么我应该检查什么呢?仅当进程是否正在运行时?我想检查进程是否已经在运行,把它放到前面,让au3鼠标点击。但是如果进程还没有运行,那么首先运行它,然后休眠10秒,然后单击。在第一部分的if-else中,我需要生成au3。运行,但在else部分,我也需要?还是仅仅是带着山峦?在我的代码中,我确实在if和else中运行了两次。是的,但我不确定当你要做相同的事情时,为什么要检查if(au3.WinExists(processName,“”)==0),无论它是真是假。那么我应该检查什么呢?仅当进程是否正在运行时?我想检查进程是否已经在运行,把它放到前面,让au3鼠标点击。但如果进程尚未运行,则首先运行它,然后休眠10秒,然后单击。