查看文章 |
用 AutoHotkey 代替 Pitaschio 部分功能
2009年02月05日 星期四 上午 01:56
Pitaschio 的介绍看这里. 以前主要是用来替换 bbskin 或 wb 中的 "右键单击窗口标题栏关闭窗口" 等功能, 不过它跟 bbinterface 有点冲突, 使用了 Pitaschio 之后在 bbinterface 上不能按右键弹出菜单, 而貌似在 Pitaschio 中又不能设置例外程序, 所以找了个 ahk 脚本来代替其中的部分功能. 官方论坛原帖在这里. ++++++++++++++++++++++++++++ 脚本开始 +++++++++++++++++++++++++++++++++ ;------------------------- ; 替代 Pitaschio 部分功能 ; 已知问题: 同时使用多项功能发生混乱 ;------------------------- ; 标识是否执行了相关操作, 是则不发送按键 is_operated = 0 ; ------------------------ ; 右键单击标题栏关闭窗口 ; ------------------------ RButton:: WindowUnderMouseID := DoOperation("Right") if WindowUnderMouseID { PostMessage, 0x112, 0xF060,,, ahk_id %WindowUnderMouseID% is_operated = 1 } Return ; 让按键正常弹起 RButton Up:: ; 用变量判断比 GetKeyState() 好, 不会多发送按键 If not is_operated MouseClick, Right, , , , , U is_operated = 0 Return ; ------------------------ ; Ctrl + 右键单击标题栏置顶 ; ------------------------ ^RButton:: WindowUnderMouseID := DoOperation("Right") if WindowUnderMouseID { WinSet, AlwaysOnTop, , ahk_id %WindowUnderMouseID% is_operated = 1 } Return ^RButton Up:: If not is_operated MouseClick, Right, , , , , U is_operated = 0 Return ; ------------------------ ; 中键单击标题栏最小化 ; ------------------------ MButton:: WindowUnderMouseID := DoOperation("Middle") if WindowUnderMouseID { WinMinimize, ahk_id %WindowUnderMouseID% is_operated = 1 } Return MButton Up:: If not is_operated MouseClick, Middle, , , , , U is_operated = 0 Return ; 点击相应鼠标按键 ClickMouseButton(btn) { If btn = Right btn_name = RButton Else btn_name = MButton ; 如果物理状态为按下, 则使用 D 参数, 兼容鼠标手势 If GetKeyState(btn_name, "P") MouseClick, %btn%, , , , , D Else MouseClick, %btn% } ; 重复方法提取 DoOperation(btn) { ; 让脚本全速运行 SetBatchLines, -1 ; 设置坐标相对屏幕 CoordMode, Mouse, Screen ; 设置鼠标点击无延时 SetMouseDelay, -1 ; 获取当前鼠标下的窗口 id MouseGetPos, ClickX, ClickY, WindowUnderMouseID ; 根据 id 获取 class , 判断是否是 bb , 是则发送正常按键 WinGetClass, WindowUnderMouseClass, ahk_id %WindowUnderMouseID% If WindowUnderMouseClass in BBInterface,bbIconBox,bbSlit,BlackboxClass { ClickMouseButton(btn) Return 0 } ; 貌似是获取当前点击位置 ; WM_NCHITTEST SendMessage, 0x84,, ( ClickY << 16 )|ClickX,, ahk_id %WindowUnderMouseID% WM_NCHITTEST_Result =%ErrorLevel% /* #define HTERROR (-2) #define HTTRANSPARENT (-1) #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTGROWBOX 4 #define HTSIZE HTGROWBOX #define HTMENU 5 #define HTHSCROLL 6 #define HTVSCROLL 7 #define HTMINBUTTON 8 #define HTMAXBUTTON 9 #define HTLEFT 10 #define HTRIGHT 11 #define HTTOP 12 #define HTTOPLEFT 13 #define HTTOPRIGHT 14 #define HTBOTTOM 15 #define HTBOTTOMLEFT 16 #define HTBOTTOMRIGHT 17 #define HTBORDER 18 #define HTREDUCE HTMINBUTTON #define HTZOOM HTMAXBUTTON #define HTSIZEFIRST HTLEFT #define HTSIZELAST HTBOTTOMRIGHT #if(WINVER >= 0x0400) #define HTOBJECT 19 #define HTCLOSE 20 #define HTHELP 21 */ ; 貌似这些地方表示点击了标题栏 ; 如果点击了标题栏就返回 uid , 以进行操作 If WM_NCHITTEST_Result in 2,3,8,9,20,21 Return WindowUnderMouseID ; 否则做普通点击 ClickMouseButton(btn) Return 0 } ++++++++++++++++++++++++++++ 脚本结束 +++++++++++++++++++++++++++++++++ 变量命名混乱, 可以无视. 上面只实现了右键单击关闭, 中键单击最小化, Ctrl + 右键单击置顶, 其它的有需要自己看着办. 主要就是 "SendMessage, 0x84,, ( ClickY << 16 )|ClickX,, ahk_id %WindowUnderMouseID%" 这句, 貌似能获取当前点击位置, 嗯. 暂时没发现啥问题. 要想实现 Pitaschio 中对任务栏的操作, 可以参考天堂之门的相关脚本. 我就是不爱用 StrokeIt ~ |
最近读者:
