這裡做一個簡單的測試,我們用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);
//完成!
}
}
沒有留言:
張貼留言