C#如何选择打开的应用程序窗口

ash*_*exm 2 c# macros

我正在尝试创建一个基本的宏录制/回放系统.如果我想选择一个打开的应用程序(如记事本)将其带到前面进行输入,我将如何通过名称或其他一些可靠的属性来调用它?

dri*_*iis 7

这是一个例子.基本上,获取Process,然后在它的MainWindowHandle上调用SetForegroundWindow:

using System;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;

namespace StackOverflow.Test
{
    class Program
    {
        static void Main(string[] args)
        {
            var proc = Process.GetProcessesByName("notepad").FirstOrDefault();
            if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
                    SetForegroundWindow(proc.MainWindowHandle);
        }

        [DllImport("user32")]
        private static extern bool SetForegroundWindow(IntPtr hwnd);
    }
}
Run Code Online (Sandbox Code Playgroud)

你应该知道这些限制:

系统限制哪些进程可以设置前景窗口.仅当满足下列条件之一时,进程才能设置前台窗口:

  • 该过程是前台过程.
  • 该过程由前台进程启动.
  • 该过程收到了最后一个输入事件.
  • 没有前台进程.
  • 正在调试前台进程.
  • 前景未锁定(请参阅LockSetForegroundWindow).
  • 前台锁定超时已到期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT).
  • 没有菜单处于活动状态