批处理文件打开窗口并调整其大小 [英] batch file open windows and resize them

查看:736
本文介绍了批处理文件打开窗口并调整其大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正试图通过一个批处理文件打开两个窗口,然后调整大小并移动它们(以分屏显示).打开单独的窗口很容易:

I am currently trying to open two windows through a batch file and then resize and move them (to be splitscreen). Opening the separate windows is easy:

@echo off

cd "C:\Program Files (x86)\Internet Explorer"
start iexplore.exe 

cd "C:\Program Files (x86)\Mozilla Firefox"
start firefox.exe 

exit

但是我找不到一种方法来调整和移动我要打开的窗户.我宁愿不必使用任何第三方程序.我尝试浏览start /?帮助菜单,但不相信有任何选项对我有用.

but I can't find a way to resize and move the windows I am opening. I would prefer not having to use any third party programs. I tried looking through the start /? help menu and don't believe any of the options are of use to me.

Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>start /?
Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.
    I           The new environment will be the original environment passed
                to the cmd.exe and not the current environment.
    MIN         Start window minimized.
    MAX         Start window maximized.
    SEPARATE    Start 16-bit Windows program in separate memory space.
    SHARED      Start 16-bit Windows program in shared memory space.
    LOW         Start application in the IDLE priority class.
    NORMAL      Start application in the NORMAL priority class.
    HIGH        Start application in the HIGH priority class.
    REALTIME    Start application in the REALTIME priority class.
Press any key to continue . . .

推荐答案

如果已安装PowerShell(并且可能安装了),则可以使用user32.dll移动和调整窗口.很久以前,我需要一个可以完全满足您需要的脚本来工作,我发现并根据我的需要进行了调整.然后,我使用将其转换为批处理/powershell混合这样我只需双击该文件即可运行PowerShell脚本.

If you have PowerShell installed (and you likely do), you can use user32.dll to move and adjust windows. Once upon a time, I needed a script for work that does exactly what you need and I found this and adjusted it to suit my needs. I then used this to convert it to a batch/powershell hybrid so that I only had to double-click the file to get the PowerShell script to run.

<# :
:: 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
cls
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 the relevant section of the Win32 API to the PowerShell session 
# Allows windows to be moved and resized
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);
    }
"@

################################################################################
# Moves and resizes the window based the broswer
#
# Arguments: $browser - the browser being moved and resized
# Returns:   None
################################################################################
Function MoveAndResize ($browser)
{
    # $browser_path is the full path to the browser
    # $screen_x is the horizontal location of the window on the screen
    # $screen_y is the vertical location of the window on the screen
    # $win_x is the width of the target window
    # $win_y is the height of the target window
    Switch($browser){
        InternetExplorer{
            $browser_path="C:\Program Files\Internet Explorer\IEXPLORE.EXE"
            $screen_x = 0
            $screen_y = 0
            $win_x = 960
            $win_y = 1080
            break
        }
        Firefox{
            $browser_path="C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
            $screen_x = 960
            $screen_y = 0
            $win_x = 960
            $win_y = 1080
            break
        }
        default {continue}
    }

    # Start the desired browser
    Start-Process $browser_path

    # Wait one second until the browser is fully loaded
    Start-Sleep -S 1

    # Find the running process where the application path matches $browser_path
    $browser = (Get-Process | where {$_.Path -eq $browser_path}).MainWindowHandle

    [Win32]::MoveWindow($browser, $screen_x, $screen_y, $win_x, $win_y, $true)
}

MoveAndResize "InternetExplorer"
MoveAndResize "Firefox"

请注意,我使用的是iexplore的Program Files版本而不是Program Files (x86)版本,因为由于某种原因该内容不会移动或调整大小.

Note that I'm using the Program Files version of iexplore instead of the Program Files (x86) version because that one wouldn't move or resize for some reason.

这篇关于批处理文件打开窗口并调整其大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