スクリプト修正

なんか色々変なとこあったので直しました。
8/27 9/6 のぶんです

ほぼExcel専用 MDI関数 1コ

Excelの子ウィンドウ切替がどうにも上手くいかないので、指定のMDI子ウィドウをアクティブにする関数とか作ってみた。
会社明けてから家でフォトショやunDonutで試したところ

WinActivate, ahk_id %hChild%

1行で無問題だった orz
ていうかExcel2000のMDIマジうざいんですけど。何でSDIじゃないんだよ。
あとMDIのクセにタスクバーに子ウィンドウ名列挙すんじゃねーよ。
オプションで切っても共有設定のファイル開くと勝手に戻るし。
ついでにWord2000も勝手にSDIに仕様変えんな。しかも2000はMDIに戻せないし。


まぁそれはともかくとして、せっかく作ったので一応貼っとこう

MdiActivate(hParent, hWnd="", WinChangeKey="")
指定のMDI子ウィドウをアクティブにする(依存関数: GetMdiChildWindowList())
MdiActivate(hParent, hWnd="", WinChangeKey="")
;---------------------------------------------------------------------------
;   指定のMDI子ウィドウをアクティブにする
;   (依存関数: GetMdiChildWindowList())
;       対象: AHK v1.0.34以降              2005.09.16
;   in  hParent 親ウィンドウのハンドル
;       hWnd    アクティブにしたい子ウィンドウのハンドル
;               (ハンドル不明でタイトル指定したい場合: "*t タイトル名")
;       WinChangeKey 子ウィンドウ切替キー(省略時: Ctrl+Tab)
;   戻り値  1:成功  0:失敗
;----------------------------------------------------------------------------
{
    ;--- 指定子ウィンドウのZオーダーインデクスを取得 ---
    ifInstring,hWnd,*t%A_Space%
    {
        StringReplace,title,hWnd,*t%A_Space%,
        hWnd := ""
    }
    hChildList := GetMdiChildWindowList(hParent, 1) ;子ウィンドウ全部取得
    Loop,Parse,hChildList,`n
    {
        if (hWnd = "")
        {   ; ハンドルがわかんないときはタイトル名で判断
            WinGetTitle,t,ahk_id %A_LoopField%
            ifInstring t, %title%
                hWnd := A_LoopField
        }
        if (hWnd = A_LoopField)
        {
            index := A_index                ;Zオーダー番号GET
            break
        }
    }
    ifEqual,index,, return 0                ;該当子ウィンドウがないので終了

    ;--- 子ウィンドウのアクティブ切替 ---
    WinActivate ,ahk_id %hParent%
    ifEqual,WinChangeKey,,  SetEnv,WinChangeKey,^{Tab}  ;子ウィンドウ切替キー
    Loop,% index-1
        Send,%WinChangeKey%

    ;--- 念のため確認 ---
    Sleep,200
    if (hWnd = GetMdiChildWindowList(hParent, 1,1)) ;トップ子ウィンドウ取得
    {
        WinGet,sts,MinMax,ahk_id %hWnd%     ;最少化時は元の大きさに戻す ※
        ifEqual sts,-1,     WinRestore,ahk_id %hWnd%
        return 1
    }
    else    return 0
}

※最小化状態からの復帰はExcel上での動作未確認(家に帰ってから追加した)