//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:18

符文:140

发表于 2019-9-28 17:31:49 |显示全部楼层 来自:上海
最近89块大洋毛了一个罗技G300S鼠标,终于用上了鼠标宏,玩DH再也不断手了所以想在论坛上分享一下我的宏编写经验.这是小弟第一次发帖,还请列位大佬轻喷

一、罗技鼠标宏 图形化设置


就是这个界面里设置,网上很多教程,也可以参考大神@zudikn的帖子【罗技宏和脚本】使用教程

二、左键连点的实现
前面我按照工具设置好了几个宏
1个是G4键连续左键点击,用来打完大小米满地捡装备的
1个是G7键用来点击一次左键,点击一次回车,用来铁匠铺分解装备的
1个是G4键DH的连续点击复仇和刀扇的
设置完了,用着简直爽歪歪,咱也能一只手打暗黑了

过了大概2天,懒人病发,侧边建总觉得别扭,觉得这几个按键宏还是有点麻烦了,我想左键就带多功能
-- 左键正常点击
-- 左键长按超过1秒 实现连续点击
-- 松开左键停止连续点击


废话不多说,先上干活

------------------------------------------------------------------分割线 下面是LUA代码-------------------------------------------------------------
-- 开启左键点击事件
EnablePrimaryMouseButtonEvents(true)

-- G300S 鼠标按键表
local KEY_MAP = {
    Left_Btn =  1,
    Right_Btn =  2,
    Middle_Btn =  3,
    G4_Btn =  4,
    G5_Btn =  5,
    G6_Btn =  6,
    G7_Btn =  7,
    G8_Btn =  8,
    G9_Btn =  9,
}

local KEY_NAME_MAP = {
    [1] = "Left_Btn",
    [2] = "Right_Btn",
    [3] = "Roll_Btn",
    [4] = "G4_Btn",
    [5] = "G5_Btn",
    [6] = "G6_Btn",
    [7] = "G7_Btn",
    [8] = "G8_Btn",
    [9] = "G9_Btn",
}

-- 鼠标按键状态
local MOUSE_KEY_STATE = {
    Pressed = 1,
    Released = 2,
}

local Handler = {}

-- 左键点击
-- 左键长按超过1秒 实现连续点击
-- 松开左键停止连续点击
function Handler.Left_Btn( m_state )
    local KEY = KEY_MAP.Left_Btn
    local begin_running_time = GetRunningTime()
    if (m_state == MOUSE_KEY_STATE.Pressed) then
        local now_running_time = GetRunningTime()
        -- 1000ms内点击
        while (IsMouseButtonPressed(KEY)) do
            if (now_running_time - begin_running_time < 1000) then
                -- PressMouseButton(KEY)
            else
                ReleaseMouseButton(KEY)
                PressMouseButton(KEY)
            end
            Sleep(100)
            now_running_time = GetRunningTime()
        end
    elseif (m_state == MOUSE_KEY_STATE.Released) then
        -- ReleaseMouseButton(KEY)
    end
end

-- 主函数
function OnEvent(event, arg)
    OutputLogMessage("event = %s, arg = %s\n", event, arg)
    -- 配置文件激活
    if (event == "PROFILE_ACTIVATED") then
        OutputLogMessage("PROFILE_ACTIVATED\n")
    -- 配置文件检测
    elseif (event == "PROFILE_DEACTIVATED") then
        OutputLogMessage("PROFILE_DEACTIVATED\n")
    -- 鼠标事件按下
    elseif (event == "MOUSE_BUTTON_PRESSED") then
        if KEY_NAME_MAP[arg] and Handler[KEY_NAME_MAP[arg]] then
            Handler[KEY_NAME_MAP[arg]](MOUSE_KEY_STATE.Pressed)
        end
    -- 鼠标事件放开
    elseif (event == "MOUSE_BUTTON_RELEASED") then
        if KEY_NAME_MAP[arg] and Handler[KEY_NAME_MAP[arg]] then
            Handler[KEY_NAME_MAP[arg]](MOUSE_KEY_STATE.Released)
        end
end

------------------------------------------------------------------分割线 上面是LUA代码-------------------------------------------------------------
试试看
2019928-170440.jpg

成功了.这段宏就实现了鼠标左键长按1S以上,就不停循环点击左键,而且长按1S内不影响正常单击和双击的操作
终于可以快乐而不别扭的捡装备了

