告知欄です
1- レス

旧雑記サルベージ


[98]管理人 ★:06/09/06 17:44 ID:???
2006年02月03日
■AutoHotkeyのListViewをいじる
DllCallでImageList_Createを行えば、任意のサイズでアイコンを表示できる。
画像の縮小表示と組み合わせれば、任意のサイズの画像サムネイルが可能かと思って試してみたら、可能だった。
Gui,Add,ListView, w640 h480 r%w% vLv Icon,name
himl:=DllCall("ImageList_Create",Int,256,Int,256,UInt,0x21,Int,w,Int,w,UInt)
LV_SetImageList(himl,0)
n:=IL_Add(himl,"F:\pictures\cats\c22.jpg",0,1)
LV_Add("Icon" . n ,"aaaaaaaa")
Gui,Show

ExtractAssociatedIconAというAPIを使えば、ファイルやフォルダの関連づけアイコンを取得できるらしい。
このAPIにはなぜか呼び出し元プロセスのインスタンスハンドルが必要だが、GetModuleHandleというAPIで取得できるという。
とりあえず試してみたら、確かに関連づけアイコンが取得された。
hinst:=DllCall("GetModuleHandle",UInt,0,UInt)
Gui,Add,ListView, w640 h480 r%w% vLv Icon,name
himl:=DllCall("ImageList_Create",Int,32,Int,32,UInt,0x21,Int,w,Int,w,UInt)
LV_SetImageList(himl,0)
h:=DllCall("Shell32.dll\ExtractAssociatedIconA",UInt,hinst, Str,"F:\pictures\cats\c22.jpg", UShortP,0, UInt)
n:=DllCall("ImageList_AddIcon",Int,himl,Int,h, Int)+1
LV_Add("Icon" . n ,"aaaaaaaa")
Gui,Show,AutoSize
これをこのあいだのタスクリストの奴に組み込んで、何が何でもウィンドウのアイコンを取得できるようにしておくことに。
Alt+Tabの奴とはどうしても違ってしまうが、フォルダオプションのウィンドウなどもアイコンが表示されるようになった。
ALt+Tabの奴はどうやってアイコンを取得しているのだろうか?
■可能な限り正確にマウス下のコントロールを操作する
マウスホイールの操作をカーソル下のコントロールにリダイレクトするツールをAutoHotkeyで再現したい。
カーソル下のウィンドウとコントロールはMouseGetPosで取得できるが、タブブラウザのようなMDIコントロールの子ウィンドウが最大化されている場合などに誤認識が起こる模様。
いつ頃からかAltMethodというパラメータが追加され、MDI子ウィンドウに正確に対応できるようになったが、これを利用すると逆に誤認識を起こす場合がある。
たとえば、HTMLヘルプのウィンドウの「キーワード」ペインのリストなどがそうだった。
このあいだ使ったWM_NCHITTESTでカーソルがコントロール上かを判定して、おかしかったら非AltMethodで取得し直すようにしてみたら、MDIもHTMLヘルプも正確に操作できるようになった。
AltMethodと通常方式の順番を逆にすると、MDIで誤認識する。
*WheelDown::
    CoordMode,Mouse,Screen
    MouseGetPos,x,y,hwnd,ctrl,1
    IfWinExist,ahk_id %hwnd%
    {
        p:=y1
            MouseGetPos,,,,ctrl
    }
    PostMessage,0x020A,0xFF880000,%p%,%ctrl%,ahk_id %hwnd%
return
*WheelUp::
    CoordMode,Mouse,Screen
    MouseGetPos,x,y,hwnd,ctrl,1
    IfWinExist,ahk_id %hwnd%
    {
        p:=y1
            MouseGetPos,,,,ctrl
    }
    PostMessage,0x020A,0x00780000,%p%,%ctrl%,ahk_id %hwnd%
return色々と適当な感じだが、とりあえず大体のコントロールを操作できるようになった。
この例ではfwKeysの処理を省略してあるので、Shift+ホイールでIEコンポーネントの戻る・進むを行うなどの機能が利用できない。

このホイールリダイレクト機能では、正確にカーソルをコントロール上に合わせてやらないとならず、小さなコントロールを操作しづらい。
カーソルがどこにあってもアクティブなコントロールを操作できる通常の動作の方が好きだ。


名前

E-mail



0ch BBS 2005-10-08