Created
June 20, 2020 19:05
-
-
Save SirJson/a3386b18238c5c0c7ca4af0057c5fdb7 to your computer and use it in GitHub Desktop.
This is a ugly hacked together C# Script that will hide your taskbar for 5 seconds and restores it. A starting point for a custom taskbar maybe?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Runtime.InteropServices; | |
using System; | |
using System.Windows; | |
using System.Threading; | |
using System.Drawing; | |
public enum TaskbarPosition | |
{ | |
Unknown = -1, | |
Left, | |
Top, | |
Right, | |
Bottom, | |
} | |
public sealed class Taskbar | |
{ | |
private const string ClassName = "Shell_TrayWnd"; | |
[DllImport("user32.dll")] | |
private static extern int FindWindow(string className, string windowText); | |
[DllImport("user32.dll")] | |
private static extern int ShowWindow(IntPtr hwnd, int command); | |
private const int SW_HIDE = 0; | |
private const int SW_SHOW = 1; | |
public Rectangle Bounds | |
{ | |
get; | |
private set; | |
} | |
public TaskbarPosition Position | |
{ | |
get; | |
private set; | |
} | |
public Point Location | |
{ | |
get | |
{ | |
return this.Bounds.Location; | |
} | |
} | |
public Size Size | |
{ | |
get | |
{ | |
return this.Bounds.Size; | |
} | |
} | |
//Always returns false under Windows 7 | |
public bool AlwaysOnTop | |
{ | |
get; | |
private set; | |
} | |
public bool AutoHide | |
{ | |
get; | |
private set; | |
} | |
private IntPtr taskbarHandle; | |
public void Show() | |
{ | |
ShowWindow(taskbarHandle, SW_SHOW); | |
} | |
public void Hide() | |
{ | |
ShowWindow(taskbarHandle, SW_HIDE); | |
} | |
public Taskbar() | |
{ | |
taskbarHandle = User32.FindWindow(Taskbar.ClassName, null); | |
APPBARDATA data = new APPBARDATA(); | |
data.cbSize = (uint) Marshal.SizeOf(typeof(APPBARDATA)); | |
data.hWnd = taskbarHandle; | |
IntPtr result = Shell32.SHAppBarMessage(ABM.GetTaskbarPos, ref data); | |
if (result == IntPtr.Zero) | |
throw new InvalidOperationException(); | |
this.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)); | |
result = Shell32.SHAppBarMessage(ABM.GetState, ref data); | |
int state = result.ToInt32(); | |
this.AlwaysOnTop = (state & ABS.AlwaysOnTop) == ABS.AlwaysOnTop; | |
this.AutoHide = (state & ABS.Autohide) == ABS.Autohide; | |
} | |
} | |
public enum ABM : uint | |
{ | |
New = 0x00000000, | |
Remove = 0x00000001, | |
QueryPos = 0x00000002, | |
SetPos = 0x00000003, | |
GetState = 0x00000004, | |
GetTaskbarPos = 0x00000005, | |
Activate = 0x00000006, | |
GetAutoHideBar = 0x00000007, | |
SetAutoHideBar = 0x00000008, | |
WindowPosChanged = 0x00000009, | |
SetState = 0x0000000A, | |
} | |
public enum ABE : uint | |
{ | |
Left = 0, | |
Top = 1, | |
Right = 2, | |
Bottom = 3 | |
} | |
public static class ABS | |
{ | |
public const int Autohide = 0x0000001; | |
public const int AlwaysOnTop = 0x0000002; | |
} | |
public static class Shell32 | |
{ | |
[DllImport("shell32.dll", SetLastError = true)] | |
public static extern IntPtr SHAppBarMessage(ABM dwMessage, [In] ref APPBARDATA pData); | |
} | |
public static class User32 | |
{ | |
[DllImport("user32.dll", SetLastError = true)] | |
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
public struct APPBARDATA | |
{ | |
public uint cbSize; | |
public IntPtr hWnd; | |
public uint uCallbackMessage; | |
public ABE uEdge; | |
public RECT rc; | |
public int lParam; | |
} | |
[StructLayout(LayoutKind.Sequential)] | |
public struct RECT | |
{ | |
public int left; | |
public int top; | |
public int right; | |
public int bottom; | |
} | |
Taskbar taskbar = new Taskbar(); | |
Console.WriteLine("Position: {0}, AlwaysOnTop: {1}; AutoHide: {2}; Bounds: {3}", taskbar.Position, taskbar.AlwaysOnTop, taskbar.AutoHide, taskbar.Bounds); | |
Console.WriteLine("Hide task bar for 5 sec"); | |
taskbar.Hide(); | |
Thread.Sleep(5*1000); | |
Console.WriteLine("Restore task bar!"); | |
taskbar.Show(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment