2015-06-10 8 views
1

Примечание. Хотя я не могу тестировать другую версию Windows, я подозреваю, что это проблема только с Windows 8 из-за угловых и боковых точек доступа.Мышь переходит в исходное местоположение после пересечения Montiors с функцией SendInput и схожими функциями

Я пытаюсь переместить курсор к указанным координатам, используя множество методов, таких как SendInput, SetCursorPos, mouse_event и MoveMouse от AutoHotKey/AutoIt. Он отлично работает при перемещении курсора из одного места в другое на том же мониторе, но не при переходе с одного монитора на другой.

При пересечении монитора, если мой указатель мыши находится на (100, 100) на моем дополнительном мониторе справа, и я пытаюсь переместить указатель мыши на (0, 0), который находится на моем основном мониторе, он переместится туда и останется там, я могу щелкнуть мышь, GetCursorPos скажет мне это в (0, 0), но как только я двигаю мышь вручную, курсор начинает двигаться от (0, 0) на моем вторичного монитора (я немного соврал в названии для краткости.)

так что мой Вопрос: что я могу сделать? Как перенести курсор на монитор без повторного перехода к исходному монитору?

SendInput Пример C++:

int MouseMove(int x, int y) { 
    int screenWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN); 
    int screenHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN); 

    INPUT input; 
    input.type = INPUT_MOUSE; 
    input.mi.dx = round((x * 65535)/(screenWidth - 1)); 
    input.mi.dy = round((x * 65535)/(screenHeight - 1)); 
    input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_VIRTUALDESK | MOUSEEVENTF_MOVE; 
    input.mi.mouseData = 0; 
    input.mi.time = 0; 
    input.mi.dwExtraInfo = 0; 

    return SendInput(1, &input, sizeof(INPUT)); 
} 

AHK Пример:

CoordMode, Mouse, Screen 
MouseMove, 0, 0, 0 

AutoIt Пример:

MouseMove(0, 0, 0) 
+0

Хе-хе, просто используйте надлежащую ОС ... ;-) – Samoth

+0

Не уверен, что это правильно, но если у вас есть два монитора, например. 1024, ваше разрешение - 2048. Поэтому перемещение до 0,0 действительно является первым дисплеем. Переместите мышь на (1024,0), если вы хотите находиться в левом верхнем углу второго монитора. – Milos

+0

@Samoth Программа, предназначенная для работы только в Windows, к сожалению. = c – Nathan

ответ

0

У меня нет никакого способа тестирования проблемы, но, возможно, я могу указать вам в правильном направлении.

Единственное, что я могу вспомнить, используя MouseGetPos для хранения текущей позиции мыши, SysGet захватить 2-й монитор и использовать MouseMove вернуть вас в исходное положение после SendInput.

Надеюсь, это поможет.

+0

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

+0

Честно говоря, я в тупике. Надеюсь, кто-то, кто лучше знает эту проблему или средства для тестирования, вскоре перезвонит. – errorseven

0

Это может быть ошибка в Autoit или Windows.

Попробуйте сделать MouseMove другим способом и сыграйте с $ Window.

Local $WM_MOUSEMOVE  = 0x0200 

DllCall("user32.dll", "int", "SendMessage", _ 
     "hwnd", WinGetHandle($Window), _ 
     "int", $WM_MOUSEMOVE, _ 
     "int", 0, _ 
     "long", _MakeLong($X, $Y)) 

Установлены ли ваши мониторы в режим расширения?

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

  • Нет связанных вопросов^_^