10 аккаунтов на двух компьютерах

Основной компьютер

Вместо "IP_ADDRESS" укажите сетевой адрес удалённого компьютера, подключённого к HotkeyNet. Узнать его можно, вызвав на том компьютере команду "ipconfig" из командной строки Windows. Либо посмотрите адрес подключённого компьютера в главном окне HotkeyNet.

//======================================================================
// Базовый скрипт для управления десятью окнами World of Warcraft
// с помощью программы HotkeyNet на двух компьютерах.
//
// Автор скрипта: Pashted
// Источник: www.slashfocus.ru
//======================================================================


//----------------------------------------------------------------------
// Команда, автоматически запускаемая при загрузке скрипта.
//
// Перейдите в настройки HotkeyNet и убедитесь, что название команды в разделе
// "Execute command automatically" совпадает с указанным здесь.
//----------------------------------------------------------------------
<Command AutoExec>
// создание переменной, определяющей номер компьютера
<SetVar Computer 1>

// создание панелей на экране
<CreatePanel SwitchPanel 810 0 300 24>
<CreatePanel ControlPanel 0 713 80 128>

<SetPanelStyle SwitchPanel Frameless>
<SetPanelStyle ControlPanel Frameless>

<TargetWin SwitchPanel>
<SetWinOpacity 92>
<TargetWin ControlPanel>
<SetWinOpacity 92>

// создание кнопок
<CreateColoredButton Button1 0 0 60 24 0x0B0B0B 0xED1C24 1>
<CreateColoredButton Button2 0 0 60 24 0x0B0B0B 0xED1C24 2>
<CreateColoredButton Button3 0 0 60 24 0x0B0B0B 0xED1C24 3>
<CreateColoredButton Button4 0 0 60 24 0x0B0B0B 0xED1C24 4>
<CreateColoredButton Button5 0 0 60 24 0x0B0B0B 0xED1C24 5>
<CreateColoredButton ButtonH 0 0 80 32 0x33AA33 0xFFFFFF Hotkeys> // состояние горячих клавиш
<CreateColoredButton ButtonS 0 0 80 32 0x101010 0xFFFFFF Typing> // состояние отправки всех нажатий в окна
<CreateColoredButton ButtonL 0 0 80 32 0x0B0B0B 0x808080 Start> // запуск недостающих окон
<CreateColoredButton ButtonE 0 0 80 32 0x660B0B 0xEEEEEE Exit> // закрытие окон

// назначение команд кнопкам
<SetButtonHotkey Button1 Hotkey ScrollLockOff Shift 1>
<SetButtonHotkey Button2 Hotkey ScrollLockOff Shift 2>
<SetButtonHotkey Button3 Hotkey ScrollLockOff Shift 3>
<SetButtonHotkey Button4 Hotkey ScrollLockOff Shift 4>
<SetButtonHotkey Button5 Hotkey ScrollLockOff Shift 5>
<SetButtonHotkey ButtonH Hotkey Pause>
<SetButtonHotkey ButtonS Hotkey ScrollLockOff ScrollLock>
<SetButtonHotkey ButtonL Hotkey Ctrl Alt L>
<SetButtonHotkey ButtonE Hotkey Alt F4>

// перемещение кнопок на панели
<AddButtonToPanel Button1 SwitchPanel 0 0>
<AddButtonToPanel Button2 SwitchPanel 60 0>
<AddButtonToPanel Button3 SwitchPanel 120 0>
<AddButtonToPanel Button4 SwitchPanel 180 0>
<AddButtonToPanel Button5 SwitchPanel 240 0>
<AddButtonToPanel ButtonH ControlPanel 0 0>
<AddButtonToPanel ButtonS ControlPanel 0 32>
<AddButtonToPanel ButtonL ControlPanel 0 64>
<AddButtonToPanel ButtonE ControlPanel 0 96>

// принудительный перенос панелей на передний план
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>


//----------------------------------------------------------------------
// Подпрограмма для изменения цвета кнопок на панели после переключения.
//----------------------------------------------------------------------
<Command SwitchColors>
<SetButtonColors Button%1% 0xAA1515 0xFFFFFF>
<SetButtonColors Button%2% 0x0B0B0B 0xED1C24>
<SetButtonColors Button%3% 0x0B0B0B 0xED1C24>
<SetButtonColors Button%4% 0x0B0B0B 0xED1C24>
<SetButtonColors Button%5% 0x0B0B0B 0xED1C24>


