我想写一个脚本来组织我目前在我的屏幕上打开的窗口。
示例:将所有浏览器移动到监视器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
及其ScreenWidth
和ScreenHeigth
属性来获取单个监视器维度。
我不确定我是否会说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