本家に日の丸の旗が!

公式に日本語ページができたのかと思いクリックしてみたら流行らせるページに飛ばされた。これっていつからリンク貼られてたんだろ、今まで全然気が付かなかったよ。
いつのまにといえば、DllCall()で構造体使えるようになってたんですね。試しに GetWindowRectでやってみたらOKだった。

    VarSetCapacity(rect, 16)
    ;Declare Function GetWindowRect Lib "user32.dll" _
    ;(ByVal hWnd As Long, lpRect As Rect) As Long
    if(DllCall("GetWindowRect", Uint,hWnd, str,rect))
    {
        l := ExtractInteger(rect)    ;http://lukewarm.s101.xrea.com/commands/indexframe.html
        t := ExtractInteger(rect,4)
        r := ExtractInteger(rect,8)
        b := ExtractInteger(rect,12)
        Msgbox,l=%l% t=%t% r=%r% b=%b%
    }

そういえば流行らせるページ管理人さんが、BREGEXP.DLLを使うスクリプトを公開されたようです。BREGEXPは前に自分でも試してみたんだけど、構造体以前にバージョン情報すら取出せずに挫折したんだった。まだちょっと内容見てないんですがAHK正規表現使えるようになるのは嬉しい。本家でもregexp実装は予定されてるけど何時になるかわからなかったからなぁ

MDI子ウィンドウの位置移動

前にMDIの子ウィンドウのハンドルを取得する関数をいくつか作ったまま放置してたんだけど、実際そのハンドルでWinMoveしたら位置がズレる(XとYを空欄にしてもダメ) コンテナ内のものは親からの相対位置で指定してやらんといかんのだった。

    ;位置は変えないでResiseだけしてみるテスト
    hWnd := getMousePosWindowEx()  ;http://d.hatena.ne.jp/eamat/20050827
    hMdiClient := DllCall("GetParent",UInt,hWnd, UInt) 
    if (hMdiClient)
    {
        WinGetPos,px,py,pw,ph,ahk_id %hMdiClient%
        WinGetPos,cx,cy,cw,ch,ahk_id %hWnd%
        SysGet,  ex,45                  ;SM_CXEDGE
        SysGet,  ey,46                  ;SM_CYEDGE
        Winmove, ahk_id %hWnd%,,% cx-px-ex,% cy-py-ey,%cw%,30
    }

ていうかウィンドウ扱いにしないで普通にControlMoveすればいいだけなんだけど、AHKのコントロールってZオーダーでコントロール名変化するので子ウィンドウの特定ができなくなるんだよね。