westlife
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Переделал функции чутка, чтобы была понятна суть процессов этих. У меня работают обе, с любым количеством процессов нотпада. но лучше знать наверно какой именно нотпад. Первая Код: function Set-WindowShow { param ( # Идентификатор окна [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)] [ValidateScript( {$_ -ne 0} )] [Alias('MainWindowHandle')] [System.IntPtr] $hWnd, # Состояние окна [Parameter(Mandatory)] [CmdShow] $CmdShow ) enum CmdShow { HIDE SHOWNORMAL SHOWMINIMIZED MAXIMIZE SHOWMAXIMIZED SHOWNOACTIVATE SHOW MINIMIZE SHOWMINNOACTIVE SHOWNA RESTORE SHOWDEFAULT FORCEMINIMIZE } if ( -not ( 'WindowShow' -as [type] )) { Add-Type @' using System; using System.Runtime.InteropServices; public class WindowShow { [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); } '@ } if ([WindowShow]::ShowWindowAsync($hWnd, $CmdShow)) { $CmdShow } } $MainWindowHandle = (Get-Process -Name notepad).Where({ $_.MainWindowHandle -ne 0 },'First',1).MainWindowHandle $MainWindowHandle | Set-WindowShow -CmdShow HIDE $MainWindowHandle | Set-WindowShow -CmdShow RESTORE $MainWindowHandle | Вторая Код: function WindowState { param( [Parameter( ValueFromPipeline = $true, Mandatory = $true, Position = 0 )] [ValidateScript({ $_ -ne 0 })] [System.IntPtr] $MainWindowHandle , [ValidateSet('FORCEMINIMIZE', 'HIDE', 'MAXIMIZE', 'MINIMIZE', 'RESTORE', 'SHOW', 'SHOWDEFAULT', 'SHOWMAXIMIZED', 'SHOWMINIMIZED', 'SHOWMINNOACTIVE', 'SHOWNA', 'SHOWNOACTIVATE', 'SHOWNORMAL')] [String] $State = 'SHOW' ) $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 } if ( -not ( "Win32Functions.Win32ShowWindowAsync" -as [Type] )) { Add-Type -MemberDefinition @" [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); "@ -Namespace 'Win32Functions' -Name 'Win32ShowWindowAsync' } [Win32Functions.Win32ShowWindowAsync]::ShowWindowAsync($MainWindowHandle , $WindowStates[$State]) > $null } $MainWindowHandle = (Get-Process -Name notepad).Where({ $_.MainWindowHandle -ne 0 },'First',1).MainWindowHandle WindowState $MainWindowHandle -State HIDE WindowState $MainWindowHandle -State SHOWNORMAL $MainWindowHandle | WindowState -State HIDE $MainWindowHandle | WindowState -State SHOWNORMAL $MainWindowHandle | |