【问题标题】:Mouse cursor outside of form鼠标光标在表单之外
【发布时间】:2025-12-23 19:25:16
【问题描述】:

我有一个旧的颜色选择器实用程序,用 c++ 编写,几年前我编写过代码,想用 c# 重写。

我实现了全局挂钩以从屏幕上拾取像素等等。一切都很好,但是......

一旦鼠标移出窗体并移到桌面上,十字光标将恢复为指针。我的 c++ 代码(实际上是 MFC)不会发生这种情况。

这在c#中是如何实现的?

谢谢大家。

(我正在使用这个http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C 作为钩子)

【问题讨论】:

标签: c# cursor mouse hook


【解决方案1】:

解决方案(或解决方法)是模拟鼠标单击事件的第一部分。这会将鼠标锁定在调用窗口上,从而保留所选光标。

[DllImport( "user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall )]
public static extern void mouse_event( uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo );

private const int   MOUSEEVENTF_LEFTDOWN    = 0x02;
private const int   MOUSEEVENTF_LEFTUP      = 0x04;
private const int   MOUSEEVENTF_RIGHTDOWN   = 0x08;
private const int   MOUSEEVENTF_RIGHTUP     = 0x10;

然后在代码中启用鼠标捕获后:

mouse_event(
    MOUSEEVENTF_LEFTDOWN,
    (uint)Cursor.Position.X,
    (uint)Cursor.Position.Y,
    0,
    0 );

this.Cursor = Cursors.Cross;

希望对你有帮助。

【讨论】:

    最近更新 更多