在我的项目中,我需要从任务栏隐藏外部应用程序的图标。我可以使用 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
答案 0 :(得分:1)
是否有任何隐藏任务栏图标的功能,例如:
HideTaskbarIcon (hwnd as IntPtr)
没有
我在谷歌上发现了以下代码,但无法理解运营商
窗口样式表示为位掩码。相关代码使用按位AND
,NOT
和OR
运算符来操作各个位。它使用GetWindowLong()
检索窗口的现有样式位,删除WS_VISIBLE
和WS_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}}