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,大功告成!

posted @ 2014-03-05 09:41  cui-YF  阅读(1807)  评论(0编辑  收藏  举报