2012-05-23 3 views
3

Я использую следующую библиотеку: http://www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library?fid=1518257&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&fr=51#xx0xxSetCursorPos Не Работающие

Чтобы помочь мне работать с крючками мыши низкого уровня в Windows 7. Я создать таймер для проверки последний раз событие мыши шаг был уволен, а если это длиннее, чем заданное время, я перемещаю мышь в верхний левый угол экрана, используя SetCursorPos (0,0)

Прежде чем перемещать мышь, я взял ее старые координаты и сохранил их. Поэтому, когда я получаю следующее событие MouseMove, я могу заменить мышь в ее исходном местоположении. Однако, после вызова SetCursorPos (oldPos.x, oldPos.y), мышь не перемещается.

Я уверен, что значения oldPos верны, однако курсор отказывается двигаться. Может ли это быть из-за библиотеки, которую я использую? Пожалуйста помоги.

[DllImport("user32.dll", SetLastError = true)] 
    public static extern bool SetCursorPos(int X, int Y); 
     [DllImport("user32.dll")] 
    public static extern bool GetCursorPos(out POINT lpPoint); 
void mouseHook_MouseMove(object sender, MouseEventArgs e) 
    { 
     //If the mouse was not visible, move it back to it's original position 
     if (!mouseVisible) 
     { 
      mouseVisible = true; 

      SetCursorPos(cursorPosition.x, cursorPosition.y); 
     } 

     //Update the last moved time. 
     lastMoved = DateTime.Now; 
    } 

private void hideMouse(object sender, EventArgs e) 
    { 
     if (mouseVisible && (DateTime.Now - lastMoved) > new TimeSpan(0, 0, 0, mouseControl.timeTrackBar.Value)) 
     { 
      log.Debug("Hiding mouse."); 

      //Store the current mouse position. 
      GetCursorPos(out cursorPosition); 

      //Hide the mouse. 
      SetCursorPos(0, 0); 
      log.Debug("Moving cursor to 0,0"); 

      mouseVisible = false; 
     } 
+1

Попробуйте ввести код. Например, как вы получаете координаты мыши? –

+0

Добавлен код. :) Я использую WinAPI для большинства вещей, поэтому я не могу понять, почему он не работает, особенно если он работает, чтобы установить мышь в 0,0, и я прошел отладку и вижу это cursorPosition. x и cursorPosition.y на самом деле являются правильными значениями. ЭТО просто не трогается. –

+0

Моя догадка есть. Возможно, он будет установлен, но напрямую перезаписан другим событием перемещения мыши, потому что вы на самом деле переместили мышь. Это событие запускается много, в зависимости от ОС и скорости мыши. Можете ли вы попытаться отобразить что-то еще, например, вместо точки и использовать позицию мыши, которую вы ожидаете использовать в качестве позиции этой точки? И проверьте возвращаемое значение или GetLastError. – dowhilefor

ответ

1

Я думаю, что это то, что происходит:

  1. Вы перемещаете мышь 0,0 с SetCursor.
  2. Этот акт вызова SetCursor генерирует событие перемещения мыши из вашего крючка.
  3. Вы реагируете на движение мыши, показывая курсор снова и вернув его туда, где он был раньше.