方法一
在C#的System.Diagnostics.ProcessStartinfo类可以支持设置进程启动时隐藏窗口,今天再来分享一个使用WMI对象的的方法来隐藏启动程序的窗口。使用Win32_Process可以直接启动一个进程,但是缺少对这个进程的控制:比如让它隐藏自己的窗口。下面的的例子可以做到这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function start-hiddenproc { [CmdletBinding()] param( [string]$processname = 'notepad.exe' ) $startclass = Get-CimClass -ClassName Win32_ProcessStartup $startinfo = New-CimInstance -CimClass $startclass -Property @{ShowWindow = 0} -ClientOnly $class = Get-CimClass -ClassName Win32_Process Invoke-CimMethod -CimClass $class -MethodName Create -Arguments @{ Commandline = $processname; ProcessStartupInformation = [CimInstance]$startinfo } }
|
该函数将要执行的进程的路径作为参数,这也方便你在脚本中加入验证路径是否存在的逻辑。
获取到Win32_ProcessStartup类,然后使用它创建一个启动信息实例。
New-CimInstance的参数ClientOnly有一个别名: –Local。与参数的别名相比,我通常更喜欢使用参数的全名。这样更方便用户去查阅帮助文档。
获取到Win32_Process类,然后在Invoke-CimMethod中使用它的Create方法,将上面演示的的参数传递给它。
方法二
1.启动PowerShell时隐藏自己的窗口 假如我在计划任务中定时通过Powershell.exe来执行一个脚本文件,我想隐藏这个窗口,此时我们可以考虑使用PowerShell.exe的选项参数: -WindowStyle 将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。 使用方法:
PowerShell.exe -WindowStyle Hidden -file '脚本.ps1'
2.在PowerShell启动其它进程时隐藏窗口
Start-Process notepad.exe -WindowStyle Hidden
3.使用PowerShell隐藏其它进程的窗口 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Add-Type @' [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); '@ -name “Win32ShowWindowAsync” -namespace Win32API Function Set-ProcessWindowStyle { param( [Parameter( Mandatory=$true, ValueFromPipeline=$true)] [System.Diagnostics.Process]$Process, [ValidateSet("Show", "Minimized","Maximized","Hidden")] [string]$WindowStyle="Show" ) $WinStateInt = 1 switch($WindowState) { "Hidden" {$WinStateInt = 0} "Show" {$WinStateInt = 1} "Maximize" {$WinStateInt = 3} "Minimize" {$WinStateInt = 6} } [Win32API.Win32ShowWindowAsync]::ShowWindowAsync($Process.MainWindowHandle,$WindowState) }
|
使用方法:
Get-Process notepad Set-ProcessWindowStyle -WindowStyle Hidden
PS:如果关联进程没有主窗口,则 MainWindowHandle 值为零。 隐藏窗口后将永远失去对该窗口的操作机会。
参考链接:
http://www.pstips.net/start-application-in-hidden-window.html
http://www.jb51.net/article/68186.htm