Opening PowerShell Script and hide Command Prompt, but not the GUI

后端 未结 4 2150
深忆病人
深忆病人 2020-12-11 06:54

I currently open my PowerShell script through a .bat file. The script has a GUI. I tried to put this in my script but it hid the GUI as well and also kept looping because I

4条回答
  •  隐瞒了意图╮
    2020-12-11 07:20

    If you want to hide the Console behind the GUI I've had success with the following native functions:

    # .Net methods for hiding/showing the console in the background
    Add-Type -Name Window -Namespace Console -MemberDefinition '
    [DllImport("Kernel32.dll")]
    public static extern IntPtr GetConsoleWindow();
    
    [DllImport("user32.dll")]
    public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
    '
    
    function Show-Console
    {
        $consolePtr = [Console.Window]::GetConsoleWindow()
    
        # Hide = 0,
        # ShowNormal = 1,
        # ShowMinimized = 2,
        # ShowMaximized = 3,
        # Maximize = 3,
        # ShowNormalNoActivate = 4,
        # Show = 5,
        # Minimize = 6,
        # ShowMinNoActivate = 7,
        # ShowNoActivate = 8,
        # Restore = 9,
        # ShowDefault = 10,
        # ForceMinimized = 11
    
        [Console.Window]::ShowWindow($consolePtr, 4)
    }
    
    function Hide-Console
    {
        $consolePtr = [Console.Window]::GetConsoleWindow()
        #0 hide
        [Console.Window]::ShowWindow($consolePtr, 0)
    }
    

    Once the above functions have been added to your Form, simply call the Hide-Console function in your Form_Load event:

    $OnFormLoad = 
    {
        Hide-Console
    }
    

    If you need to show the Console, perhaps for debugging, you can easily show the console again by calling the Show-Console function:

    $OnButtonClick = 
    {
        Show-Console
    }
    

    For more information on the numbers you can pass to ShowWindow you can check out the ShowWindow documentation on MSDN here

    Update based on comment

    Thanks for this code. I tried to use it in my script, but where exactly am I suppose to put Hide-Console? My form load looks like this $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog()

    To hide the console with this code, all you need to do is call Hide-Console. Since you already have code in the Shown event ($objForm.Add_Shown) we can simply add another line to call the command:

    Change this:

    $objForm.Add_Shown({$objForm.Activate()})
    

    To this:

    $objForm.Add_Shown({
        $objForm.Activate()
        Hide-Console
    })
    

    When your form is Shown the console will be hidden (You can still call Show-Console if you want to see it later).

提交回复
热议问题