2014-11-18 3 views
0

У меня есть утилита для выбора цвета, написанная C++, которую я закодировал годами и хочу переписать с помощью C#.Мышь курсора вне формы

Я реализовал глобальный крючок, чтобы выбрать пиксели с экрана и так далее. Все нормально, но ...

Перекрестный курсор возвращается к указателю, как только мышь перемещается за пределы формы и на рабочий стол. Это не происходит с моим кодом на C++ (фактически MFC).

Как это делается в C#?

Спасибо всем.

(я использую этот http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C для крючка)

+0

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.capture%28v=vs.110%29.aspx –

+0

Такая же проблема. Захват работает, но курсор перекрестия возвращается к умолчанию по умолчанию, когда мышь перемещается за пределы формы и на рабочий стол. – Lara

ответ

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; 

Надеется, что это помогает.

Смежные вопросы