三、右键连点的实现
既然左键连点捡装备搞定了,那么怎么能少了右键连点赌雪岩碎片呢???
发挥广大程序员的看家本领,ctrl c+ctrl v.

------------------------------------------------------------------分割线 下面是LUA代码-------------------------------------------------------------
-- 右键键点击
-- 右键键长按超过1秒 实现连续点击
-- 松开右键键停止连续点击
function Handler.Right_Btn( m_state )
    local KEY = KEY_MAP.Right_Btn
    local begin_running_time = GetRunningTime()
    if (m_state == MOUSE_KEY_STATE.Pressed) then
        local now_running_time = GetRunningTime()
        -- 1000ms内点击
        while (IsMouseButtonPressed(KEY)) do
            if (now_running_time - begin_running_time < 1000) then
                PressMouseButton(KEY)
            else
                -- OutputLogMessage("PressAndReleaseMouseButton Right_Btn\n")
                ReleaseMouseButton(KEY)
                PressMouseButton(KEY)
            end
            Sleep(100)
            now_running_time = GetRunningTime()
        end
    elseif (m_state == MOUSE_KEY_STATE.Released) then
        ReleaseMouseButton(KEY)
    end
end

------------------------------------------------------------------分割线 上面是LUA代码-------------------------------------------------------------

再试试看. 2019928-170939.jpg

咦,咋不行了呢.
经过我的仔细研究,这里算是罗技的问题.
主函数 OnEvent 里 右键点击 获取的arg 是 2
而IsMouseButtonPressed里面 2代表 滚轮键, 3才是右键
QQ图片20190928171301.png

日了够了,不过你有张良计,我有过墙梯啊.
咱们按右键,判断滚轮不就好了嘛.

果然OK,血岩也能快乐的赌博了
------------------------------------------------------------------分割线 这里是所有代码-------------------------------------------------------------
-- 开启左键点击事件
EnablePrimaryMouseButtonEvents(true)

-- G300S 鼠标按键表
local KEY_MAP = {
    Left_Btn =  1,
    Right_Btn =  2,
    Middle_Btn =  3,
    G4_Btn =  4,
    G5_Btn =  5,
    G6_Btn =  6,
    G7_Btn =  7,
    G8_Btn =  8,
    G9_Btn =  9,
}

local KEY_NAME_MAP = {
    [1] = "Left_Btn",
    [2] = "Right_Btn",
    [3] = "Roll_Btn",
    [4] = "G4_Btn",
    [5] = "G5_Btn",
    [6] = "G6_Btn",
    [7] = "G7_Btn",
    [8] = "G8_Btn",
    [9] = "G9_Btn",
}

-- 鼠标按键状态
local MOUSE_KEY_STATE = {
    Pressed = 1,
    Released = 2,
}

local Handler = {}

-- 左键点击
-- 左键长按超过1秒 实现连续点击
-- 松开左键停止连续点击
function Handler.Left_Btn( m_state )
    local KEY = KEY_MAP.Left_Btn
    local begin_running_time = GetRunningTime()
    if (m_state == MOUSE_KEY_STATE.Pressed) then
        local now_running_time = GetRunningTime()
        -- 1000ms内点击
        while (IsMouseButtonPressed(KEY)) do
            if (now_running_time - begin_running_time < 1000) then
                -- PressMouseButton(KEY)
            else
                ReleaseMouseButton(KEY)
                PressMouseButton(KEY)
            end
            Sleep(100)
            now_running_time = GetRunningTime()
        end
    elseif (m_state == MOUSE_KEY_STATE.Released) then
        ReleaseMouseButton(KEY)
    end
end

-- 右键键点击
-- 右键键长按超过1秒 实现连续点击
-- 松开右键键停止连续点击
function Handler.Right_Btn( m_state )
    local KEY = KEY_MAP.Right_Btn
    local KEY_MID = KEY_MAP.Middle_Btn
    local begin_running_time = GetRunningTime()
    if (m_state == MOUSE_KEY_STATE.Pressed) then
        -- MD IsMouseButtonPressed是个BUG
        local now_running_time = GetRunningTime()
        -- 1000ms内点击
        while (IsMouseButtonPressed(KEY_MID)) do
            if (now_running_time - begin_running_time < 1000) then
                -- PressMouseButton(KEY)
            else
                ReleaseMouseButton(KEY)
                PressMouseButton(KEY)
            end
            Sleep(100)
            now_running_time = GetRunningTime()
        end
    elseif (m_state == MOUSE_KEY_STATE.Released) then
        ReleaseMouseButton(KEY)
        ReleaseMouseButton(KEY_MID)
    end
