有没有办法直接从批处理文件移动打开的应用程序的位置(注意:我不想使用nircmd或任何其他实用程序)
例如nircmd: nircmd.exe win move stitle" a1" x y h l
与nircmd相同的是,我们可以在不使用nircmd或任何其他外部实用程序的情况下获得高于输出。
有没有命令呢?
提前致谢。
答案 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 )