[英]Set The Window Position of an application via command line
我有一个从桌面 0x0 位置开始的应用程序。 我想在我的桌面中央打开它。 我不想打开它并使用移动命令将它移动到中心,只想让我的应用程序立即在中心位置启动。
有没有办法通过命令提示符来做到这一点? 还有什么办法吗?
您将需要一个额外的实用程序,例如cmdow.exe来完成此操作。 专门查看/mov
开关。 您可以从cmdow
启动您的程序,也可以单独运行它,然后调用cmdow
以根据需要移动/调整其大小。
发现AutoHotKey非常适合窗口定位任务。
这是一个示例脚本。 将其命名为 notepad.ahk ,然后从命令行运行它或双击它。
Run, notepad.exe
WinWait, ahk_class Notepad
WinActivate
WinMove A,, 10, 10, A_ScreenWidth-20, A_ScreenHeight-20
它将启动一个应用程序(记事本),然后调整窗口大小,使其在窗口中居中,所有边都有 10 像素的边框。
我刚刚在寻求做同样的事情时发现了这个问题。
经过一些实验,我发现了一个答案,它的工作方式符合 OQ 想要的方式,而且非常简单,但不是很通用。
在桌面或其他地方创建一个快捷方式(您可以使用右键菜单中的创建快捷方式助手),将其设置为运行程序“cmd.exe”并运行它。 当窗口打开时,将其放置在您希望窗口所在的位置。 要保存该位置,请调出属性菜单并点击“保存”。
现在,如果您愿意,您还可以设置其他属性,例如颜色,我强烈建议将缓冲区的宽度更改为 120-240,将高度更改为 9999 并启用快速编辑模式(为什么这些不是默认值!?!)
现在你有一个可以工作的快捷方式。 为要在不同位置打开的每个 CMD 窗口制作其中一个。
现在为了诀窍,windows CMD START 命令可以运行快捷方式。 您无法在启动前以编程方式重新定位窗口,但至少它会出现在您想要的位置,并且您可以从批处理文件或其他程序启动它(和其他)。
使用带有 cmd /c 的快捷方式,您可以创建一个快捷方式,该快捷方式可以使用如下所示的命令一次启动所有链接:
cmd /c "start cmd_link1 && start cmd_link2 && start cmd_link3"
这将打开所有命令窗口到您喜欢的位置,并通过单击单独设置前景色、背景色、字体、管理员模式、快速编辑模式等属性。 现在将那个“链接”移动到您的启动文件夹中,您就拥有了一个完全没有外部程序的自动状态恢复。
这是一个非常直接的解决方案。 这不是通用目的,但我相信它会解决大多数阅读此问题的人试图解决的问题。
我最近做了这个,所以我会在这里发布我的 cmd 文件:
cd /d C:\shortucts
for %%f in (*.lnk *.rdp *.url) do start %%f
exit
后期编辑:我没有提到如果原始 cmd /c 命令运行提升,那么您的每个窗口都可以(如果选择了提升)开始提升,而无需单独重新提示您。 这非常方便,因为我每次启动计算机时都会启动 3 个 cmd 窗口和 3 个其他应用程序。
这可能应该是cmdow.exe
答案下的cmdow.exe
,但这里是我编写的一个简单的批处理文件,用于对您可以在任务栏中看到的所有窗口进行相当复杂和简单的控制。
第一步是运行cmdow /t
以显示这些窗口的列表。 查看Image
列中的图像名称,然后是命令行:
mycmdowscript.cmd imagename
以下是批处理文件的内容:
:: mycmdowscript.cmd
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET IMAGE=%1
SET ACTION=/%2
SET REST=1
SET PARAMS=
:: GET ANY ADDITIONAL PARAMS AND STORE THEM IN A VARIABLE
FOR %%I in (%*) DO (
IF !REST! geq 3 (
SET PARAMS=!PARAMS! %%I
)
SET /A REST+=1
)
FOR /F "USEBACKQ tokens=1,8" %%I IN (`CMDOW /t`) DO (
IF %IMAGE%==%%J (
:: you now have access to the handle in %%I
cmdow %%I %ACTION% !PARAMS!
)
)
ENDLOCAL
@echo on
EXIT /b
示例用法
:: will set notepad to 500 500
mycmdowscript.cmd notepad siz 500 500
您可能会重写它以允许对单个命令执行多个操作,但我还没有尝试过。
为此, cmdow.exe必须位于您的路径中。 请注意,当您下载此文件时,您的 AV 程序可能会对您大喊大叫。 这个工具( 我猜)过去曾被恶意软件作者用来操纵窗口。 它本身并无害处。
如果您只想在启动时启动一个窗口或从桌面上的快捷方式启动,Bill K. 的回答是最优雅的。
只需打开您想要的窗口,右键单击并选择属性。 选择布局取消选中“让系统定位窗口”,然后单击“确定”。
窗口现在将在您想要的地方打开。 您可以在其他选项卡上同时设置字体和窗口颜色。 甜的。
您可以在这里使用nircmd
项目: http : nircmd
示例代码:
nircmd win move ititle "cmd.exe" 5 5 10 10
nircmd win setsize ititle "cmd.exe" 30 30 100 200
nircmd cmdwait 1000 win setsize ititle "cmd.exe" 30 30 1000 600
如果您乐于运行批处理文件和几个小帮助程序,这里发布了一个完整的解决方案:
批处理文件如何运行程序并设置窗口的位置和大小? - Stack Overflow(问:2012 年 5 月 1 日)
由于FuzzyWuzzy,设置以下代码(快速和肮脏的实施例为1920×1080的屏幕分辨率-无自动宽度和高度的计算或功能使用等)中的AutoHotkey才达到的情况如下:
v_cmd = c:\temp\1st_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
SetTitleMatchMode 2
SetTitleMatchMode Fast
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, 0, 0,1920,500
v_cmd = c:\temp\2nd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, 0, 500,960,400
v_cmd = c:\temp\3rd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, 960, 500,960,400
SMALL EDIT与自动 X / Y 屏幕尺寸计算 [4 台显示器]相同的代码,但也可用于 3 / 2 台显示器。
Screen_X = %A_ScreenWidth%
Screen_Y = %A_ScreenHeight%
v_cmd = c:\temp\1st_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
SetTitleMatchMode 2
SetTitleMatchMode Fast
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, 0, 0,Screen_X/2,Screen_Y/2
v_cmd = c:\temp\2nd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, Screen_X/2, 0,Screen_X/2,Screen_Y/2
v_cmd = c:\temp\3rd_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, 0, Screen_Y/2,Screen_X/2,Screen_Y/2
v_cmd = c:\temp\4th_Monitor.ps1
Run, Powershell.exe -executionpolicy remotesigned -File %v_cmd%
WinWait, PowerShell
Sleep, 1000
;A = Active window - [x,y,width,height]
WinMove A,, Screen_X/2, Screen_Y/2,Screen_X/2,Screen_Y/2
我也想这样做并遇到了这个线程: Positioning CMD Window 。 无需下载外部文件,因为它会动态创建少量 VBScript 来完成所有工作。 您需要做的就是在以下部分指定您的 X 和 Y 坐标: Cscript //nologo "%~DP0pos.vbs" "%~F0" 100 50
。 .vbs 脚本在执行后也会被删除,因此无需整理任何内容。
将其放在批处理文件的顶部:
REM - Position the CMD Window Using .VBS -----------------------------------------
REM == MUST BE AT The Begining of The Batch =========
IF "%~1" == "RestartedByVBS" Goto :Code
REM Create the VBScript, if not exist
IF NOT EXIST "%~DP0pos.vbs" (
(FOR /F "tokens=1*" %%a in ('findstr "^VBS:" ^< "%~F0"') do (
echo(%%b
)) > "%~DP0pos.vbs"
)
REM Start "" "%~DP0pos.vbs" "%~F0" 100 50
Cscript //nologo "%~DP0pos.vbs" "%~F0" 100 50
EXIT /B
:code
DEL /Q "%~DP0pos.vbs"
REM ------------------------------------------------------------------------------
在此处放置您自己的批处理文件的内容
这在底部:
REM - Position the CMD Window Using .VBS -----------------------------------------
:Pos <BatchFileName> <X_Coordinate> <Y_Coordinate>
REM This Function will take three inputs: the name of the Batch file to execute
REM and the X and Y Coordinates to Position its CMD window
VBS: Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
VBS: Set objConfig = objWMIService.Get("Win32_ProcessStartup")
VBS: objConfig.SpawnInstance_
VBS: objConfig.X = WScript.Arguments(1)
VBS: objConfig.Y = WScript.Arguments(2)
VBS: Set objNewProcess = objWMIService.Get("Win32_Process")
VBS: intReturn = objNewProcess.Create( chr(34) & WScript.Arguments(0) &chr(34)& " RestartedByVBS", Null, objConfig, intProcessID)
REM ------------------------------------------------------------------------------
享受 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.