【问题标题】:win32api: temporarily block mouse clicks?win32api:暂时阻止鼠标点击?
【发布时间】:2011-07-02 03:32:49
【问题描述】:

有没有办法使用 win API 禁用常规的 Windows 鼠标点击?我可以通过执行ClipCursor 来禁用除特定点之外的任何地方的点击,但点击仍然会注册。

另外,我还想有条件地禁用鼠标点击......例如,我想让它无法关闭我不控制的应用程序的窗口,所以我希望点击发送到那个窗口的“X”不通过。

【问题讨论】:

  • 这很难做到是有充分理由的。你根本不应该这样做。无论你想解决什么,尝试一个更好的解决方案。甚至“防止关闭应用程序”的想法也是如此糟糕。您只会鼓励通过任务管理器杀死应用程序。 ALT+F4 还是 ALT+f,x 呢?
  • @tenfour:我只想防止使用“X”按钮意外关闭窗口。
  • 然后注册一个事件处理程序并弹出一个对话框要求确认。如果用户真的想关闭窗口,请不要阻止他们。
  • 如果您能解释一下您实际想要做什么,这个问题和您之前的问题 (stackoverflow.com/questions/5080777) 都会得到很大改善。我已经问过你了,你为什么不告诉我们?或者,如果您根本不愿意,为什么不说出来。
  • @David:场景是一个人坐在电脑前,使用 App X,这需要大量的鼠标点击。我的程序正在与运行在同一台计算机上的 App Y 进行交互,并且要对其进行交互,它必须不间断地向其输入内容。当用户坐在那里并点击 App X 时,这必须工作。我没有 App Y 的代码,所以我不能用 API 调用或诸如此类的东西整齐地做到这一点。

标签: python windows winapi pywin32


【解决方案1】:

可以,而且非常危险。以下是 C++ 中的方法

LRESULT __stdcall LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if ((nCode < 0) || false)
    {
        result = CallNextHookEx(myLowLevelMouseHookHandle, nCode, wParam, lParam);
    }

    return result;
}

更改上面示例中的false 以重新启用键盘工作。

顺便说一句,这种技术也适用于键盘输入,即使 Ctrl+Alt+Del 也不起作用。

如果您想允许鼠标移动,但只阻止点击,请添加一些if ((wParam == WM_MOUSEMOVE) || (wParam == WM_NCMOUSEMOVE)) 代码。

更多信息http://msdn.microsoft.com/en-us/library/ms644986(VS.85).aspx

【讨论】:

  • 我假设我必须 sethookex 或其他东西,以便操作系统使用该功能执行某些操作?
  • 正确:myLowLevelMouseHookHandle = SetWindowsHookEx(WH_MOUSE_LL, &LowLevelMouseProc, myInstance, 0); myLowLevelMouseHookInstalled = (myLowLevelMouseHookHandle != NULL);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多