在不使用nircmd实用程序的情况下移动Windows批处理文件中任何已打开应用的位置

时间:2015-01-20 17:00:01

标签: windows batch-file cmd command

有没有办法直接从批处理文件移动打开的应用程序的位置(注意:我不想使用nircmd或任何其他实用程序

例如nircmd: nircmd.exe win move stitle" a1" x y h l

与nircmd相同的是,我们可以在不使用nircmd或任何其他外部实用程序的情况下获得高于输出。

有没有命令呢?

提前致谢。

2 个答案:

答案 0 :(得分:1)

在纯粹的BAT中,你无法做到这一点 使用WinMove函数可以非常轻松地使用Autoit。

答案 1 :(得分:1)

批量生产是不可能的。但是,它可以在Powershell中 ,然后可以使用批处理包装器调用它。

<# :
:: 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
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-Type @"
  using System;
  using System.Runtime.InteropServices;

  public class Win32 {
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
  }

  public struct RECT
  {
    public int Left;        // x position of upper-left corner
    public int Top;         // y position of upper-left corner
    public int Right;       // x position of lower-right corner
    public int Bottom;      // y position of lower-right corner
  }
"@

$rcWindow = New-Object RECT
$h = (Get-Process | where {$_.MainWindowTitle -eq "Untitled - Notepad"}).MainWindowHandle

[Win32]::GetWindowRect($h,[ref]$rcWindow)

$win_width = 1280
$win_height = 720
$screen_x=0
$screen_y=0

[Win32]::MoveWindow($h, $screen_x, $screen_y, $win_width, $win_height, $true )