首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理文件打开窗口并调整大小

批处理文件打开窗口并调整大小
EN

Stack Overflow用户
提问于 2016-01-05 02:03:48
回答 1查看 8K关注 0票数 0

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

代码语言:javascript
运行
复制
@echo off

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

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

exit

但是我找不到一种方法来调整和移动我正在打开的窗口。我不希望使用任何第三方程序。我试着查看了start /?的帮助菜单,但我不相信其中的任何选项对我有用。

代码语言:javascript
运行
复制
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 . . .
EN

回答 1

Stack Overflow用户

发布于 2016-01-05 09:27:02

如果你已经安装了PowerShell (你很可能已经安装了),你可以使用user32.dll来移动和调整窗口。曾几何时,我需要一个脚本来完成您需要的工作,于是我找到了this,并对其进行了调整以满足我的需求。然后,我使用this将其转换为批处理/ PowerShell混合文件,以便只需双击该文件即可运行PowerShell脚本。

代码语言:javascript
运行
复制
<# :
:: 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)版本,因为由于某些原因,该版本不能移动或调整大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34597083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档