簡體   English   中英

通過命令行設置應用程序的窗口位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM