Что нового

Минимизация горизонтальных перемещений мыши при работе с двумя мониторами

SergejF

Новичок
Сообщения
7
Репутация
0
Уважаемые господа,

Буду искренне вам признателен за помощь в написании алгоритма для нижеследующей задачи. Хочу просить вас не давать конечный работающий скрипт, а помочь в тех моментах, которые вызывают у меня затруднения.

Задача: уменьшить горизонтальные движения мышью при работе с двумя мониторами. Решить её хочу следующим образом: при нажатии колесика мыши программа определяет на каком экране находится курсор мыши и пересылает го на середину другого экрана. Таким образом не совершая мышью длинных горизонтальных перемещений происходит быстрое переключение между приложениями на различных экранах.

Хотелось бы сделать программу универсальной, корректно работающей при разных разрешениях мониторов. Но для перемещения в центр экранов необходимо знать ширину и высоту каждого. Данные основного экрана мы узнаем из значений макро @DesktopWidth, @DesktopHeight. Ширину второго экрана получаем вычитая из ширины рабочего стола ширину первого экрана.

Первый вопрос: как определить высоту второго экрана?

У меня получился следующий скрипт:

Код:
$w1 = @DesktopWidth ; ширина 1-го экрана
$h1 = @DesktopHeight ; высота 1-го экрана
$mas = WinGetPos('Program Manager') ; массив с данными рабочего стола 
$w2 = $mas[2] - @DesktopWidth ; ширина 2-го экрана
$h2 = 1080 ; высота 2-го экрана, пока  статично.

$pos = MouseGetPos() ; определяем позицию курсора

If $pos[0] < $w1 Then ; если курсор на первом экране

MouseMove($w1+$w2/2, $h2/2, 0) ; переходим на середину второго экрана

Else

MouseMove($w1/2, $h1/2, 0) ; иначе переходим на середину первого экрана

EndIf



Вроде работает.

Для выполнения скрипта по щелку колесиком мыши я хочу использовать функцию HotKeySet:


Код:
HotKeySet(" ", "Skachok")

Func Skachok()

; тут будет скрипт, который выше.

EndFunc


Но не знаю какой комбинация клавиш key в HotKeySet соответствует клик колесиком мыши.

Второй вопрос: какие key следует указать в HotKeySet, чтобы назначить выполнение пользовательской функции по клику колесика мыши?
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Можно поискать параметры мониторов в реестре, например у меня в разделе
Код:
 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{F65A7D22-37FE-46D4-B895-8CD9964D1A4B}\
есть два ключа 0000 и 0001 с параметрами (DefaultSettings.XResolution, DefaultSettings.YResolution), в которых хранятся разрешения мониторов.
Прочитать значения из реестра можно через RegRead
 
Автор
SergejF

SergejF

Новичок
Сообщения
7
Репутация
0
Khaibit сказал(а):
Можно поискать параметры мониторов в реестре, например у меня в разделе
Код:
 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\{F65A7D22-37FE-46D4-B895-8CD9964D1A4B}...

У меня другое имя "числовой" папки: {0770BC01-595F-4426-B8B5-5C0451D7E84B}. Windows 7, Rus 64 bit.

Подставлять там регулярное выражение?

При смене второго монитора актуальные параметры все равно будут отображаться в ключе 0001? Какие-нибудь 0002, 0003... не появятся.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429

Khaibit

Осваивающий
Сообщения
103
Репутация
25
SergejF сказал(а):
У меня другое имя "числовой" папки: {0770BC01-595F-4426-B8B5-5C0451D7E84B}. Windows 7, Rus 64 bit.
Подставлять там регулярное выражение?
При смене второго монитора актуальные параметры все равно будут отображаться в ключе 0001? Какие-нибудь 0002, 0003... не появятся.
Код:
$key = 'HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\'
$key_1 = RegEnumKey($key, 1) 
$Y = RegRead($key & $key_1 & '\0001', 'DefaultSettings.YResolution')
MsgBox(0, '', $Y)
 
Автор
SergejF

SergejF

Новичок
Сообщения
7
Репутация
0
В связи с добавлениями в постах вопрос пока сниму.
 
Верх