VB.NET使用win32 api隐藏外部应用程序的任务栏图标

时间:2015-06-10 18:35:34

标签: vb.net winapi taskbar

在我的项目中,我需要从任务栏隐藏外部应用程序的图标。我可以使用 user32.dll

中的 FindWindow 方法获取相应的窗口句柄

是否有任何隐藏任务栏图标的功能,例如:

  

HideTaskbarIcon(hwnd as IntPtr)

我在google上找到了以下代码,但无法理解运算符,有人可以在Visual Basic中详细说明所使用的运算符及其等价物:

long style= GetWindowLong(hWnd, GWL_STYLE);
style &= ~(WS_VISIBLE);    // this works - window become invisible 

style |= WS_EX_TOOLWINDOW;   // flags don't work - windows remains in taskbar
style &= ~(WS_EX_APPWINDOW); 

ShowWindow(hWnd, SW_HIDE); // hide the window
SetWindowLong(hWnd, GWL_STYLE, style); // set the style
ShowWindow(hWnd, SW_SHOW); // show the window for the new style to come into effect
ShowWindow(hWnd, SW_HIDE); // hide the window so we can't see it

1 个答案:

答案 0 :(得分:1)

  

是否有任何隐藏任务栏图标的功能,例如:

HideTaskbarIcon (hwnd as IntPtr)

没有

  

我在谷歌上发现了以下代码,但无法理解运营商

窗口样式表示为位掩码。相关代码使用按位ANDNOTOR运算符来操作各个位。它使用GetWindowLong()检索窗口的现有样式位,删除WS_VISIBLEWS_EX_APPWINDOW位,添加WS_EX_TOOLWINDOW位,然后重新分配新的位掩码到窗口。只有WS_EX_APPWINDOW位的可见窗口才会出现在任务栏上。

话虽如此,原始代码是错误的。无法使用_EX_检索/分配扩展窗口样式(名称中包含GWL_STYLE的窗口样式),必须使用GWL_EXSTYLE,并且没有理由永远操纵WS_VISIBLE ShowWindow()处理LONG style = GetWindowLong(hWnd, GWL_EXSTYLE); style |= WS_EX_TOOLWINDOW; style &= ~WS_EX_APPWINDOW; ShowWindow(hWnd, SW_HIDE); SetWindowLong(hWnd, GWL_EXSTYLE, style); ShowWindow(hWnd, SW_SHOW); ShowWindow(hWnd, SW_HIDE); 。原始代码应该是这样的:

Dim hWnd as IntPtr = ...
Dim style as Integer = GetWindowLong(hWnd, GWL_EXSTYLE)

style = style or WS_EX_TOOLWINDOW
style = style and not WS_EX_APPWINDOW

ShowWindow(hWnd, SW_HIDE)
SetWindowLong(hWnd, GWL_EXSTYLE, style)
ShowWindow(hWnd, SW_SHOW)
ShowWindow(hWnd, SW_HIDE);
  

有人可以详细说明所使用的运算符及其在visual basic中的等价物

Microsoft有关于该主题的文档:

Logical and Bitwise Operators in Visual Basic

Logical/Bitwise Operators (Visual Basic)

例如:

{{1}}