Launch an executable, resize and position from CMD file (Win/PS)Tag(s): Misc Prog HowTo
A CMD file to launch an executable, resize its window and position it on the screen.
This a special CMD file since Powershell code is embedded in it. This code will call the Windows API MoveWindow.
How to use it :
launchresizeandmove.cmd <width> <height> <x position> <y position> <executable> <args ...>
Example
launchresizeandmove.cmd 1500 500 100 200 chrome.exe https://rgagnon.com/howto.html
to open Chrome at position 100x200 with a window size of 1500x500
[launchresizeandmove.cmd]
<# :
:: Based on https://robsnotebook.com/batch-to-launch-an-application-at-desired-window-position-from-command-line/
:: which is based on https://gist.github.com/coldnebo/1148334
:: Converted to a batch/powershell hybrid via http://www.dostips.com/forum/viewtopic.php?p=37780#p37780
@echo off
setlocal
set "POWERSHELL_BAT_ARGS=%*"
if defined POWERSHELL_BAT_ARGS set "POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%"
endlocal & powershell -NoLogo -NoProfile -Command "$_ = $input; Invoke-Expression $( '$input = $_; $_ = \"\"; $args = @( &{ $args } %POWERSHELL_BAT_ARGS% );' + [String]::Join( [char]10, $( Get-Content \"%~f0\" ) ) )"
goto :EOF
#>
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
}
"@
$win_width=$args[0]
$win_height=$args[1]
$screen_x=$args[2]
$screen_y=$args[3]
$progname = $args[4]
$progargs = $args[5..($args.Count-1)]
$MyProcess = Start-Process -FilePath $progname -ArgumentList $progargs -PassThru
While ($MyProcess.MainWindowHandle -eq 0) {
Start-Sleep -Seconds 1
}
$h = $MyProcess.MainWindowHandle
# Set MoveWindow output = to $ret so that it doesn't print 'True' to the terminal
$ret = [Win32]::MoveWindow($h, $screen_x, $screen_y, $win_width, $win_height, $true )
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com