在Windows命令行上设置应用程序的窗口位置

flmtquvp  于 2022-12-14  发布在  Windows
关注(0)|答案(9)|浏览(767)

我有一个应用程序从桌面的0x0位置开始。我想在桌面的中心打开它。我不想打开它并使用移动命令将它移到中心,相反,我的应用程序应该立即从中心位置开始。
是否有任何方法可以通过命令提示符执行此操作?

vsaztqbk

vsaztqbk1#

你需要一个额外的实用程序,比如cmdow.exe来完成这个任务。具体看一下/mov开关。你可以从cmdow启动你的程序,或者单独运行它,然后调用cmdow来根据需要移动/调整它的大小。

vyswwuz2

vyswwuz22#

已经发现AutoHotKey非常适合窗口定位任务。
下面是一个示例脚本。将其命名为notepad.ahk,然后从命令行运行它或双击它。

Run, notepad.exe
WinWait, ahk_class Notepad
WinActivate
WinMove A,, 10, 10, A_ScreenWidth-20, A_ScreenHeight-20

它将启动一个应用程序(记事本),然后调整窗口大小,使其在窗口中居中,四周有10像素的边框。

yrdbyhpb

yrdbyhpb3#

我只是发现这个问题,而在追求做同样的事情。
经过一些实验,我遇到了一个答案,工程的方式操作员会想要的,是简单的heck,但不是很一般的目的。
在桌面或其他地方创建快捷方式(您可以使用右键菜单中的创建快捷方式助手),将其设置为运行程序“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个其他应用程序都提升每次我启动我的电脑。

7rfyedvj

7rfyedvj4#

这可能应该是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程序可能会对您大喊大叫。这个工具(I guess)在过去曾被恶意软件作者用来操纵窗口。它本身并不有害。

4si2a6ki

4si2a6ki5#

您可以在此处使用nircmd项目:http://www.nirsoft.net/utils/nircmd.html
示例代码:

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
w8f9ii69

w8f9ii696#

如果您愿意运行一个批处理文件沿着几个小的帮助程序,完整的解决方案发布在这里:
How can a batch file run a program and set the position and size of the window? - Stack Overflow (asked: May 1, 2012)

8wtpewkr

8wtpewkr7#

如果你只是想在启动时启动一个窗口,或者从桌面上的快捷方式启动,比尔·K的答案是最优雅的。
只要打开你想要的窗口,右键单击并选择属性。选择布局,取消选中“让系统定位窗口”,然后单击确定。
窗口将在您想要的位置打开。您可以在其他选项卡上同时设置字体和窗口颜色。

b0zn9rqh

b0zn9rqh8#

多亏了FuzzyWuzzy,在AutoHotKey中设置以下代码(1920 x1080屏幕分辨率的快速和肮脏示例-无自动宽度和高度计算或函数使用等),以实现以下目标:

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
sycxhyv7

sycxhyv79#

我也想这样做,遇到了这个线程: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 ------------------------------------------------------------------------------

尽情享受吧:)

相关问题