end

-- 主函数
function OnEvent(event, arg)
    OutputLogMessage("event = %s, arg = %s\n", event, arg)
    -- 配置文件激活
    if (event == "PROFILE_ACTIVATED") then
        OutputLogMessage("PROFILE_ACTIVATED\n")
    -- 配置文件检测
    elseif (event == "PROFILE_DEACTIVATED") then
        OutputLogMessage("PROFILE_DEACTIVATED\n")
    -- 鼠标事件按下
    elseif (event == "MOUSE_BUTTON_PRESSED") then
        if KEY_NAME_MAP[arg] and Handler[KEY_NAME_MAP[arg]] then
            Handler[KEY_NAME_MAP[arg]](MOUSE_KEY_STATE.Pressed)
        end
    -- 鼠标事件放开
    elseif (event == "MOUSE_BUTTON_RELEASED") then
        if KEY_NAME_MAP[arg] and Handler[KEY_NAME_MAP[arg]] then
            Handler[KEY_NAME_MAP[arg]](MOUSE_KEY_STATE.Released)
        end
    end
end

------------------------------------------------------------------分割线 这里是所有代码-------------------------------------------------------------

下一期我试试用左ctrl键+左键单机实现 快速单击+回车(即分解装备)的操作. 88
[armory]http://hero.d.163.com/hero/cn/%E6%AC%A3%E9%A3%8E%E4%BD%9C%E6%B5%AA-5541/40474566[/armory]

帖子:4609

符文:62

2#
可以,我的g903表示很赞
发表于 2019-9-28 17:43:52 来自凯恩之角App |显示全部楼层 来自:广西

帖子:448

符文:48

3#
大神:能给我传授一下:1个是G4键DH的连续点击复仇和刀扇的,我一直想设置这个连点宏,但是苦于自己看不懂编程语言,我用的是G5 Hero,应该可以通用,多谢
发表于 2019-9-28 17:47:10 |显示全部楼层 来自:北京

帖子:78

符文:396

4#
这么便宜了吗现在
发表于 2019-9-28 18:12:24 来自凯恩之角App |显示全部楼层 来自:河北

帖子:4137

符文:93

5#
可以,我的老G602无线也表示很赞。
发表于 2019-9-28 18:23:50 来自凯恩之角App |显示全部楼层 来自:湖南

帖子:65

符文:38

6#
………外行完全看不懂
发表于 2019-9-28 18:39:03 来自凯恩之角App |显示全部楼层 来自:江苏

帖子:46

符文:23

7#
这款鼠标最大的问题是,用不久就会连击。
发表于 2019-9-28 18:57:10 来自凯恩之角App |显示全部楼层 来自:河南

帖子:18

符文:140

8#
烨暘天 发表于 2019-9-28 17:47
大神:能给我传授一下:1个是G4键DH的连续点击复仇和刀扇的,我一直想设置这个连点宏,但是苦于自己看不懂 ...

就录制键盘2个技能键就行了啊
发表于 2019-9-29 08:15:05 来自凯恩之角App |显示全部楼层 来自:上海

帖子:62

符文:28

9#
写的不错啊,逻辑很清晰,谢谢大佬分享
发表于 2019-9-29 13:13:14 来自凯恩之角App |显示全部楼层 来自:广东

帖子:319

符文:70

10#
不错,编程风格很好
发表于 2019-9-29 18:37:33 来自凯恩之角App |显示全部楼层 来自:江苏

帖子:16804

符文:2396

11#
穷人的我只好不用左键的BD
发表于 2019-9-29 18:56:35 来自凯恩之角App |显示全部楼层 来自:江苏

帖子:28

符文:13

12#
大佬,放不上去啊,左右键不让设置。。。
发表于 2019-11-12 14:15:21 来自凯恩之角App |显示全部楼层 来自:广东

帖子:437

符文:21

13#
这不就是左键连点么
更多图片 小图 大图
组图打开中,请稍候......
发表于 2019-11-12 14:42:29 来自凯恩之角App |显示全部楼层 来自:云南

帖子:32

符文:3

14#
HI,老哥,我复制你的右键按住不放的代码,但是第一行就报错了。这是为啥呢。
更多图片 小图 大图
组图打开中,请稍候......
发表于 2021-1-30 08:10:18 |显示全部楼层 来自:安徽
您需要登录后才可以回帖 登录 | 注册网易通行证