gpt4 book ai didi

c++ - 当用户按下 Ctrl 并单击时获取鼠标坐标

转载 作者:可可西里 更新时间:2023-11-01 10:46:49 25 4
gpt4 key购买 nike

我想在用户按下 Ctrl 并同时单击时获取鼠标单击坐标 X 和 Y。用户可以单击屏幕或程序上的任意位置。我希望我的程序在按下 Ctrl 键并且同时单击鼠标时捕获事件并获取坐标。我想获取系统坐标 X 和 Y,而不是其他程序的窗口坐标。我正在使用 C++。

怎么做?

Windows 操作系统,WIN API 代码

我正在做的下一步是行不通的:

HHOOK MouseHook;
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam){

PKBDLLHOOKSTRUCT k = (PKBDLLHOOKSTRUCT)(lParam);
POINT p;


if(wParam == WM_RBUTTONDOWN)
{
// right button clicked
GetCursorPos(&p);
//p.x
//p.y
//my program is never getting here, why ?
}

}
MouseHook = SetWindowsHookEx(WH_MOUSE_LL,(HOOKPROC)MouseHookProc,0,0);

如果我将以上行更改为:MouseHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,GetModuleHandle(NULL),0);然后它将仅适用于我自己的程序窗口,但不会在我的程序之外 Hook 点击

最佳答案

你读过这篇文章吗? link

首先,如果你想捕获系统整个鼠标+键盘事件,你的钩子(Hook)函数必须放在一个dll上。

1) 如果 nCode 小于零, Hook 过程必须返回 CallNextHookEx 返回的值。如下所示,

if(nCode < 0)
{
CallNextHookEx(hook, nCode, wParam, lParam);
return 0;
}

如果CallNextHookEx 没有被调用,其他安装了hook 的进程有可能无法正确获取事件。

2)然后,再次检查nCode,是否为HC_ACTION

switch (nCode) 
{
case HC_ACTION:
...

3) 最后,您可以检查 WPARAM 中的 WM_RBUTTONDOWN,以及 LPARAM 中的 MSLLHOOKSTRUCT

关于c++ - 当用户按下 Ctrl 并单击时获取鼠标坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com