スクリプト修正
なんか色々変なとこあったので直しました。
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上での動作未確認(家に帰ってから追加した)