1. 程式人生 > >C#隱藏其他程式視窗以及新增最小化/最大化按鈕

C#隱藏其他程式視窗以及新增最小化/最大化按鈕


部落格處女作,寫一篇關於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);
}