板 1- 前 次 新 レス
旧雑記サルベージ
[93]管理人 ★:06/09/06 17:41 ID:???
2006年01月23日
■AutoHotkeyでタイトルバーのクリックした場所によって分岐させる
AutoHotkeyのスレッドで話題に上がっていた奴。
WM_NCHITTESTという奴でどの座標がどんな部分かを調べられるらしい。
どうもAutoHotkeyのSendMessageは当てにならないので、DllCallで直に呼んでやったらうまくいった。
この間のアイコンの奴もそんな感じだった。
どっかの日本語マニュアルで座標はクライアント座標系で寄越せとか書いてあったが、手元の少し古いMSDNの英語リファレンスにはrelative to the upper-left corner of the screenとあったのでそのようにした。
返り値による分岐では、IsLabelとGoToで擬似的にswitch-caseのような感じにしてみた。
~MButton::
CoordMode,Mouse,Screen
MouseGetPos, x, y, id
a:=DllCall("SendMessage",UInt,id,UInt,0x84,UInt,0,UInt,x | y
以前、マウスクリックメッセージをOnMessageで処理してウィンドウの好きな場所をドラッグできるようにする方法を考えたが、これもWM_NCHITTESTを処理すれば数行で済むらしい。
しかし、WM_NCHITTESTはウィンドウ上をマウスカーソルが通過している間中送られてくるので、スクリプト側で処理すると無駄に重くなる気がする。
まあ、試したところCPU使用率は1%位にしかならなかったので、気にするほどではないか。
OnMessage(0x84,"OnHitTest")
Gui,add,Text,,aaaaaaaa`nbbbbbbb
Gui,Show
OnHitTest(w,l){
return 2
}
前 次