簡體   English   中英

有沒有辦法還原“隱藏在系統托盤中”的程序?

[英]Is there a way to restore a program that is “hidden in the system tray”?

我正在嘗試制作一個腳本,以還原最小化/隱藏到系統托盤的應用程序窗口,例如Process Explorer,TeamViewer,uTorrent。

我已經嘗試了幾件事,最有希望的是:

function Set-WindowStyle {
    <#
    .LINK
    Original gist - https://gist.github.com/jakeballard/11240204
    #>

    [CmdletBinding(DefaultParameterSetName = 'InputObject')]
    param(
        [Parameter(Position = 0, Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelinebyPropertyName = $True)]
        [Object[]] $InputObject,
        [Parameter(Position = 1)]
        [ValidateSet('FORCEMINIMIZE', 'HIDE', 'MAXIMIZE', 'MINIMIZE', 'RESTORE', 'SHOW', 'SHOWDEFAULT', 'SHOWMAXIMIZED', 'SHOWMINIMIZED', 'SHOWMINNOACTIVE', 'SHOWNA', 'SHOWNOACTIVATE', 'SHOWNORMAL')]
        [string] $Style = 'SHOW'
    )

    BEGIN {
        $WindowStates = @{
            'FORCEMINIMIZE'   = 11
            'HIDE'            = 0
            'MAXIMIZE'        = 3
            'MINIMIZE'        = 6
            'RESTORE'         = 9
            'SHOW'            = 5
            'SHOWDEFAULT'     = 10
            'SHOWMAXIMIZED'   = 3
            'SHOWMINIMIZED'   = 2
            'SHOWMINNOACTIVE' = 7
            'SHOWNA'          = 8
            'SHOWNOACTIVATE'  = 4
            'SHOWNORMAL'      = 1
        }

    $Win32ShowWindowAsync = Add-Type -MemberDefinition @'
[DllImport("user32.dll")] 
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); 
'@ -Name "Win32ShowWindowAsync" -Namespace Win32Functions -PassThru

    }

    PROCESS {
        foreach ($process in $InputObject) {
            $Win32ShowWindowAsync::ShowWindowAsync($process.MainWindowHandle, $WindowStates[$Style]) | Out-Null
            Write-Verbose ("Set Window Style '{1} on '{0}'" -f $MainWindowHandle, $Style)
        }
    }
}

這些腳本可用於其他目的(我可以“隱藏”一個窗口),

Get-Process TeamViewer | Set-WindowStyle -Style HIDE

但是似乎無法還原發送“ SHOW”,“ RESTORE”等組合的“最小化到托盤”應用程序。

Get-Process TeamViewer | Set-WindowStyle -Style SHOW
Get-Process TeamViewer | Set-WindowStyle -Style RESTORE

有任何想法嗎?

GIST: https//gist.github.com/lalibi/3762289efc5805f8cfcf

嘗試這個:

$sw = @'
[DllImport("user32.dll")]
public static extern int ShowWindow(int hwnd, int nCmdShow);
'@

$Proc = Get-Process TeamViewer | Select -ExpandProperty MainWindowHandle
$type = Add-Type -Name ShowWindow2 -MemberDefinition $sw -Language CSharpVersion3 -Namespace Utils -PassThru
$type::ShowWindow($Proc, 3) # 3 = maximize 2 = Minimize

我不知道它是否適合您的特定情況,請嘗試使用windowhide

我前一段時間使用它在需要時從批處理文件中隱藏特定的頂部窗口(它具有命令行版本),但是GUI會在系統中顯示很多隱藏的窗口。 然后,您可以使其出現。

窗口隱藏

它包含源代碼,因此您可以使其適應您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM