问题标签 [mouse-hook]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么低级鼠标钩会导致延迟
我正在尝试制作一个仅检测是否按住鼠标左键的应用程序。为了做到这一点,以及学习鼠标钩子,我从示例源(https://cboard.cprogramming.com/windows-programming/119909-setwindowshookex-lowlevelmouseproc.html)复制粘贴了一个钩子,只是为了看看会的。问题是它落后于我的电脑。为什么会这样,我该如何解决?
c# - 全局光标图标更改
我在 (c#) WinForm 上有一个按钮,当它被按下时(鼠标向下然后向上),我想将鼠标光标更改为自定义图标。无论鼠标在屏幕区域(源应用程序、其他应用程序、桌面等)上的位置如何,我都希望该自定义光标图标保持不变,直到单击鼠标(鼠标向下然后向上)。在第二次单击之后,我希望光标恢复到其默认行为。
我目前正在使用Dan Silk 概述的全局鼠标钩子方法(经过 Hans Passant 的调整)来捕获全局鼠标移动和单击事件。
我想我需要拦截(并随后停止) WM_SETCURSOR 消息(根据 Hans的说法,它跟随任何鼠标移动)。但是,我不确定如何对源应用程序之外的内容执行此操作,Reza Aghaei 概述如下:
当我尝试使用上述WndProc
方法为源应用程序调整光标时,光标仍然闪烁。是否有适当的方法来停止 WM_SETCURSOR 消息发送/发布?
任何帮助或建议将不胜感激!
更新
我决定从不同的角度解决我的问题,以避免完全与 WM_SETCURSOR 消息作斗争。我现在的工作正常,但是如果有答案浮出水面,欢迎您将其发布以供后代使用。
winapi - 设置进程 DPI 感知,以便系统补偿缩放因子
我有以下鼠标钩子程序(为解释而简化)。
我从钩子中获得的鼠标坐标不会由显示器的缩放因子调整。
无论我将显示器的缩放系数设置为 100% 还是 200%,鼠标钩总是给我物理像素。
另一方面,GetCursorPos
winapi 函数以逻辑像素给出坐标。即如果缩放因子为200%,GetCursorPos
将给出除以2的坐标,而鼠标钩将给出未调整的数字。
如果程序不支持 DPI,系统会补偿缩放因子,以便程序继续工作,就好像什么都没发生一样。
这正是 . 的返回值所发生的情况GetCursorPos
。它提供逻辑像素而不是物理像素。
另一方面,鼠标钩子程序没有被系统调整。
我尝试在清单中将我的程序设置为不支持 DPI,如下所示:
但这没有什么区别。我还尝试将其声明为可识别 DPI,如下所示:
这也没有任何区别。
是否有任何设置可以通过清单或其他方式添加到我的程序中,这将使鼠标钩子程序能够提供逻辑坐标GetCursorPos
?
我正在 Windows 10 中测试所有这些。
跟进:
我发现了问题。我的清单文件不正确。XML 命名空间未正确设置。
这是有效的。
为了让系统为程序提供逻辑坐标,程序必须是 DPI 感知的。没有表现出 DPI 感知能力的程序将处理不一致的坐标,不仅在鼠标钩子中,也在 BitBlt、IAccesibility、UIAutomation 等中。
我不明白为什么微软决定倒退。没有表现出 DPI 意识的程序应该像往常一样运行,而不是相反。
这意味着无论何时在监视器上设置缩放因子,大多数程序都会默认中断。为了破解它们,它们必须具有 DPI 意识,并且......就像那样......它们将再次工作。
c++ - 如何访问静态函数 MouseProc、SetWindowsHookEx 中的 ui 结构(文本框、标签)?
在我的 .h 文件函数中,mouseProc 被声明为静态(必须是)
.h 文件
最初我想我会添加 &ui 作为这个函数的参数,但我不能这样做。它给了我错误“与 HOOKPROC 不兼容的参数类型”
所以,现在我无法通过使用
ui->textbox->apped();
如何解决这个问题来访问我的 UI 中的文本框和标签?
---根据使ui静态的建议进行更新-------------
主窗口.h
主窗口.cpp
c# - 是否可以捕获鼠标在另一个应用程序(例如计算器)上单击的坐标,然后使用代码(C#)强制单击?
我正在使用 Windows 窗体 (C#) 开发应用程序。我需要能够按下一个按钮,该按钮开始监视另一个应用程序中下一次鼠标单击的位置。然后需要使用此单击的坐标来强制稍后在同一应用程序中单击同一按钮。为了进行测试,我只是使用计算器并按下一个键来捕获 X 和 Y,然后按下另一个按钮再次按下该键,但它不起作用。任何帮助找出我做错了什么将不胜感激。
我已经使用 MouseKeyHook 订阅了鼠标钩子
c# - 鼠标全局挂钩 - WM_MOUSEMOVE 延迟
好的,所以有很多用于鼠标全局挂钩的示例。
我的问题是如何为鼠标移动添加计时器/延迟。
这样做的方法是什么?我想也许我应该 Thread.Sleep() 检测 WM_MOUSEMOVE ?
谢谢。
winapi - Windows API Mousehook , Capture rightmousebutton + Ctrl (WM_RBUTTONDOWN + MK_CONTROL) 一起点击
最初,当我按下鼠标右键时,我能够打印一些东西,
if (wParam == WM_RBUTTONDOWN)
但现在,我想要相同的效果,我想在按下鼠标右键 + Ctrl键时打印一些东西。我怎样才能做到这一点?
我试过这个
更新
当我想尝试只按下 Ctrl 并且它应该打印一些东西的情况时,它仍然不起作用
我在这里想念什么?
java - Java /将键从键盘或鼠标转换为另一个键
我有一个 Swing Java 应用程序(A ),它 在按下某个按钮时启动另一个应用程序(B) 。Runtime.getRuntime().exec()
是否可以设置某个 Key Hook 以便当应用程序(B)打开并处于活动状态时,它会更改按钮(例如,当您按下“Q”时,实际上按下了“H”按钮,等等上)。和鼠标类似的情况(例如,如果“ Mouse Mid ”或“ Mouse Wheel ”被按下,实际上另一个按钮被按下,例如“ T ”)。
理想情况下,如果可能,它应该适用于所有操作系统,但主要适用于 Windows。
请告诉我是否有可能实现这一点,我很乐意提供任何建议或示例。