如何强制让隐藏鼠标指针的POS自助终端应用重新显示指针
解决POS自助终端应用显示鼠标指针的方法
以下是几个无需目标应用源码即可强制显示鼠标指针的可行方案:
1. 全局鼠标钩子强制恢复光标可见性
ShowCursor的可见性计数是线程级别的,目标应用大概率是多次调用ShowCursor(false)把计数压至负数。你可以通过全局鼠标钩子,在目标应用的线程上下文里重复调用ShowCursor(true)来抵消这个计数:
- 编写DLL实现
WH_MOUSE全局钩子,在钩子回调函数中,每次触发鼠标事件时调用ShowCursor(true); - 在你的MFC程序中调用
SetWindowsHookEx(WH_MOUSE, HookProc, hDll, 0)安装全局钩子; - 只要目标应用有鼠标事件触发,就会在它的线程里执行
ShowCursor(true),逐步将光标计数拉回非负数,光标即可显示。
2. 远程线程注入直接调用ShowCursor
直接在目标应用的进程空间内执行ShowCursor(true):
- 用
FindWindow获取POS终端应用的主窗口句柄(可通过Spy++工具获取窗口标题或类名来定位); - 调用
GetWindowThreadProcessId获取窗口所属进程的ID; - 用
OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId)打开目标进程; - 通过
GetProcAddress(GetModuleHandle(L"user32.dll"), "ShowCursor")获取ShowCursor的函数地址; - 在目标进程中用
VirtualAllocEx分配内存,写入参数TRUE; - 调用
CreateRemoteThread在目标进程中执行ShowCursor,传入参数地址; - 操作完成后释放相关资源,目标进程的光标计数会被增加,光标就能显示。
3. 强制替换系统光标
如果上述方法无效,可尝试强制设置可见的系统光标覆盖目标应用的隐藏操作:
- 调用
SetSystemCursor将所有系统光标(如IDC_ARROW)设置为可见的光标资源; - 或在全局钩子的回调中调用
SetCursor,每次触发时强制设置一个可见光标,绕过目标应用的光标隐藏逻辑。
内容的提问来源于stack exchange,提问作者user20716902
相关产品推荐
相关产品推荐

