百度空间 | 百度首页 
 
查看文章
 
用 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 ~

类别:Win7 | 添加到搜藏 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2009年02月05日 星期四 上午 11:35 | 回复
用DM2的路过。AHK和bblean我也都用的,不过对bbskin实在是不感兴趣
 
2
2009年02月05日 星期四 下午 03:11 | 回复
很多年以前刚开始用 bblean 的时候对 bbskin 蛮喜欢的, 可以自定义标题栏按钮, 文字等, 而且会对窗口加一个外框, 其实也蛮好玩的. 后来发现这东西跟太多软件冲突, 就无视了. DM2 我记得貌似是菜单流? 我一般比较烦菜单, 笑.
 
3
2009年02月18日 星期三 下午 08:32 | 回复
回复okey3m:
DM2有菜单有热键,还可以对右上角的三个系统按钮设置操作(中击,右击,组合键+点击)。不过我经过实践发现在很多visual style下根本点不准,还是老老实实用热键吧……
 
4
2009年02月20日 星期五 下午 09:37 | 回复
现在用 ahk 脚本来实现右键单击标题栏关闭窗口了, 还是 ahk 神.
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu