首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Windows 8 隱藏任務列:FindWindow/ShowWindow API 正確用法

     編輯:程式設計綜合問答

問題釐清

  • coredll.dll 是 Windows CE/行動裝置核心 DLL,桌面版 Windows 8 不存在。
  • FindWindow、ShowWindow 位於 user32.dll,所有桌面版 Windows 皆內建。

隱藏任務列完整步驟

1. 尋找任務列視窗類別名稱

  • Windows 8/10/11:Shell_TrayWnd(主任務列)
  • 次要螢幕任務列:Shell_SecondaryTrayWnd

2. C/C++ 程式碼範例

#include 
#include 

void HideTaskbar(bool hide) {
    HWND hTaskbar = FindWindow(_T("Shell_TrayWnd"), NULL);
    if (hTaskbar) {
        ShowWindow(hTaskbar, hide ? SW_HIDE : SW_SHOW);
        // 強制重繪
        RedrawWindow(hTaskbar, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);
    } else {
        std::cerr << "找不到任務列視窗" << std::endl;
    }
}

int main() {
    HideTaskbar(true);  // 隱藏
    Sleep(5000);
    HideTaskbar(false); // 顯示
    return 0;
}

3. C# P/Invoke 版本

using System;
using System.Runtime.InteropServices;

class TaskbarControl {
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    
    const int SW_HIDE = 0;
    const int SW_SHOW = 5;
    
    public static void SetVisible(bool visible) {
        IntPtr h = FindWindow("Shell_TrayWnd", null);
        if (h != IntPtr.Zero) ShowWindow(h, visible ? SW_SHOW : SW_HIDE);
    }
}

注意事項

  • 權限:需與 Explorer 相同完整性層級(通常為中等),管理員權限程式也可操作。
  • 多顯示器:需枚舉 Shell_SecondaryTrayWnd 逐一處理。
  • 系統保護:Windows 10/11 可能阻止隱藏任務列,建議改用 ITaskbarList3::SetTabProperties 或應用程式全螢幕模式 (SW_MAXIMIZE + WS_EX_TOPMOST)。
  • 替代方案:若為全螢幕應用,使用 SetWindowPos(hWnd, HWND_TOPMOST, 0,0, cx,cy, SWP_SHOWWINDOW) 覆蓋任務列,而非隱藏系統 UI。

總結

Windows 8 隱藏任務列使用 user32.dll 的 FindWindow("Shell_TrayWnd") + ShowWindow(SW_HIDE),coredll.dll 無關。注意權限與多螢幕情況,現代 Windows 建議採用全螢幕覆蓋而非隱藏系統元件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved