kharlashkin Posted June 7, 2014 Author Share Posted June 7, 2014 "Это личное видео" Прошу прощения, не изменил настройки после редактора... Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2014 Author Share Posted June 9, 2014 Отыграли сегодня 3 боя с сыном, все хорошо, кроме управления камерой (стрелками) - очень плохо и не удобно. Так как на стрелки в скрипте назначены стики - было бы хорошо придумать что-то типа коэфициентов, например возьмем дополнительные стрелки на цифровой клавиатуре и запилить следующий алгоритм стрелка обычная коэфициент 0,5, стрелка на цифровом блоке коэфициент 1 и нажатые одновременно стрелки и там и там, коэфициент 2,5. Я в AHK смогу так назначить на стики отправку нажатий кнопок. Подскажет кто - это реально? Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 9, 2014 Share Posted June 9, 2014 (edited) //Up Несовсем понятно. Можно поподробнее? Offtop.Кстати написал на C++ при использовании SDL библиотеки управление мышкой с джойстика =) Радость до ушей. Вот хочу, что нибудь еще написать, больше практиковаться и учить язык. У меня обработка клавиша нажата или нет идет в цикле. Так вот я там сделал mouse_boost переменную-коэфициент, который увеличивается если я зажму например клавишу 6 на джойстике. Также можно попробывать и на AHK скрипте. Тоесть если нажата эта клавиша, то коэф. увеличить. И мышка движется быстрее Вот так примерно while(1) { Sleep(10);//Задержка, разгрузка процессора SDL_PollEvent(&event); static int mouse_boost = 0; if(SDL_JoystickGetButton(joy, 5)) mouse_boost = 2; else mouse_boost = 1; //Ось 1. Y инвертирована int xAxis1 = SDL_JoystickGetAxis(joy, 0); int yAxis1 = -SDL_JoystickGetAxis(joy, 1); //Ось 2. Y инвертирована int xAxis2 = SDL_JoystickGetAxis(joy, 4); int yAxis2 = -SDL_JoystickGetAxis(joy, 2); //Передвижение мыши с помощью Оси 1 float speed_coef = 0.5;//коэфициент замедления скорости if((xAxis1 != 0) || (yAxis1 != 0)) { POINT mouseCoord; GetCursorPos(&mouseCoord); //Иверт инвертированной оси -yAxis1, т.к. экран с лев. верх. угла. (* mouse_boost) - коэф ускорения SetCursorPos(mouseCoord.x + (xAxis1 / (15000 * speed_coef)) * mouse_boost, mouseCoord.y + (-yAxis1 / (15000 * speed_coef)) * mouse_boost); } } Edited June 9, 2014 by cep62rus 1 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2014 Author Share Posted June 9, 2014 (edited) Несовсем понятно. Можно поподробнее? Дело в том что в неактивное окно нет возможности отправлять перемещения мыши, а геймпады танки не понимают. Стрелки же для движения камеры имеют заданный коэффициент в игре, соответственно нет возможности быстрее или медленнее двигать камерой. Вот и думаю добавить отдельный обработчик в игру, например кнопка влево - коэффициент 0,5 (сейчас в игре 1), кнопка влево на цифровой клавиатуре (NumpadLeft) - коэффициент 1. нажатые одновременно (Left + NumpadLeft) - коэффициент 2,5. Не могу по-быстрому найти в каком из родных скриптов я видел коэффициенты. Вот что-то похожее: 'control_modes.pyc' elif cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True Edited June 9, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 9, 2014 Share Posted June 9, 2014 (edited) Как я понимаю AHK умеет отправлять сообщения окну своей функцие SendMessage. Тоесть вызывать ее из WinApi. параметры SendMessageW( __in HWND hWnd, __in UINT Msg, __in WPARAM wParam, __in LPARAM lParam); Вообщем надо "курить" Spy++ утилиту и формировать запрос окну с нужными параметрами. Имулировать движение мыши. Также поискать можно Эмуляция движений мыши в неактивном окне C++ или вообще другой язык программирования. Тоесть там сводится все к вызову WinApi функции с нужными параметрами, тоесть __in HWND hWnd = хендл окна __in UINT Msg = тип сообщения(WM_MOUSEMOVE) __in WPARAM wParam = (не знаю, нужно капать) __in LPARAM lParam = (тут посмотрел при помощи Spy++ необходим парметр в котором lp = MAKELPARAM(х, у); координаты. формируется не знаю как, надо разбираться.) Извиняюсь, что так резко набрасал. Пока что нашел. Самому аж интересно, сам в танчики не играю сейчас //upd 23.04 09.06.2014 http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_nchittest.htm http://www.vsokovikov.narod.ru/New_MSDN_API/Mouse_input/notify_wm_mousemove.htm Edited June 9, 2014 by cep62rus Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 9, 2014 Author Share Posted June 9, 2014 Имулировать движение мыши. Ну если у Вас получиться - я буду очень рад, потому как недельное гугление меня ни к чему не привело. Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 9, 2014 Share Posted June 9, 2014 (edited) /del Edited June 11, 2014 by cep62rus 1 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 10, 2014 Author Share Posted June 10, 2014 (edited) Итак, тестил на Painte =D. Так а курсор при выполнении скрипта где. т.е. реальная мышь? Очень-очень интересен Ваш опыт, чуть позже обязательно попробую в танки отправлять отклонения стиков как перемещения мыши в неактивное окно. Я кстати эту функцию "WM_MOUSEMOVE" уже встречал, но так как обещал сыну на выходных "танчики в разделенном экране", отложил на потом изучение данного вопроса. Если получиться - это будет супер :) Edited June 10, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 10, 2014 Share Posted June 10, 2014 (edited) Так а курсор при выполнении скрипта где. т.е. реальная мышь? Очень-очень интересен Ваш опыт, чуть позже обязательно попробую в танки отправлять отклонения стиков как перемещения мыши в неактивное окно. Я кстати эту функцию "WM_MOUSEMOVE" уже встречал, но так как обещал сыну на выходных "танчики в разделенном экране", отложил на потом изучение данного вопроса. Если получиться - это будет супер :) Дело в том, что сам курсор мыши не двигается (мы можем им двигать и работать в любом другом окне, а на фоне у нас скрипт будет слать просто послдовательность координат типа там мышь проходит), мышь лишь эмулируем его плавные движения, последовательно передавая окну мол вот курсор бежит, обработай сообщение. Очень красиво получилось с паинтом, особенно, если сделать задержку, будет красиво и плавно рисовать, курсор при этом даже не движется(само окно не активировано) и им можно управлять в другом окне например. Классная магия) Edited June 10, 2014 by cep62rus Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 10, 2014 Author Share Posted June 10, 2014 Дело в том, что сам курсор мыши не двигается, мышь лишь эмулируем его плавные движения, последовательно передавая окну мол вот курсор бежит, обработай сообщение Ага, так это то что надо!!! Буду пробовать, огромное спасибо Вам!!! Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 11, 2014 Author Share Posted June 11, 2014 "Вылюбил" себе мозг, но не могу понять почему скрипт даже не запускается: 'testmouse.ahk' #SingleInstance SetTimer, WatchJoystick, 10 JoyThresholdUpper := 50 + JoyThreshold JoyThresholdLower := 50 - JoyThreshold JoyMultiplier = 0.30 JoyThreshold = 3 InvertYAxis := false if InvertYAxis YAxisMultiplier = -1 else YAxisMultiplier = 1 WatchJoystick: MouseNeedsToBeMoved := false SetFormat, float, 03 GetKeyState, joyx, 1JoyX GetKeyState, joyy, 1JoyY if joyx > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdUpper } else if joyx < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaX := joyx - JoyThresholdLower } else DeltaX = 0 if joyy > %JoyThresholdUpper% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdUpper } else if joyy < %JoyThresholdLower% { MouseNeedsToBeMoved := true DeltaY := joyy - JoyThresholdLower } else DeltaY = 0 if MouseNeedsToBeMoved { MakeLong( LoWord, HiWord ) { return (HiWord << 16) | (LoWord & 0xffff) } lParam := MakeLong( DeltaX * JoyMultiplier, DeltaY * JoyMultiplier * YAxisMultiplier ) SendMessage, 0x200, 0, %lParam%,, WoT Client } return Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 11, 2014 Share Posted June 11, 2014 (edited) //Ничайно удалил свой пост выше. Интернет лаганул. Дело в том, что MakeLong должна быть отдельно функцией, не знаю как в AHK это делать, но выглядеть это дожно примерно так //функция MakeLong( LoWord, HiWord ) { return (HiWord << 16) | (LoWord & 0xffff) } //функция //здесь блок, если нужно перемещать if MouseNeedsToBeMoved { lParam := MakeLong( DeltaX * JoyMultiplier, DeltaY * JoyMultiplier * YAxisMultiplier ) // вызов SendMessage, 0x200, 0, %lParam%,, WoT Client } return А ошибки выдает интерпритатор? А также необходимо передавать координаты, тоесть получить при помощи GetCursorPos координаты мыши, прибавить к ним DeltaX, DeltaY и уже перемещать. //offtop. Печаль, жалко ноутбук сломан, написал бы на C++ бы все, а на старом компьютере ничего не запустить Edited June 11, 2014 by cep62rus Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 11, 2014 Author Share Posted June 11, 2014 (edited) А ошибки выдает интерпритатор? В том то и дело что не выдает - тупо валится. А также необходимо передавать координаты, тоесть получить при помощи GetCursorPos координаты мыши, прибавить к ним DeltaX, DeltaY и уже перемещать А вот это имеет смысл, может поэтому и валится - нет начальных координат для функции. P.S. Таак стоять, отредактированный скрипт перемещений стиком мыши так же валится без ошибок. Edited June 11, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 11, 2014 Share Posted June 11, 2014 Вообще стоит пересмотреть и глянуть в сторону AutoIt 3. Просто AutoHotKey есть модификация AutoIt 2. У AutoIt есть свой редактор кода, и компилятор выдает допущеные ошибки Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 11, 2014 Author Share Posted June 11, 2014 Насколько мне известно что Autolt, что AHK выросли из одного проекта и имеют одинаковый функционал. Компилятор кода AHK так же выдает ошибки. На оф. форуме AHK подсказали что не так: "#Persistent", теперь скрипт не вылетает но и сообщения в окошко танков не приходят. /del Блин, а какой же хорошей шпаргалкой был пост. Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted June 11, 2014 Share Posted June 11, 2014 (edited) 'Работа с окном' #include <iostream> #include <Windows.h> #include <math.h> using namespace std; //MAKELONG MACRO #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) int main() { setlocale(0, "russian"); HWND hWnd = (HWND)0x000203EC; ///Отправка на перемещение и нажатие кнопки мыши, потом запрос на отрисовку /*SendMessage(hWnd, WM_MOUSEMOVE, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_LBUTTONDOWN, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_LBUTTONUP, 0, MAKELONG (300, 300)); SendMessage(hWnd, WM_PAINT, 0, 0);*/ //А теперь прикол =) //рисует в паинте график cos int x, y; SendMessage(hWnd, WM_LBUTTONDOWN, 0, MAKELONG (100, 300)); for(int i = 100; i < 500; i++) { x = i; y = 300 + cos((float)x/4)*70; // cos(х/a) /чем больше, тем функция в длинну растягивается SendMessage(hWnd, WM_MOUSEMOVE, 0, MAKELONG (x, y)); Sleep(50);//Задержка } SendMessage(hWnd, WM_LBUTTONUP, 0, MAKELONG (x, y)); SendMessage(hWnd, WM_PAINT, 0, 0); cout << "Готово!" << endl; system("pause"); return 0; } 'Работа с джоем' #pragma comment (linker, "/ENTRY:mainCRTStartup") #include <SDL.h> #include <iostream> #include <Windows.h> #pragma comment(lib, "SDL2.lib") #pragma comment(lib, "SDL2main.lib") using namespace std; #undef main int main() { // Переменная для нашего джойстика SDL_Joystick *joy; SDL_Event event; // Инициализация SDL для использования джойстика, включение событий от джойстика и его открытие SDL_Init(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); joy = SDL_JoystickOpen(0); while(1) { Sleep(10);//Задержка, разгрузка процессора SDL_PollEvent(&event); static int mouse_boost = 0; if(SDL_JoystickGetButton(joy, 5)) mouse_boost = 2; else mouse_boost = 1; //Значения по осям от -32768 до 32767. //Ось 1. Y инвертирована int xAxis1 = SDL_JoystickGetAxis(joy, 0); int yAxis1 = -SDL_JoystickGetAxis(joy, 1); //Передвижение мыши с помощью Оси 1 float speed_coef = 0.5;//коэфициент замедления скорости if((xAxis1 != 0) || (yAxis1 != 0)) { POINT mouseCoord; GetCursorPos(&mouseCoord); //Иверт инвертированной оси -yAxis1, т.к. экран с лев. верх. угла. (* mouse_boost) - коэф ускорения SetCursorPos(mouseCoord.x + (xAxis1 / (15000 * speed_coef)) * mouse_boost, mouseCoord.y + (-yAxis1 / (15000 * speed_coef)) * mouse_boost); } } return 0; } Edited June 11, 2014 by cep62rus 1 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 11, 2014 Author Share Posted June 11, 2014 Спасибо! Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 12, 2014 Author Share Posted June 12, 2014 (edited) Помогли мне со скриптом, который рисует в Paint, но блин в танки не отправляются движения мыши... If !WinExist("ahk_class MSPaintApp") Run, mspaint.exe WinWait, ahk_class MSPaintApp WinGet, List, ControlList Loop, parse, List, `n if RegExMatch(A_LoopField, "i)^Afx:[0-9A-F]+:8\d", Found) break x := 10, y := 200 PostMessage, WM_LBUTTONDOWN := 0x201,, x|(y<<16), % Found Loop 30 { x += A_Index PostMessage, WM_MOUSEMOVE := 0x200,, x|(y<<16), % Found Sleep, 10 } PostMessage, WM_LBUTTONUP := 0x202,, x|(y<<16), % Found Кнопки нажатия мыши отправляются, а вот движения нет. Может кто знает ещё какой способ? Edited June 12, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 12, 2014 Author Share Posted June 12, 2014 Стрелки же для движения камеры имеют заданный коэффициент в игре, соответственно нет возможности быстрее или медленнее двигать камерой. Вот и думаю добавить отдельный обработчик в игру, например кнопка влево - коэффициент 0,5 (сейчас в игре 1), кнопка влево на цифровой клавиатуре (NumpadLeft) - коэффициент 1. нажатые одновременно (Left + NumpadLeft) - коэффициент 2,5. Если не получиться с мышей - это реально сделать? Есть в Windows функция - управление курсором с помощью цифрового блока клавиатуры, нельзя ли эту функцию запилить на python и добавить в игру? Таким образом можно попробовать реализовать 2-х ступенчатое управление курсором/камерой в игре. Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted June 16, 2014 Author Share Posted June 16, 2014 (edited) Доработал немного скрипт: 'wotsplitscreen.ahk' #Persistent SetTimer, WatchAxisFirstJoyMoveForward, 10 SetTimer, WatchAxisFirstJoyMoveRotate, 10 SetTimer, WatchAxisFirstJoyCameraRotateVert, 10 SetTimer, WatchAxisFirstJoyCameraRotateHoriz, 10 SetTimer, WatchAxisFirstJoyShoot, 10 SetTimer, WatchFirstJoyPOV, 10 return ;;;;;;;;;;;; WatchAxisFirstJoyMoveForward: GetKeyState, 1JoyY, 1JoyY FirstJoyMoveForwardPrev = %FirstJoyMoveForward% if 1JoyY > 70 FirstJoyMoveForward = vk53 else if 1JoyY < 30 FirstJoyMoveForward = vk57 else FirstJoyMoveForward = if FirstJoyMoveForward = %FirstJoyMoveForwardPrev% return SetKeyDelay -1 if FirstJoyMoveForward { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyMoveForward% down}, WoT Client } } if FirstJoyMoveForwardPrev { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyMoveForwardPrev% up}, WoT Client } } return ;;;;;;;;;;;; WatchAxisFirstJoyMoveRotate: GetKeyState, 1JoyX, 1JoyX FirstJoyMoveRotatePrev = %FirstJoyMoveRotate% if 1JoyX > 80 FirstJoyMoveRotate = vk44 else if 1JoyX < 20 FirstJoyMoveRotate = vk41 else FirstJoyMoveRotate = if FirstJoyMoveRotate = %FirstJoyMoveRotatePrev% return SetKeyDelay -1 if FirstJoyMoveRotate { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyMoveRotate% down}, WoT Client } } if FirstJoyMoveRotatePrev { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyMoveRotatePrev% up}, WoT Client } } return ;;;;;;;;;;;; WatchAxisFirstJoyCameraRotateVert: GetKeyState, 1JoyU, 1JoyU FirstJoyCameraRotateVertPrev = %FirstJoyCameraRotateVert% if 1JoyU > 70 FirstJoyCameraRotateVert = Right else if 1JoyU < 30 FirstJoyCameraRotateVert = Left else FirstJoyCameraRotateVert = if FirstJoyCameraRotateVert = %FirstJoyCameraRotateVertPrev% return SetKeyDelay -1 if FirstJoyCameraRotateVert { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyCameraRotateVert% down}, WoT Client } } if FirstJoyCameraRotateVertPrev { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyCameraRotateVertPrev% up}, WoT Client } } return ;;;;;;;;;;;; WatchAxisFirstJoyCameraRotateHoriz: GetKeyState, 1JoyR, 1JoyR FirstJoyCameraRotateHorizPrev = %FirstJoyCameraRotateHoriz% if 1JoyR > 70 FirstJoyCameraRotateHoriz = Down else if 1JoyR < 30 FirstJoyCameraRotateHoriz = Up else FirstJoyCameraRotateHoriz = if FirstJoyCameraRotateHoriz = %FirstJoyCameraRotateHorizPrev% return SetKeyDelay -1 if FirstJoyCameraRotateHoriz { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyCameraRotateHoriz% down}, WoT Client } } if FirstJoyCameraRotateHorizPrev { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyCameraRotateHorizPrev% up}, WoT Client } } return ;;;;;;;;;;;; WatchAxisFirstJoyShoot: GetKeyState, 1JoyZ, 1JoyZ FirstJoyShootPrev = %FirstJoyShoot% if 1JoyZ < 30 FirstJoyShoot = vk01 else FirstJoyShoot = if FirstJoyShoot = %FirstJoyShootPrev% return SetKeyDelay -1 if FirstJoyShoot { IfWinNotActive, WoT Client { SendMessage, 0x201,,,, WoT Client } } if FirstJoyShootPrev { IfWinNotActive, WoT Client { SendMessage, 0x202,,,, WoT Client } } return ;;;;;;;;;;;;; WatchFirstJoyPOV: GetKeyState, 1JoyPOV, 1JoyPOV FirstJoyPOVPrev = %FirstJoyPOV% if 1JoyPOV = 0 FirstJoyPOV = vk52 else if 1JoyPOV = 18000 FirstJoyPOV = vk46 else if 1JoyPOV = 27000 FirstJoyPOV = vk58 else if 1JoyPOV = 9000 FirstJoyPOV = vk43 else FirstJoyPOV = if FirstJoyPOV = %FirstJoyPOVPrev% return SetKeyDelay -1 if FirstJoyPOV { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyPOV% down}, WoT Client } } if FirstJoyPOVPrev { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {%FirstJoyPOVprev% up}, WoT Client } } return ;;;;;;;;;;;; 1Joy10:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vkA0 Down}, WoT Client KeyWait, 1Joy10 ControlSend,, {vkA0 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy9:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk20 Down}, WoT Client KeyWait, 1Joy9 ControlSend,, {vk20 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy1:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk54 Down}, WoT Client KeyWait, 1Joy1 ControlSend,, {vk54 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy3:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk31 Down}, WoT Client KeyWait, 1Joy3 ControlSend,, {vk31 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy4:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk32 Down}, WoT Client KeyWait, 1Joy4 ControlSend,, {vk32 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy2:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk33 Down}, WoT Client KeyWait, 1Joy2 ControlSend,, {vk33 Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy6:: { IfWinNotActive, WoT Client { SendMessage, 0x204, 1,,, WoT Client KeyWait, 1Joy6 SendMessage, 0x205, 1,,, WoT Client } } Return ;;;;;;;;;;;; 1Joy8:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk1B Down}, WoT Client KeyWait, 1Joy8 ControlSend,, {vk1B Up}, WoT Client } } Return ;;;;;;;;;;;; 1Joy7:: { IfWinNotActive, WoT Client { SendMessage, 0x06, 1,,, WoT Client ControlSend,, {vk4D Down}, WoT Client KeyWait, 1Joy7 ControlSend,, {vk4D Up}, WoT Client } } Return За основу взял управление WoT Xbox360: Добавил обработчик, так как если скрипт предназначенный для неактивного окна, работает в активном окне - вешается игра. Edited June 16, 2014 by kharlashkin 1 @ Link to comment Short link Share on other sites More sharing options...
Recommended Posts