2010-10-19 113 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

相關問題