激活另一個實例,并獲得焦點在前端顯示
主要用到兩個API 函數:
- ShowWindowAsync (IntPtr hWnd, int cmdShow); 該函數設置由不同線程產生的窗口的顯示狀態。
- SetForegroundWindow (IntPtr hWnd); 該函數將創建指定窗口的線程設置到前臺,並且啟動該窗口。鍵盤輸入轉向該窗口,並為使用者改各種可視的記號。系統給創建前臺窗口的線程分配的權限稍高於其他線程。
hWnd是窗口的句柄。
nCmdShow是窗口顯示的狀態。可能設置的值如下:
SW_HIDE是顯示窗口為隱藏狀態,常數:0。
SW_SHOWNORMAL是顯示當前窗口,但窗口是最小化或最大化時會恢復窗口為原來的大小和位置,常數:1。
SW_SHOWMINIMIZED是激活窗口為當前窗口,並且顯示最小化,常數:2。
SW_SHOWMAXIMIZED是激活窗口為當前窗口,並且顯示最大化,常數:3。
SW_SHOWNOACTIVATE是顯示當前窗口,但不激活它作為當前窗口,常數:4。
SW_SHOW是激活窗口為當前窗口,並且顯示為當前的大小和位置,常數:5。
SW_MINIMIZE是顯示窗口為最小化,常數:6。
SW_SHOWMINNOACTIVE是顯示窗口為最小化,但不激活它作為當前窗口,常數:7。
SW_SHOWNA是顯示為當前的大小和位置,但不激活它作為當前窗口,常數:8。
SW_RESTORE是從任務裡恢復窗口顯示,常數:9。
代碼如下:
引用以下命名空間:
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;
代碼:
public class ActiveOtherProcess
{
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
System.Diagnostics.Process[] processcoll = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process process in processcoll)
{
if (process.ProcessName == "實例名稱")
{
ShowWindowAsync(process.MainWindowHandle, WS_SHOWNORMAL);
SetForegroundWindow(process.MainWindowHandle);
}
}
}
{
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
System.Diagnostics.Process[] processcoll = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process process in processcoll)
{
if (process.ProcessName == "實例名稱")
{
ShowWindowAsync(process.MainWindowHandle, WS_SHOWNORMAL);
SetForegroundWindow(process.MainWindowHandle);
}
}
}

浙公网安备 33010602011771号