C#隱藏其他程式視窗以及新增最小化/最大化按鈕
阿新 • • 發佈:2019-01-02
部落格處女作,寫一篇關於C#隱藏第三方應用程式視窗以及給視窗新增最小化/最大化的實現方法:
引入名稱空間:
using System.Runtime.InteropServices;
匯入庫:
// 查詢視窗控制代碼 [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); // 顯示/隱藏視窗 [DllImport("user32.dll", EntryPoint = "ShowWindow")] static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow); // 獲取視窗資訊 [DllImport("user32.dll", EntryPoint = "GetWindowLong")] public static extern int GetWindowLong(IntPtr hwnd, int nIndex); // 設定視窗屬性 [DllImport("user32.dll", EntryPoint = "SetWindowLong")] public static extern int SetWindowLong(IntPtr hMenu, int nIndex, int dwNewLong);
新增最小化/最大化按鈕:
注意:FindWindow()函式第2個引數表示程式執行後顯示在標題欄(windows工作列)的文字
此處我填“SRO_Client”(一款網路遊戲,有認識的嗎?o(╯□╰)o)
另:如果是網路遊戲的話一般不需要新增最大化按鈕,因為即使將遊戲視窗最大化後畫面是強制拉伸的。
// 新增最小化按鈕處理事件 private void btnMinBox_Click(object sender, EventArgs e) { // 查詢程式視窗控制代碼 IntPtr handle = FindWindow(null, “SRO_Client”); if (handle == IntPtr.Zero) { MessageBox.Show("該任務不存在"); } else { int GWL_STYLE = -16; // 該常量值表示視窗樣式(通過查詢API得到) //int WS_MAXIMIZEBOX = 0x00010000; // 視窗有最大化按鈕 int WS_MINIMIZEBOX = 0x00020000; // 視窗有最小化按鈕 int nStyle = GetWindowLong(handle, GWL_STYLE); //nStyle |= WS_MAXIMIZEBOX; nStyle |= WS_MINIMIZEBOX; SetWindowLong(handle, GWL_STYLE, nStyle); } }
// 隱藏/顯示視窗(flag:1顯示;0隱藏)
private void ShowOrHiddenWin(flag){
IntPtr handle = FindWindow(null, “SRO_Client”);
ShowWindow(handle, flag);
}