多開時,我受不了窗口“不規範”,例如:

理想情況是下面這樣:規規矩矩的排列好。於是,寫了個脚本:

// ********************************************************************************
// * 定义一批全局默认值
// ********************************************************************************
// 信长窗口标题栏高度
defaultNolClientTitleHeight = 30
defaultWinScreenToolbarHeight = 40
// ********************************************************************************
// * 获取全部的信长窗口
// ********************************************************************************
// 下面这句是遍历符信长窗口的句柄保存到数组(HwndEx)里
HwndEx = Plugin.Window.Search("Nobunaga")
// MsgBox "查找到符合的窗口句柄为:"& HwndEx
// 下面这句用于分割字符串,将获得的句柄组分割
dim nolWindows
nolWindows = Split(HwndEx, "|")
nolWindowCount = UBound(nolWindows)
If nolWindowCount >=0 Then
i=0
For nolWindowCount
//下面这句将字符串转换成数值
// Msgbox "第 "& i+1 &" 个窗口句柄为:"&Clng(nolWindows(i))
i=i+1
Next
End If
//
Dim nolClientRect
// ********************************************************************************
// * 计算第一个窗口的相关信息
currentClientIndex = 0
// ********************************************************************************
Hwnd = Clng(nolWindows(currentClientIndex))
sRect = Plugin.Window.GetClientRect(Hwnd)
// MsgBox "得到窗口句柄的客户区大小为:"& sRect
nolClientRect = Split(sRect, "|")
L = Clng(nolClientRect(0)): T = Clng(nolClientRect(1))
R = Clng(nolClientRect(2)) : B = Clng(nolClientRect(3))
// 窗口的宽度和高度
nolClientWidth_1 = R - L
nolClientHeight_1 = B - T
// ********************************************************************************
// * 计算最后一个窗口的相关信息
currentClientIndex = nolWindowCount - 1
// ********************************************************************************
Hwnd = Clng(nolWindows(currentClientIndex))
sRect = Plugin.Window.GetClientRect(Hwnd)
// MsgBox "得到窗口句柄的客户区大小为:"& sRect
nolClientRect = Split(sRect, "|")
L = Clng(nolClientRect(0)): T = Clng(nolClientRect(1))
R = Clng(nolClientRect(2)) : B = Clng(nolClientRect(3))
// 窗口的宽度和高度
nolClientWidth_9 = R - L
nolClientHeight_9 = B - T
// ********************************************************************************
// * 计算并布局
// ********************************************************************************
// 下面这句是获得屏幕分辨率宽度
ScreenW = Plugin.Sys.GetScRX()
// 下面这句是获得屏幕分辨率高度
ScreenH = Plugin.Sys.GetScRY()
// 计算可以分配布局的空间宽度和高度
layoutWidth = ScreenW - nolClientWidth_9
layoutHeight = ScreenH - nolClientHeight_1 - defaultNolClientTitleHeight - defaultWinScreenToolbarHeight
// 等分宽度和高度
cellWidth = Clng( layoutWidth / ( nolWindowCount - 1 ) )
cellHeight = Clng( layoutHeight / ( nolWindowCount - 1 ) )
// 重新布局
i = 0
For nolWindowCount
Hwnd = Clng(nolWindows(i))
x = cellWidth * i
y = layoutHeight - cellHeight * i
Call Plugin.Window.Move(Hwnd, x, y)
Call Plugin.Window.Min(Hwnd)
Call Plugin.Window.Restore(Hwnd)
i = i + 1
Next