选择AutoHideTaskbar选项和脚本(ahk脚本)试图隐藏任务栏时如何隐藏任务栏?

时间:2015-09-24 06:52:13

标签: c# windows winforms autohotkey

我的应用程序旨在全屏启动,不惜任何代价,任务栏都不应该对用户可见。对于隐藏在下面的任务栏,ahk脚本将在后台运行以执行所需的操作。

关于AHK脚本,请选择以下链接以获取其描述。

http://ahkscript.org/

如果"自动隐藏任务栏"脚本不起作用。选择了Windows 7的功能。

因此我采用了以下C#代码来解决应用程序方面的问题。

但在某些情况下,例如在Windows重启后应用程序第一次启动时,showwindow功能无法正常工作,尤其是选择了“自动隐藏”任务栏选项时。

示例代码

    [DllImport("user32.dll")]
    public static extern int FindWindowEx(int parentHandle, int childAfter, string className, int windowTitle);

    [DllImport("user32.dll")]
    private static extern int GetDesktopWindow();

    [DllImport("user32.dll")]
    private static extern int ShowWindow(int hwnd, int command);

    protected static int Handle
    {
        get
        {
            return (int)FindWindow("Shell_TrayWnd", "");
        }
    }

    protected static int HandleOfStartButton
    {
        get
        {
            int handleOfDesktop = GetDesktopWindow();
            int handleOfStartButton = FindWindowEx(handleOfDesktop, 0, "button", 0);
            return handleOfStartButton;
        }
    }
    public static void HideTaskbar()
    {
        int Taskbar = ShowWindow(Handle, SW_HIDE);
        int StartButton = ShowWindow(HandleOfStartButton, SW_HIDE);

    }

    private void button1_Click(object sender, EventArgs e)
    {
        HideTaskbar();
    }

脚本 下面的脚本隐藏了任务栏并禁用了某些键的执行。(右侧窗口和左侧窗口按钮和 ctrl + esc

WinHide,ahk_class Shell_TrayWnd
LWin::Suspend
RWin::Suspend
^Esc::Suspend

我尝试过的其他选项

[DllImport("user32.dll")]
    public static extern bool SetWindowPos(
    int hWnd,                 //   handle to window    
    int hWndInsertAfter,  //   placement-order handle    
    short X,                  //   horizontal position    
    short Y,                  //   vertical position    
    short cx,                 //   width    
    short cy,                //    height    
    uint uFlags             //    window-positioning options    
    );

    private void button1_Click(object sender, EventArgs e)
    {

        int hwnd = FindWindow("Shell_TrayWnd", "");
        SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);
    }

以上代码改变了功能。工作不正常。

请建议任何方法来处理此方案。

2 个答案:

答案 0 :(得分:0)

这是一个AutoHotkey解决方案,用于检查操作系统版本并更改隐藏任务栏设置:

If (A_OSVersion = WIN_7) {
    ; retrieve Registry Value of AutoHide Taskbar
    RegRead, OutputVar, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2, Settings 

    ; If AutoHide Taskbar is On
    If (SubStr(OutputVar, 18, 1) == 3) {
        ChangeSetting := RegExReplace(OutputVar, (03), "02",, 1, 16) 
        ;ChangeSetting := StrReplace(OutputVar, "3", "2",,1)
        RegWrite, REG_BINARY, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2, Settings, % ChangeSetting
        ; The Code below Automatically applies Registry settings (and on Win 8.1 Explorer.exe is also restarted immediatley
        ; Alternatively you could use Shutdown Command to Reboot the system but this is much faster...
        Process, Close, explorer.exe 

    }   
}

如果您只想测试一下,请参考以下代码:

Gui, Add, Button, x1 y1 w110 h30 gButton1, Change AutoHide
Gui, Show,, New GUI Window
Return

Button1:
    RegRead, OutputVar, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2, Settings 
    ChangeSetting := ((SubStr(OutputVar, 18, 1) == 3) 
                   ? RegExReplace(OutputVar, (03), "02",, 1, 16)
                   : RegExReplace(OutputVar, (02), "03",, 1, 16))
    RegWrite, REG_BINARY, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2, Settings, % ChangeSetting
    Process, Close, explorer.exe 
Return

GuiClose:
ExitApp

答案 1 :(得分:0)

人们仍然可以通过按键盘上的Windows键或其他快捷方式来访问任务栏。您所做的只是破解计算机的注册表项以破坏用户的自定义快捷方式。

您真正想要做的是创建一个全屏最大化窗口(类似于您在最大化YouTube视频时看到的内容)。

设置窗口的属性,以便: 1. FormBorderStyle = None, 2.在表单加载时,获取屏幕并将窗口大小调整为该大小。