2010-10-19 56 views

回答

6

这里是一个例子。基本上,得到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)。
  • 没有菜单处于活动状态。
+0

非常感谢您的非常详细回答。我会立即尝试执行此操作。 – ashurexm 2010-10-19 19:40:28

+0

这似乎可行,但我遇到了一个特殊问题。我已经在这里问它作为一个新的问题:http://stackoverflow.com/questions/3973532 – ashurexm 2010-10-19 23:13:10

0

您可以从Process.GetProcesses开始 - 这会给你一个所有正在运行的进程的列表。检查每个过程的不同属性 - 这应该让你去。

+0

我面临的问题是,我如何使该进程窗口成为活动窗口。 – ashurexm 2010-10-19 19:00:23

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(它说“移动窗口”,但仍然可以帮助)

希望它有帮助。

+0

我已经看过autohotkey。这绝对是一个有用的外观应用程序,问题在于,由于第三方的限制和未来的预期用途(基于关闭选项列表的宏输入等),这必须是内部类型的东西。 – ashurexm 2010-10-19 18:59:36

相关问题