2009年3月24日 星期二

於程式執行階段實現 Alt+Tab 切換視窗功能(使用Win32 API)

這裡做一個簡單的測試,我們用TestSwitch程式執行的一個名為Form1.exe的視窗程式,當Form1.exe啟動後我們利用Alt+Tab或其他方式,將Form1.exe的視窗蓋住了,這時我們希望在TestSwitch程式中將Form1.exe的視窗再帶到螢幕的最前面,該怎麼做呢?


//要使用Win32 API前需要先加入

using System.Runtime.InteropServices;

public class TestSwitch
{
 //然後使用下面兩的API

 [DllImport("user32.dll")]
 static extern IntPtr SetActiveWindow(IntPtr hWnd);

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool SetForegroundWindow(IntPtr hWnd);

 //用來存放下面Form1.exe程序的物件
 private System.Diagnostics.Process formProc ;

 //假設有一支名為 Form1.exe 的視窗程式
 //先使用此方法執行(開啟)這支視窗程式
 public void Run()
 {
  //指定要開啟的檔案名稱
  System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("Form1.exe");

  //開啟檔案並回傳處理程序(之後需要此處理程序來取得Form1.exe的主視窗Handle值)
  formProc = System.Diagnostics.Process.Start(startInfo);
 }

 //切換至指定的視窗(利用此方法將Form1.exe的視窗帶到螢幕的最前面)
 public void Switch()
 {
  //切換視窗時需要該程序主視窗的Handle值(注意:是視窗的Handle不是程序的Handle)

  //第一步將該視窗設為作用中
  SetActiveWindow(formProc .MainWindowHandle);
  //第二步將該視窗帶到最前面
  SetForegroundWindow(formProc .MainWindowHandle);

  //完成!
 }
}

2009年3月23日 星期一


A HO