:: 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
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 ------------------------------------------------------------------------------
9条答案
按热度按时间vsaztqbk1#
你需要一个额外的实用程序,比如cmdow.exe来完成这个任务。具体看一下
/mov
开关。你可以从cmdow
启动你的程序,或者单独运行它,然后调用cmdow
来根据需要移动/调整它的大小。vyswwuz22#
已经发现AutoHotKey非常适合窗口定位任务。
下面是一个示例脚本。将其命名为notepad.ahk,然后从命令行运行它或双击它。
它将启动一个应用程序(记事本),然后调整窗口大小,使其在窗口中居中,四周有10像素的边框。
yrdbyhpb3#
我只是发现这个问题,而在追求做同样的事情。
经过一些实验,我遇到了一个答案,工程的方式操作员会想要的,是简单的heck,但不是很一般的目的。
在桌面或其他地方创建快捷方式(您可以使用右键菜单中的创建快捷方式助手),将其设置为运行程序“cmd.exe”并运行它。当窗口打开时,将其定位到您希望窗口所在的位置。要保存该位置,请打开属性菜单并单击“保存”。
现在,如果你愿意,你还可以设置其他属性,如颜色,我强烈建议将缓冲区的宽度改为120-240,高度改为9999,并启用快速编辑模式(为什么这些不是默认值!?!)
现在你有了一个可以使用的快捷方式。为每个你想在不同位置打开的CMD窗口创建一个快捷方式。
现在来说说技巧,windows的CMD START命令可以运行快捷方式。你不能在启动前通过编程重新定位窗口,但至少它会出现在你想要的地方,你可以从批处理文件或其他程序启动它(和其他程序)。
使用带有cmd /c的快捷方式,您可以创建一个快捷方式,该快捷方式可以通过使用如下所示的命令一次启动所有链接:
这将打开您的所有命令窗口到您喜欢的位置,并单独设置属性,如前景色,背景色,字体,管理员模式,快速编辑模式等,只需单击一下。现在移动一个“链接”到您的启动文件夹,你就有了一个自动状态恢复,而不需要任何外部程序。
这是一个非常直接的解决方案,它不是通用的,但我相信它会解决大多数人阅读这个问题时试图解决的问题。
我最近这样做了,所以我将在这里发布我的cmd文件:
后期编辑:我没有提到,如果原来的cmd /c命令运行提升,那么你的每一个窗口都可以(如果选择了提升)启动提升,而不需要单独重新提示你。这真的很方便,因为我启动3个cmd窗口和3个其他应用程序都提升每次我启动我的电脑。
7rfyedvj4#
这可能应该是
cmdow.exe
答案下的一个注解,但这里是我编写的一个简单的批处理文件,允许对任务栏中可以看到的所有窗口进行相当复杂和简单的控制。第一步是运行
cmdow /t
来显示这些窗口的列表。查看Image
列中的图像名称,然后执行命令行:以下是批处理文件的内容:
示例性使用
您可能可以重写它,以允许对单个命令执行多个操作,但我还没有尝试过。
要使这个工具正常工作,cmdow.exe必须位于您的路径中。请注意,当您下载这个工具时,您的AV程序可能会对您大喊大叫。这个工具(I guess)在过去曾被恶意软件作者用来操纵窗口。它本身并不有害。
4si2a6ki5#
您可以在此处使用
nircmd
项目:http://www.nirsoft.net/utils/nircmd.html示例代码:
w8f9ii696#
如果您愿意运行一个批处理文件沿着几个小的帮助程序,完整的解决方案发布在这里:
How can a batch file run a program and set the position and size of the window? - Stack Overflow (asked: May 1, 2012)
8wtpewkr7#
如果你只是想在启动时启动一个窗口,或者从桌面上的快捷方式启动,比尔·K的答案是最优雅的。
只要打开你想要的窗口,右键单击并选择属性。选择布局,取消选中“让系统定位窗口”,然后单击确定。
窗口将在您想要的位置打开。您可以在其他选项卡上同时设置字体和窗口颜色。
b0zn9rqh8#
多亏了FuzzyWuzzy,在AutoHotKey中设置以下代码(1920 x1080屏幕分辨率的快速和肮脏示例-无自动宽度和高度计算或函数使用等),以实现以下目标:
SMALL EDIT与**自动X / Y屏幕尺寸计算[ 4台显示器]**代码相同,但也可用于3 / 2台显示器。
sycxhyv79#
我也想这样做,遇到了这个线程:Positioning CMD Window。无需下载外部文件,因为它会动态创建一小段VBScript来执行所有的提升操作。您需要做的就是在下面的部分中指定您的X和Y坐标:
Cscript //nologo "%~DP0pos.vbs" "%~F0" 100 50
。.vbs脚本在执行后也会被删除,因此无需整理任何内容。将以下内容放在批处理文件的顶部:
将您自己的批处理文件的内容放在此处
最下面这个:
尽情享受吧:)