//----------------------------------------------------------------------
// Подпрограмма для изменения размеров и размещения окон на одном мониторе с разрешением 1920x1080.
//
// Дополнительные схемы расположения окон есть на странице
// www.slashfocus.ru/hotkeynet/window-layout-builder
//----------------------------------------------------------------------

<Command ResizeAndPosition>
<SendWinM WoW%1%>
<SetWinRect 240 0 1440 810>
<SendWinM WoW%2%>
<SetWinRect 0 810 480 270>
<SendWinM WoW%3%>
<SetWinRect 480 810 480 270>
<SendWinM WoW%4%>
<SetWinRect 960 810 480 270>
<SendWinM WoW%5%>
<SetWinRect 1440 810 480 270>


//----------------------------------------------------------------------
// Шаблон для запуска и переименования окон.
//
// В начале программа проверяет, существует ли окно, которое она собирается запустить.
// Благодаря этому повторное открытие окон добавит лишь те, которых не хватает.
//----------------------------------------------------------------------
<Template LaunchAndRename>
<If WinDoesNotExist WoW%1%>
<Run "C:\Games\World of Warcraft\WoW.exe"> // путь к исполняемому файлу игры

<WaitForWin "World of Warcraft" 10000>
<RenameTargetWin WoW%1%> // переименование окна
<RemoveWinFrame> // удаление рамки окна

<SetAffinity %3% %4%> // распределение нагрузки на процессор

<SendWin WoW%1%>
<Text %2%> // вставка имени аккаунта
<Key Tab>

// перемещение окон на исходные позиции
<ResizeAndPosition 1 2 3 4 5>

// создание эффекта полосы загрузки
<SetButtonColors Button%1% 0x500000 0xFFFFFF>

// принудительный перенос панелей на передний план
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>
<EndIf>
<EndTemplate>


//----------------------------------------------------------------------
// Старт игровых клиентов.
//
// Для открытия недостающих окон просто запустите процесс еще раз. Закрывать все окна необязательно.
//
// В шаблон LaunchAndRename подставляются в виде двух последних цифр номера логических ядер процессора.
// Применяемая здесь схема рассчитана на четыре логических ядра.
// Подробности смотрите в описании команды SetAffinity:
// www.slashfocus.ru/hotkeynet/commands/item/setaffinity
//----------------------------------------------------------------------
<Hotkey Ctrl Alt L>
<If Computer Is 1>
<SendPC IP_ADDRESS>
<DoHotkey Hotkey Ctrl Alt L> // запуск окон на удалённом компьютере
<EndIf>

<SendPC local>
<TurnHotkeysOn> // включение отправки нажатий в окна
<SetButtonColors ButtonH 0x33AA33> // изменение цвета кнопки H на зелёный

<TargetWin HotkeyNet>
<MinimizeWin> // сворачивание главного окна HotkeyNet

<SetTaskbarAutoHide On> // скрытие панели задач

<ApplyTemplate LaunchAndRename 1 Login1 0 1>
<ApplyTemplate LaunchAndRename 2 Login2 0 1>
<ApplyTemplate LaunchAndRename 3 Login3 2 3>
<ApplyTemplate LaunchAndRename 4 Login4 2 3>
<ApplyTemplate LaunchAndRename 5 Login5 2 3>

<SwitchColors 1 2 3 4 5>

<SetActiveWindowTrackingDelay 35> // установка задержки перед активацией окна в мс
<SetActiveWindowTracking On> // включение активного отслеживания окон


//----------------------------------------------------------------------
// Закрытие игровых клиентов.
//----------------------------------------------------------------------
<Command Exit>
<SendWin %1%>
<CloseWin>


<Hotkey Alt F4>
<If Computer Is 1>
<SendPC IP_ADDRESS>
<DoHotkey Hotkey Alt F4>
<EndIf>

<SendPC local>
<Exit WoW1>
<Exit WoW2>
<Exit WoW3>
<Exit WoW4>
<Exit WoW5>
<Exit "World of Warcraft">

<SetTaskbarAutoHide Off> // восстановление панели задач

<SetActiveWindowTracking Off> // выключение активного отслеживания окон

<TurnHotkeysOff> // выключение отправки нажатий
<SetButtonColors ButtonH 0x151515> // изменение цвета кнопки H на чёрный

<TargetWin HotkeyNet>
<RestoreWinSize> // восстановление главного окна HotkeyNet

<ResetToggles> // сброс состояния переключателей
<Cancel> // отмена текущих и запланированных действий


