C 顯示 隱藏視窗對應的工作列

2022-09-27 08:51:13 字數 2256 閱讀 8262

wpf中全屏視窗,會自動隱藏工作列。

那非全屏視窗如何隱藏工作列?甚至有沒有一種場景,隱藏任務後自定義一套系統工作列來顯示?

以下會分階段講述一些概念,工作列、查詢視窗、控制視窗顯示。

工作列,其實也是乙個視窗,主屏的工作列名稱是"shell_traywnd"。

所以可以通過名稱查詢視窗,然後對視窗進行顯示、隱藏操作。

以下是主螢幕工作列的控制操作:

publ static class screentaskbar

///

/// 隱藏工作列

///

public static void hide()

}如果是多屏,對工作列進行處理的場景,一般是對視窗所對應的工作列操作。

如何獲取任意視窗所在的工作列呢?既然工作列也是視窗,那麼我們的關注點就是如何找到工作列視窗了。

user32有enumwindows函式,可以遍歷當前電腦的所有視窗。

private delegate bool enumwindowproc(intptr hwnd, int lparam);

[dllimport("user32")]

private static extern bool enumwindows(enumwindowproc lpenumfunc, int lparam);

enumwindowproc定義了委託的處理。新增**方法,返回的引數是控制代碼資訊:

bool onenumwindow(intptr hwnd, int lparam)

然後可以在**內部新增**,根據視窗的控制代碼資訊,我們去拿視窗的一些資訊,類名、視窗標題、視窗的bounds(位置、大小)

[dllimport("user32")]

private static extern int getclassname(intptr hwnd, stringbuilder lpstring, int nmaxcount);

[dllimport("user32")]

private static extern int getwindowtext(intptr hwnd, stringbuilder lptrstring, int nmaxcount);

[dllimport("user32")]

private static extern bool getwindowrect(intptr hwnd, ref lprect rect);

以下是部分遍歷出來的視窗類資訊:

所以,可以篩選出那些以traywnd字串結尾的,這些都是工作列視窗。

之後就是如何篩選出我們想要的工作列,即視窗對應的工作列。

視窗與工作列,是通過螢幕關聯在一起的。通過視窗獲取當前螢幕資訊,工作列的bounds如果與螢幕bounds相交,則說明此工作列在此螢幕內。

var intptr = new windowinterophelper(window).handwww.cppcns.comle;//獲取當前視窗的控制代碼

var screen = screen.fromhandle(intptr);//獲取當前螢幕

var currentscreenbound程式設計客棧s = screen.bounds;

var taskbars = windows.where(i => i.classname.contains("traywnd"));

var currenttaskbar = taskbars.firstordefault(i => i.bounds.intersectswith(currentscreenbounds));

獲取工作列,也可以通過工作列的控制代碼獲取螢幕,與主視窗所在螢幕判斷是否同乙個。

獲取了指定的工作列資訊後,我們就可以控制工作列顯示、隱藏了。呼叫下user32下函式showwindow即可:

private const int swhide = 0; //隱藏視窗

private const int swrestore = 9;//還原視窗

///

/// 通過控制代碼,窗體顯示函式

///

/// 窗體控制代碼

/// 顯示方式

/// 返回成功與否

[dllimport("user32.dll", entrypoint = "showwindowasync", setlasterror = true)]

public static extern bool showwindow(intptr hwnd, int cmdshow);

這裡的showwindow,與上面預設工作列操作所呼叫的showwindow不一樣,控制代碼引數是intptr

WM隱藏 顯示工作列

如下 using system.runtime.interopservices const uint shfs showtaskbar 0x0001 const uint shfs hidetaskbar 0x0002 const uint shfs showsipbutton 0x0004 con...

wince 隱藏 顯示工作列

有時候需要將工作列隱藏,封裝了乙個類。在視窗load的時候,先呼叫hide 視窗大小設定成螢幕大小就可以了。將windowstate設定成max不起作用,必須將視窗大小設定成螢幕大小 using system using system.runtime.interopservices namespac...

wince 隱藏 顯示工作列

有時候需要將工作列隱藏,封裝了乙個類。在視窗load的時候,先呼叫hide 視窗大小設定成螢幕大小就可以了。將windowstate設定成max不起作用,必須將視窗大小設定成螢幕大小 using system using system.runtime.interopservices namespac...