我正在尝试为Google地球插件添加一些多点触控手势,因此我使用win32 API编写了一个小c ++后台程序来捕捉触觉驱动程序输入并使用模拟鼠标移动进行手势。
但是现在鼠标光标在屏幕上移动,所以我想在用户触摸屏幕时隐藏它(我已经使用BlockInput功能阻止了输入)。
有没有正确的方法呢?我看过来自GetCursorInfo的windows 8 CURSOR_SUPPRESSED响应,但无法触发...
编辑: 我发现了一种肮脏的方式,使用SetSystemCursor来隐藏你需要的每个游标:
SetSystemCursor(hCursor, OCR_SIZENS);
和SystemParametersInfo重置所有游标:
SystemParametersInfo(SPI_SETCURSORS, 0, NULL, 0);
我希望有更好的方法......
谢谢!
答案 0 :(得分:0)
尝试ShowCursor
:
ShowCursor(FALSE);
答案 1 :(得分:0)
我最近在https://pandateemo.github.io/YoloMouse/的开发人员中遇到了这个问题,它会改变游戏中的光标。在不纠结目标进程或进入内核领域的情况下,我能找到的唯一可靠方法是使用setwindowshook hack,如下所示:
DWORD process_id;
HMODULE dll = LoadLibraryA("User32.dll");
HOOKPROC cbt = (HOOKPROC)((uint64_t)GetProcAddress(dll, "ShowCursor"));
HWND hwnd = (HWND)FindWindow( NULL, "World of Warcraft" );
DWORD hwnd_thread_id = GetWindowThreadProcessId(hwnd, &process_id);
HHOOK hproc = SetWindowsHookEx(WH_KEYBOARD, cbt, dll, hwnd_thread_id);
其被黑客入侵的原因是SetWindowsHookEx期望某些功能类似于
LRESULT CALLBACK KeyboardProc(
_In_ int code,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
在目标进程中找到。而是您给它
int ShowCursor( BOOL bShow );
因此,当钩子触发时,它将 code “值传递给您提供的任何函数的第一个参数,在本例中为 ShowCursor 并且该值“始终”发生设为0(FALSE)。
继续尝试上面的某些游戏或应用,在本例中为魔兽世界。按任意键盘键,光标将消失:)
您可以为此使用其他挂钩。自动发送该挂钩希望触发的任何内容。在这种情况下, SendInput 可以模拟按键。您可以取消挂接,除非应用稍后内部调用 ShowCursor(true)。