//----------------------------------------------------------------------
// Назначение меток окнам для отправки нажатий.
//----------------------------------------------------------------------
<Label w1 local SendWinM WoW1>
<Label w2 local SendWinM WoW2>
<Label w3 local SendWinM WoW3>
<Label w4 local SendWinM WoW4>
<Label w5 local SendWinM WoW5>
<Label w6 IP_ADDRESS SendWinM WoW1>
<Label w7 IP_ADDRESS SendWinM WoW2>
<Label w8 IP_ADDRESS SendWinM WoW3>
<Label w9 IP_ADDRESS SendWinM WoW4>
<Label w0 IP_ADDRESS SendWinM WoW5>


//----------------------------------------------------------------------
// Создание списка и назначение основных горячих клавиш.
//
// Напротив except указаны исключения, которые не нужно назначать или уже были назначены.
// Используйте в игре ScrollLock для включения режима полной отправки клавиш.
//----------------------------------------------------------------------
<KeyList MainList A-Z, 0-9, F1-F12, Minus, Plus, NumpadMinus, NumpadPlus>


<Template Assign>
<Hotkey %1%>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key %Trigger%>
<EndTemplate>


<ApplyTemplate Assign "ScrollLockOn AllMainKeys except ScrollLock, Pause">
<ApplyTemplate Assign "Shift ScrollLockOn AllMainKeys except ScrollLock, Pause">

<ApplyTemplate Assign "ScrollLockOff MainList except W, A, S, D, Q, E, M, B, O, L">
<ApplyTemplate Assign "Shift ScrollLockOff MainList except 1-5">
<ApplyTemplate Assign "Ctrl MainList">
<ApplyTemplate Assign "Alt MainList except F4">
<ApplyTemplate Assign "Ctrl Alt MainList except L">


//---------------------------------------------------------------------- // Назначение дополнительных горячих клавиш.
//
// При обычном нажатии произойдёт отправка в активное окно.
// Нажатие вместе с клавишей Shift отправится во все окна. //----------------------------------------------------------------------

<Hotkey ScrollLockOff Esc>
<SendFocusWin> // отправка нажатия в активное на данный момент окно
<Key %Trigger%>

<SendPC local>
<ResetToggles> // сброс состояния переключателей
<Cancel> // отмена текущих и запланированных действий
<SendPC IP_ADDRESS>
<ResetToggles>
<Cancel>

<Hotkey ScrollLockOff Shift Esc, Tab, Enter, Divide, Backspace>
<SendFocusWin>
<KeyUp Shift> // отпускание клавиши Shift

<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key %TriggerMainKey%> // отправка нажатия без модификатора Shift


//----------------------------------------------------------------------
// Клавиша Pause быстро включает либо отключает передачу клавиш.
// Требуется в случаях, когда нужно напечатать что-то в чате или другом приложении.
//----------------------------------------------------------------------
<Hotkey Pause>
<If HotkeysAreOn> // если оправка нажатий в окна активна
<TurnHotkeysOff> // выключаем отправку нажатий
<SetActiveWindowTracking Off> // выключаем активное отслеживание окон
<SetButtonColors ButtonH 0x151515> // изменяем цвет кнопки H на чёрный

<Else> // если отправка нажатий в окна неактивна
<TurnHotkeysOn> // включаем отправку нажатий
<SetActiveWindowTracking On> // включаем активное отслеживание окон
<SetButtonColors ButtonH 0x33AA33> // изменяем цвет кнопки H на зелёный
<EndIf>

// принудительно закрепляем панели на переднем плане
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>


//----------------------------------------------------------------------
// Клавиша ScrollLock переключает режим отправки всех нажатий в окна.
// Требуется в случаях, когда нужно напечатать текст сразу во всех окнах, например, ввести пароль.
//----------------------------------------------------------------------
<Hotkey ScrollLockOff ScrollLock>
// отправка нажатия в активное окно
<PassThrough>
// измененяем цвет кнопки S на жёлтый
<SetButtonColors ButtonS 0xEEEE55 0x151515>
// изменяем команду на кнопке для правильной работы клика
<SetButtonHotkey ButtonS Hotkey ScrollLockOn ScrollLock>


<Hotkey ScrollLockOn ScrollLock>
// отправка нажатия в активное окно
<PassThrough>
// измененяем цвет кнопки S на чёрный
<SetButtonColors ButtonS 0x101010 0xFFFFFF>
// изменяем команду на кнопке для правильной работы клика
<SetButtonHotkey ButtonS Hotkey ScrollLockOff ScrollLock>


