鼠标光标在表单之外

时间:2014-11-18 10:39:34

标签: c# cursor mouse hook

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

我实现了全局钩子来从屏幕上挑选像素等等。一切都好,但是......

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

如何在c#中完成?

谢谢大家。

(我使用此http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C作为挂钩)

1 个答案:

答案 0 :(得分:0)

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

[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;

希望它有所帮助。