橘橘橘子汁 & 🍊
网易这个远程桌面真的好用啊xdm( 自愿打广告了 https://uuyc.163.com/
评论区有群友提到一个 Bug,在双击的时候对鼠标行为的处理是不正确的;我稍微逆向研究了一下,把这个 Bug 修掉了(具体效果见视频)
分析图二中关键代码可知(函数名都是我乱标的,不要在意),网易 UU 接收了 WM_LBUTTONDBLCLK 事件(0x140318171),然后将这个事件用一个单独的枚举值,也就是 4,表示 “收到了一个双击”,传递给按键处理函数;然后将全局变量 data_14214acdc 赋值为 1,这个全局变量其实是一个 flag,表示“跳过下一个 WM_LBUTTONUP”(0x140318080)
这样操作以后,如果输入序列为
按下 弹起 按下 弹起
则消息处理函数会按顺序收到
2 3 4
分别表示 单击按下,单击弹起,双击事件
这其实是很奇怪的一种行为,因为双击事件是在第二次鼠标按下的时候触发的,此时我们的鼠标依然为按下状态;而网易 UU 远程桌面将其擅自转化为一次双击事件,导致鼠标提前抬起按键,以及后续的一次抬起鼠标事件被吃掉,会导致我们鼠标的手感非常不一样。
修复方法其实也很简单,从 Microsoft 文档可见:
所以,我们完全可以将这个 WM_LBUTTONDBLCLK 直接当成 WM_LBUTTONDOWN 处理,依然发送为单击事件,问题解决,代码复杂度也降低了许多
不知道这块代码是谁写的...有点怪,明明注册了 Raw Device 但是却不用相关的数据,转而继续使用常规的 WM 方式决定鼠标状态;而且 Windows 默认是不发送双击事件的,双击事件只有在注册特殊 style 后才会发送,说明是哪个大聪明专门注册了这个 style...
如果有认识 UU 那边的人的群友可以帮忙转告一下,让他们顺手把这个很影响体验的 bug 修了~顺便问一下能不能让我去实习
分析图二中关键代码可知(函数名都是我乱标的,不要在意),网易 UU 接收了 WM_LBUTTONDBLCLK 事件(0x140318171),然后将这个事件用一个单独的枚举值,也就是 4,表示 “收到了一个双击”,传递给按键处理函数;然后将全局变量 data_14214acdc 赋值为 1,这个全局变量其实是一个 flag,表示“跳过下一个 WM_LBUTTONUP”(0x140318080)
这样操作以后,如果输入序列为
按下 弹起 按下 弹起
则消息处理函数会按顺序收到
2 3 4
分别表示 单击按下,单击弹起,双击事件
这其实是很奇怪的一种行为,因为双击事件是在第二次鼠标按下的时候触发的,此时我们的鼠标依然为按下状态;而网易 UU 远程桌面将其擅自转化为一次双击事件,导致鼠标提前抬起按键,以及后续的一次抬起鼠标事件被吃掉,会导致我们鼠标的手感非常不一样。
修复方法其实也很简单,从 Microsoft 文档可见:
双击鼠标左键实际上会生成四条消息的序列:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK和 WM_LBUTTONUP
所以,我们完全可以将这个 WM_LBUTTONDBLCLK 直接当成 WM_LBUTTONDOWN 处理,依然发送为单击事件,问题解决,代码复杂度也降低了许多
不知道这块代码是谁写的...有点怪,明明注册了 Raw Device 但是却不用相关的数据,转而继续使用常规的 WM 方式决定鼠标状态;而且 Windows 默认是不发送双击事件的,双击事件只有在注册特殊 style 后才会发送,说明是哪个大聪明专门注册了这个 style...
如果有认识 UU 那边的人的群友可以帮忙转告一下,让他们顺手把这个很影响体验的 bug 修了~
👏44🥰10
橘橘橘子汁 & 🍊
评论区有群友提到一个 Bug,在双击的时候对鼠标行为的处理是不正确的;我稍微逆向研究了一下,把这个 Bug 修掉了(具体效果见视频) 分析图二中关键代码可知(函数名都是我乱标的,不要在意),网易 UU 接收了 WM_LBUTTONDBLCLK 事件(0x140318171),然后将这个事件用一个单独的枚举值,也就是 4,表示 “收到了一个双击”,传递给按键处理函数;然后将全局变量 data_14214acdc 赋值为 1,这个全局变量其实是一个 flag,表示“跳过下一个 WM_LBUTTONUP”(0x140318080)…
修复的 CT 在这里
顺便应 A60 的要求写了个禁用剪贴板同步的功能
顺便应 A60 的要求写了个禁用剪贴板同步的功能
❤24🥰7
橘橘橘子汁 & 🍊
评论区有群友提到一个 Bug,在双击的时候对鼠标行为的处理是不正确的;我稍微逆向研究了一下,把这个 Bug 修掉了(具体效果见视频) 分析图二中关键代码可知(函数名都是我乱标的,不要在意),网易 UU 接收了 WM_LBUTTONDBLCLK 事件(0x140318171),然后将这个事件用一个单独的枚举值,也就是 4,表示 “收到了一个双击”,传递给按键处理函数;然后将全局变量 data_14214acdc 赋值为 1,这个全局变量其实是一个 flag,表示“跳过下一个 WM_LBUTTONUP”(0x140318080)…
然后发现 uu 的键盘输入也有问题...太离谱了
他们居然是用低级键盘钩子做的输入...在拿到焦点的时候安装钩子,失去的时候取消钩子
低级键盘钩子是没什么问题的,毕竟要拦截 Windows 徽标键之类的特殊按键...但是这玩意会漏输入的啊(如图三)...
解决方法也很简单,直接把他这个 hook 关掉,然后把键盘事件从正常的 WndProc 里面接出来给他就可以了
(群友用 UU 远程的时候真的没遇到过什么吞按键,吞鼠标输入的问题吗,这写得,,
他们居然是用低级键盘钩子做的输入...在拿到焦点的时候安装钩子,失去的时候取消钩子
低级键盘钩子是没什么问题的,毕竟要拦截 Windows 徽标键之类的特殊按键...但是这玩意会漏输入的啊(如图三)...
解决方法也很简单,直接把他这个 hook 关掉,然后把键盘事件从正常的 WndProc 里面接出来给他就可以了
(群友用 UU 远程的时候真的没遇到过什么吞按键,吞鼠标输入的问题吗,这写得,,
💯35🤯9