//----------------------------------------------------------------------
// Переопределение действий для пробела - после прыжка побочные персонажи продолжат следовать за главным.
// Требуется во время полёта и плавания.
//----------------------------------------------------------------------
<Hotkey ScrollLockOff Space>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<KeyDown Space> // нажатие и удержание клавиши Пробел


<HotkeyUp ScrollLockOff Space>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<KeyUp Space> // отпускание клавиши Пробел

// следование за тем персонажем, от лица которого на данный момент осуществляется управление
<If ActiveWinIs WoW1>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift 1>
<Else If ActiveWinIs WoW2>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift 2>
<Else If ActiveWinIs WoW3>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift 3>
<Else If ActiveWinIs WoW4>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift 4>
<Else If ActiveWinIs WoW5>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift 5>


//----------------------------------------------------------------------
// Переключение между окнами.
//
// В игре на сочетания клавиш от Shift+1 до Shift+0 необходимо назначить макросы на следование,
// содержащие ники персонажей.
//

// Подробнее об этом в разделе "Следование" на странице
// www.slashfocus.ru/multibox/item/multiboxing-v-world-of-warcraft
//
// Поочерёдное переключение между окнами осуществляется по Alt+Tab.

//----------------------------------------------------------------------
<Template Switch> // шаблон для создания кнопок переключения
<Hotkey ScrollLockOff Shift %1%>
<SwitchColors %1% %2% %3% %4% %5%>
<ResizeAndPosition %1% %2% %3% %4% %5%>

<TargetWin WoW%1%>
<SetActiveWin> // активация окна, на которое было произведено переключение

<If Computer Is 1>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift %1%> // следование за главным на основном ПК
<Else>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift %6%> // следование за главным на удалённом ПК
<EndTemplate>


<ApplyTemplate Switch 1 2 3 4 5 6>
<ApplyTemplate Switch 2 1 3 4 5 7>
<ApplyTemplate Switch 3 2 1 4 5 8>
<ApplyTemplate Switch 4 2 3 1 5 9>
<ApplyTemplate Switch 5 2 3 4 1 0>


<Hotkey Ctrl Enter>
// если навести курсор на одно из окон и нажать Ctrl+Enter, будет произведено переключение на это окно
<If ActiveWinIs WoW1>
<DoHotkey Hotkey ScrollLockOff Shift 1>
<Else If ActiveWinIs WoW2>
<DoHotkey Hotkey ScrollLockOff Shift 2>
<Else If ActiveWinIs WoW3>
<DoHotkey Hotkey ScrollLockOff Shift 3>
<Else If ActiveWinIs WoW4>
<DoHotkey Hotkey ScrollLockOff Shift 4>
<Else If ActiveWinIs WoW5>
<DoHotkey Hotkey ScrollLockOff Shift 5>


<Hotkey Alt Tab> // поочерёдное переключение между окнами
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 2>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 3>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 4>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 5>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 1>


//----------------------------------------------------------------------
// Передача кликов мыши.
//----------------------------------------------------------------------
<Template Mouse>
<SendPC local>
<SendWinS WoW1>
<ClickMouse %1%>
<SendWinS WoW2>
<ClickMouse %1%>
<SendWinS WoW3>
<ClickMouse %1%>
<SendWinS WoW4>
<ClickMouse %1%>
<SendWinS WoW5>
<ClickMouse %1%>

<SendPC IP_ADDRESS>
<SendWinS WoW1>
<ClickMouse %1%>
<SendWinS WoW2>
<ClickMouse %1%>
<SendWinS WoW3>
<ClickMouse %1%>
<SendWinS WoW4>
<ClickMouse %1%>
<SendWinS WoW5>
<ClickMouse %1%>
<EndTemplate>


<Hotkey ScrollLockOff Insert>
<ApplyTemplate Mouse LButton> // клик левой кнопкой мыши


<Hotkey ScrollLockOff Delete>
<ApplyTemplate Mouse RButton> // клик правой кнопкой мыши


//----------------------------------------------------------------------
// Дополнительные кнопки мыши.
//
// В связи с тем, что дополнительные кнопки не совершают клик как таковой,
// нам не нужно передавать их нажатия так же, как обычные клики.
// Вместо этого мы передадим в окна нажатие другой клавиши,
// которую можно назначить в самой игре на любое действие.
//----------------------------------------------------------------------
<Template MouseButton>
<Hotkey ScrollLockOff %1%>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key %2%>

