如何以编程方式确定Windows任务栏是否隐藏?我需要知道Windows任务栏是否被隐藏。我相信没有.NET方法可以做到这一点,而且我遇到过很多“如何隐藏和显示任务栏”示例,但我没有看到任何基于我正在寻找的东西。我不熟悉WindowsAPI,所以我发现很难理解遗留的Windows代码。有人可以指导我阅读一篇文章或输入一个代码来告诉我任务栏的当前状态是否隐藏吗?我用C#编写代码。谢谢。winSharp93提供了一个似乎有效的帮助程序类(“查找任务栏大小(和位置)”)。它使用Win32的SHAppBarMessage函数。这是他博客上的代码(少量补充):usingSystem;使用系统绘图;使用System.Runtime.InteropServices;namespaceTaskbarTest{publicenumTaskbarPosition{Unknown=-1,Left,Top,Right,Bottom,}publicsealedclassTaskbar{privateconststringClassName="Shell_TrayWnd";公共矩形边界{get;私有集;}publicTaskbarPositionPosition{get;私有集;}publicPointLocation{get{returnthis.Bounds.Location;}}publicSizeSize{get{returnthis.Bounds.Size;}}//Windows7下总是返回falsepublicboolAlwaysOnTop{get;私有集;}publicboolAutoHide{get;私有集;}publicTaskbar(){IntPtrtaskbarHandle=User32.FindWindow(Taskbar.ClassName,null);APPBARDATA数据=newAPPBARDATA();data.cbSize=(uint)Marshal.SizeOf(typeof(APPBARDATA));data.hWnd=taskbarHandle;IntPtrresult=Shell32.SHAppBarMessage(ABM.GetTaskbarPos,参考数据);如果(结果==IntPtr.Zero)抛出新的InvalidOperationException();这.Position=(TaskbarPosition)data.uEdge;this.Bounds=Rectangle.FromLTRB(data.rc.left,data.rc.top,data.rc.right,data.rc.bottom);data.cbSize=(uint)Marshal.SizeOf(typeof(APPBARDATA));结果=Shell32.SHAppBarMessage(ABM.GetState,参考数据);intstate=result.ToInt32();this.AlwaysOnTop=(state&ABS.AlwaysOnTop)==ABS.AlwaysOnTop;this.AutoHide=(state&ABS.Autohide)==ABS.Autohide;}}publicenumABM:uint{New=0x00000000,Remove=0x00000001,QueryPos=0x00000002,SetPos=0x00000003,GetState=0x00000004,GetTaskbarPos=0x00000005,Activate=0x00000006,GetAutoHideBar=0x00000007,SetAutoHideBar=0x00000008,WindowPosChanged=0x00000009,SetState=0x0000000A,}publicenumABE:uint{Left=0,Top=1,Right=2,Bottom=3}publicstaticclassABS{publicconstintAutohide=0x0000001;publicconstintAlwaysOnTop=0x0000002;}publicstaticclassShell32{[DllImport("shell32.dll",SetLastError=true)]publicstaticexternIntPtrSHAppBarMessage(ABMdwMessage,[In]refAPPBARDATApData);}publicstaticclassUser32{[DllImport("user32.dll",SetLastError=true)]publicstaticexternIntPtrFindWindow(stringlpClassName,stringlpWindowName);}[StructLayout(LayoutKind.Sequential)]publicstructAPPBARDATA{publicuintcbSize;公共IntPtrhWnd;公共uintuCallbackMessage;公共ABEuEdge;公共RECTrc;RECT{publicintleft;公共诠释顶部;公共权利;公共底部;作者声称它可以在他的Windows7机器上运行,而且它似乎也可以在我的XPPro机器上运行下面是你如何使用它:Taskbartb=newTaskbar();Console.WriteLine("w:{0},h:{1}-隐藏:{2}",tb.Size.Width,tb.Size.Height,tb.AutoHide);其中:tb.Size.Width和tb.Size.Height返回任务栏的宽度和高度,如果任务栏被隐藏,tb.AutoHide返回true,否则返回false。SystemParametersInfo和SPI_GETWORKAREA检索主显示器上工作区的大小。工作区是屏幕上未被系统托盘或应用程序桌面工具栏遮挡的部分。pvParam参数必须指向一个RECT结构,该结构接收客户区的坐标,以虚拟屏幕坐标表示。要获取主显示监视器以外的监视器的客户区,请调用GetMonitorInfo函数。您可以使用IsWindowVisibleWin32函数。[DllImport("user32.dll")][返回:MarshalAs(UnmanagedType.Bool)]staticexternboolIsWindowVisible(IntPtrhWnd);IntPtrhWnd=FindWindow("Shell_TrayWnd",null);如果(hWnd!=null)IsTaskBarVisible=IsWindowVisible(hWnd);我找到的解决方案都不适合我,所以我有完整的想法并且它对我有用。publicstaticboolIsTaskbarVisible(){returnMath.Abs??(SystemParameters.PrimaryScreenHeight-SystemParameters.WorkArea.Height)>0;}SystemParameters.PrimaryScreenHeight返回实际显示高度。SystemParameters.WorkArea.Height返回可用的工作区高度。如果它们不同,则显示任务栏。以上是C#学习教程:如何以编程方式判断Windows任务栏是否隐藏?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
