【发布时间】:2012-07-21 22:44:03
【问题描述】:
我有以下WndProc:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM w, LPARAM l)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_MOUSEMOVE:
return 0;
default:
return DefWindowProc(hWnd, message, w, l);
}
}
我想阻止鼠标移动,所以我试图丢弃移动消息。问题是鼠标仍在移动。我也试过WM_NCHITTEST和WM_MOUSEHOVER。
【问题讨论】:
-
你需要一个钩子:SetWindowsHookEx
-
我找到了一个旧的 C++ 并对其进行了一些更改。当我在 C++ 中编译它时它起作用了,只是导致鼠标在程序结束之前无法使用:pastebin.com/GyANfGtZ。这不是你能做的最好的,但它会让你开始。使用时要小心。
-
我想有一种更骇人听闻的方法是,如果它只是在玩,就向
SetCursorPos发送垃圾邮件。我从不建议在实际代码中做任何类似的事情。 -
@chris 发布的钩子代码是完全错误的,以至于作为一个例子完全没用。对于初学者,正如
LowLevelMouseProccallback function 的文档所指出的,钩子过程必须 调用CallNextHookExfunction。笼统地说,请重新考虑使用全局解决方案来解决本地问题。 -
@CodyGray,我的示例的重点是完全禁用鼠标。这涉及不传递事件。
It may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.第二部分绝对是一个好点,不过记得ClipCursor。我的想法更多的是“玩得开心”模式而不是“分发程序”模式。