<Hotkey ScrollLockOff Shift %1%>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Shift %2%>

<Hotkey Ctrl %1%>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Ctrl %2%>

<Hotkey Alt %1%>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w0>
<Key Alt %2%>
<EndTemplate>


<ApplyTemplate MouseButton MButton 0> // средняя кнопка передаст в окна нажатие клавиши 0
<ApplyTemplate MouseButton Button4 Minus> // первая боковая кнопка передаст в окна нажатие клавиши Minus
<ApplyTemplate MouseButton Button5 Plus> // вторая боковая кнопка передаст в окна нажатие клавиши Plus

 

Удалённый компьютер (для управления с обоих ПК)

Чтобы иметь возможность управлять всей группой с каждой машины, загрузите в HotkeyNet на удалённом компьютере такой же код, поменяв в нём следующее:

  1. В начале скрипта переменной "Computer" присваивается значение "1". Замените его на любое другое.
  2. Везде, где встречается "IP_ADDRESS", укажите сетевой адрес основного компьютера.
  3. Горячая клавиша Space при отпускании отправляет в окна сочетания Shift+1, Shift+2 и т. д. Замените в конце этих сочетаний цифры 1, 2, 3, 4, 5 на 6, 7, 8, 9, 0 соответственно.
  4. Измените имена аккаунтов в горячей клавише Ctrl+Alt+L.
  5. При необходимости измените схему распределения нагрузки между ядрами процессора (SetAffinity) и координаты расположения окон.

 

Удалённый компьютер (для управления только с основного ПК)

Если управление будет осуществляться с одного ПК, то на второй всё равно нужно будет загрузить скрипт, но он будет намного короче:

//----------------------------------------------------------------------
// Изменение размера окон.
//----------------------------------------------------------------------
<Command ResizeAndPosition>
<SendWinM WoW%1%>
<SetWinRect 0 0 960 540>
<SendWinM WoW%2%>
<SetWinRect 960 0 960 540>
<SendWinM WoW%3%>
<SetWinRect 0 540 640 360>
<SendWinM WoW%4%>
<SetWinRect 640 540 640 360>
<SendWinM WoW%5%>
<SetWinRect 1280 540 640 360>


//----------------------------------------------------------------------
// Шаблон для запуска и переименования окон.
//----------------------------------------------------------------------
<Template LaunchAndRename>
<If WinDoesNotExist WoW%1%>
<Run "C:\Games\World of Warcraft\WoW.exe"> // путь к исполняемому файлу игры

<RenameTargetWin WoW%1%> // переименование окна
<RemoveWinFrame> // удаление рамки окна

<SetAffinity %3% %4%> // распределение нагрузки на процессор

<SendWin WoW%1%>
<Text %2%> // вставка имени аккаунта
<Key Tab>

// перемещение окон на исходные позиции
<ResizeAndPosition 1 2 3 4 5>
<EndIf>
<EndTemplate>


//----------------------------------------------------------------------
// Запуск игровых клиентов на удалённом компьютере, доступный на обоих ПК.
//----------------------------------------------------------------------
<Hotkey Ctrl Alt L>
<TargetWin HotkeyNet>
<MinimizeWin> // сворачивание главного окна HotkeyNet

<ApplyTemplate LaunchAndRename 1 Login6 0 1>
<ApplyTemplate LaunchAndRename 2 Login7 0 1>
<ApplyTemplate LaunchAndRename 3 Login8 2 3>
<ApplyTemplate LaunchAndRename 4 Login9 2 3>
<ApplyTemplate LaunchAndRename 5 Login10 2 3>


//----------------------------------------------------------------------
// Закрытие игровых клиентов.
//----------------------------------------------------------------------
<Command Exit>
<SendWin %1%>
<CloseWin>


<Hotkey Alt F4>
<Exit local WoW1>
<Exit local WoW2>
<Exit local WoW3>
<Exit local WoW4>
<Exit local WoW5>
<Exit local "World of Warcraft">

<TargetWin HotkeyNet>
<RestoreWinSize> // восстановление главного окна HotkeyNet

<ResetToggles> // сброс состояния переключателей
<Cancel> // отмена текущих и запланированных действий

Это приходится делать потому, что нельзя обычным способом проверить, существует ли запускаемое окно на удалённой машине. А это необходимо, чтобы во время повторного запуска открывались только отсутствующие окна и не плодились копии. Для "разгрузки" основного скрипта сюда также были добавлены некоторые другие функции.