如何在VBScript中获取/设置每个应用程序窗口的位置和大小



我想写一个脚本来组织我目前在我的屏幕上打开的窗口。

示例:将所有浏览器移动到监视器1,其他所有浏览器移动到监视器2例如:使显示器1上的4个最大化窗口在屏幕上占据相同大小的象限等

我认为VBScript会很好吗?在Win7环境中,我将使用什么对象?

这在VBScript中是不可能的,因为它不提供访问用于窗口管理的Windows api。

AutoIt似乎是一个更好的工具。查看以下函数和宏:

  • WinMove -移动窗口
  • _WinAPI_GetSystemMetrics (80) -获取监视器数量
  • @DesktopWidth@DesktopHeight -主监视器像素大小
  • _WinAPI_GetSystemMetrics(78)_WinAPI_GetSystemMetrics(79) -全桌面宽度和高度

如果监视器维度不同,则可以使用WMI类Win32_DesktopMonitor及其ScreenWidthScreenHeigth属性来获取单个监视器维度。

我不确定我是否会说VBS会很好,我想我更喜欢c++,因为它会涉及到Windows API调用,我认为在c++中更容易,但这取决于你的技能和VBS可能很好。

我要看的API调用将是EnumWindows或FindWindow找到你想要移动的窗口,然后settwindowpos移动他们。

我认为,如果您想将它们移动到辅助显示器,您应该能够通过将其移动到主显示器之外的位置来做到这一点(例如,如果辅助显示器扩展到左侧,则可能是负位置)。要做到这一点,你需要能够找出当前的分辨率,我认为你可以从WMI类Win32_VideoController中获得。

这个例子展示了如何获取屏幕上当前存在的Internet Explorer的位置和大小,然后将其移动到左上角,大小为800x1000像素。在这个例子中,只有第一个IE已经移动和调整大小,在你的情况下,你必须处理所有4个浏览器。扩展桌面通常意味着,如果您有两个1280x1024的显示器,则第一个显示器的像素为0-1280,第二个显示器的像素为1281-1560,因此Left参数将其移动到所需的位置。例如最大化意味着在屏幕1280x1024大小,和IE。左=0在第一个屏幕,IE。第二个的Left=1281。IE。可见= false表示隐藏。

Set objApp = CreateObject("Shell.Application")
For Each objWindow In objApp.Windows
  If (InStr(objWindow.Name, "Internet Explorer")) Then
    Set IE = objWindow
        IE.Navigate "https://stackoverflow.com/questions/14274552/how-to-get-set-each-applications-window-position-and-size-in-vbscript"
        IE.Visible = True 
        WScript.Echo "Left: " & IE.Left & chr(10) & "Top: " & IE.Top & chr(10) & "Width: " & IE.Width & chr(10) & "Height: " & IE.Height 
        IE.Left=0
        IE.Top=0
        IE.Width=800
        IE.Height=1000
    Exit For
  End If
Next

相关内容

  • 没有找到相关文章

最新更新