如何使用 AutoIt3 将进程 window 置于最前面?
How can I bring a process window to the front using 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
把它放在前面,但我不想再 运行 如果它已经 运行ning.
所以,也许 au3
有一个 属性 只是 show/bring 它到前面?如果不是,也许可以使用其他方式将其放在前面?
已编辑:
如果进程是 运行ning,将其最大化并执行鼠标单击。如果进程不是 运行ning,运行 进程并缓存它的 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:\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);
}
您应该使用 ProcessExists 而不是 WinExsits。要将 window 置于最前面,您可以使用 WinActivate。
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
把它放在前面,但我不想再 运行 如果它已经 运行ning.
所以,也许 au3
有一个 属性 只是 show/bring 它到前面?如果不是,也许可以使用其他方式将其放在前面?
已编辑:
如果进程是 运行ning,将其最大化并执行鼠标单击。如果进程不是 运行ning,运行 进程并缓存它的 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:\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);
}
您应该使用 ProcessExists 而不是 WinExsits。要将 window 置于最前面,您可以使用 WinActivate。