AHK 鼠标拖动无标题窗口
以前在使用VB的时候经常会遇到用鼠标拖动无标题窗口的情况。记得当时的做法是引用API,先后调用“ReleaseCapture”和“SendMessage”,并定义“HTCAPTION”和“WM_NCLBUTTONDOWN”常量,代码不多,用起来也比较简洁。
现在使用了AutoHotkey,再次探索这个使用,竟然发现实现起来更加简单明了,直接使用一个“SendMessage”即可:
PostMessage, 0xA1, 2, , , Ahk_Id %Win_ID%
其中,“Win_ID”为要拖动的窗口的hwnd(注意:是窗口的hwnd,不是被点击控件的hwnd)。
题外话:在AHK中,能响应点击后拖动事件的控件真心不多,常用的一般有两个,“Text”和“Picture”,只需要为该控件定义一个“g”标签,在标签内响应动作即可。
一个可执行的脚本示例如下:
Gui, +hwndmove_WinID -Caption Gui, Add, Text, x10 y13 h25 center gmoveWin, 试试用鼠标左键拖动我 Gui, Add, Button, x210 y10 w50 h23 Default gcloseWin, 退出 Gui, Show Return moveWin: PostMessage, 0xA1, 2, , , Ahk_Id %move_WinID% Return GuiClose: closeWin: ExitApp
补充——另外的方法:
以上所述为通过鼠标点击特定控件移动窗口,当然,也可以直接点击拖动窗口本身进行移动,这时就需要截获系统消息(代码仍然极其简洁):
在代码自动运行段加入
OnMessage(0x201, "move_Win")
然后定义函数“move_Win":
move_Win() { PostMessage, 0xA1, 2 }
OK,大功告成!