none
powershell управление окнами. RRS feed

  • Вопрос

  • у меня есть очень удобный скрипт с помощью которого можно управлять положением и размером окна powershell. Это очень удобно и поэтому я этот скрипт очень часто использую. Но тут мне захотелось таким же макаром поуправлять и другими окнами. Хочется иметь возможность задать положение и размеры окна плеера mpc-hc

    param(
    		   [int]$X				= 0,									# X координата - положение верхнего левого угла 
    		   [int]$Y				= 0,									# Y координата - положение верхнего левого угла
    		   [int]$W				= 0,									# Width - Ширина окна
    		   [int]$H				= 0										# Hight - Высота окна
    )
    
    BEGIN {            
    $signature = @'
    
    [DllImport("user32.dll")]
    public static extern bool MoveWindow(
    	IntPtr hWnd,
    	int X,
    	int Y,
    	int nWidth,
    	int nHeight,
    	bool bRepaint);
    
    [DllImport("user32.dll")]
    public static extern IntPtr GetForegroundWindow();
    
    [DllImport("user32.dll")]
    public static extern bool GetWindowRect(
    	HandleRef hWnd,
    	out RECT lpRect);
    
    public struct RECT
    {
    	public int Left;        // x position of upper-left corner
    	public int Top;         // y position of upper-left corner
    	public int Right;       // x position of lower-right corner
    	public int Bottom;      // y position of lower-right corner
    }
    
    '@
    
    Add-Type -MemberDefinition $signature -Name Wutils -Namespace WindowsUtils
    
    }
    PROCESS{
    	$phandle = [WindowsUtils.Wutils]::GetForegroundWindow()            
    
    	$o = New-Object -TypeName System.Object
    	$href = New-Object -TypeName System.RunTime.InteropServices.HandleRef -ArgumentList $o, $phandle
    
    	$rct = New-Object WindowsUtils.Wutils+RECT
    
    	[WindowsUtils.Wutils]::GetWindowRect($href, [ref]$rct) | Out-Null
    
    	if ( $W -eq 0 ) { $width = $rct.Right - $rct.Left } Else { $width = $W }
    	if ( $H -eq 0 ) { $height = $rct.Bottom - $rct.Top } Else { $height = $H }
    	
    
    	[WindowsUtils.Wutils]::MoveWindow($phandle, $X, $Y, $width, $height, $true) | Out-Null
    }

    Подскажите на что можно поменять строчку кода

    $phandle = [WindowsUtils.Wutils]::GetForegroundWindow()            

    Что бы получить указать на единственный mpc-hc запущенный на компьютере.
    Ну и наверняка мне захочется управлять окнами разных программ firefox и т.д.

    23 октября 2018 г. 14:19

Ответы