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

时间:2010-10-19 18:36:18

标签: c# macros

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

3 个答案:

答案 0 :(得分:7)

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

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

您应该了解这些限制:

  

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

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

答案 1 :(得分:0)

您可以先使用Process.GetProcesses - 这将为您提供所有正在运行的进程的列表。检查每个过程的不同属性 - 这应该让你去。

答案 2 :(得分:0)

查看名为“Autohotkey”的应用程序,它可以完成您需要的所有操作并节省大量编程时间,而且它是免费的。

如果autohotkey无法解决您的问题,或者您出于学习目的而这样做,有人会问一个“全新的”应用程序,等等,有一些链接可能会有所帮助:

Bringing Window to the Front in C# using Win32 API http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/92823775-29f6-4950-bf06-d2f1ca89ec8d(它说“移动窗口”,但仍然可以提供帮助)

希望它有所帮助。