Что нового

Проблема с эмуляцией нажатия клавишь в ММОРПГ

MDSurgeon

Новичок
Сообщения
2
Репутация
0
Здравствуйте, Уважаемые форумчане!
Занимаюсь скриптом на рыбалку в Блек Дезерт, и на одном компе скрипт работает исправно (на рабочем ноуте). Захотел поставить скрипт на домашнюю машину-беда. не эмулирует клавиши. И там и там стоит W7 x64. UAC отключил. Autoit одинаковой версии (последний) запускается с правами админа, игра запускается правами админа.
Итак. Есть задача нажимать R, а затем пробел при распознавании определенного пиксела. Скрипт выглядит так
Код:
#RequireAdmin
;Press Esc to terminate script, Pause/Break to "pause"
#include <AutoItConstants.au3>
Opt("SendKeyDownDelay", 55)
HotKeySet("{PAUSE}", "TogglePause")
$dll = DllOpen("user32.dll")
AutoItSetOption("CaretCoordMode", 1)
AutoItSetOption("MouseCoordMode", 1)
AutoItSetOption("PixelCoordMode", 1)
$gap = 49
$stick = 0
;;;; Body of program would go here;;;;
Sleep(3000)
While 1
   $aCoord = PixelSearch(1521, 134, 1531, 142, 0xEB0000, 12, 1)
   If not @error Then
	  ;TrayTip("t", "FOUND RED", 2000)
	  Send("i")
	  Sleep(2000)
	  If($stick<=8) Then
	  ;TrayTip("t", $stick & " ANOTHER STICK MOUSE MOVE", 2000)
	  MouseMove(1530+($gap*$stick), 350)
	  Sleep(1000)
	  MouseDown($MOUSE_CLICK_RIGHT)
	  Sleep(100)
	  MouseUp($MOUSE_CLICK_RIGHT)
	  Sleep(1000)
	  $stick = $stick + 1
	  ;TrayTip("t", $stick & "new STICK MOUSE MOVE", 2000)
	  EndIf
	  Send("i")
	  Sleep(2000)
   EndIf
   $aCoord = PixelSearch(961, 190, 965, 195, 0xD6EFFE, 10, 1)
   If not @error Then
   ;TrayTip("t", "NO SLOT", 1000)
	  Sleep(1000+Random(0, 80, 1))
	  Send("{SPACE}")
	  Sleep(1000+Random(0, 80, 1))
   EndIf
   $aCoord = PixelSearch(967, 227, 973, 234, 0xC4BEBE, 10, 1)
   If not @error Then
	  TrayTip("t", "pressed R", 2000)
	  Sleep(1000+Random(0, 80, 1))
	  Send("r")
	  Sleep(1000+Random(0, 80, 1))
	  Send("{SPACE} ")
	  Sleep(6000+Random(0, 80, 1))
   EndIf
   Sleep(10)
   WEnd
;;;;;;;;

Func IsPressed($hexKey)
   Local $aR, $bO
   $hexKey = '0x' & $hexKey
   $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey)
   If Not @error And BitAND($aR[0], 0x8000) = 0x8000 Then
      $bO = 1
   Else
      $bO = 0
   EndIf
   Return $bO
EndFunc  ;==>_IsPressed


Func TogglePause()
    $Paused = NOT $Paused
    While $Paused
    WEnd
EndFunc

Как видите, скрипт проще некуда. Проблема в том, что скрипт не прожимает R, а так же любые другие клавиши на клавиатуре, кроме пробела, контрола и т.д.
Интересный факт: в игру скрипт отправляет, или пытается отправлять R, я это понял, когда внутри игры открыл чат. В чат проходили и пробел и R, однако кроме как в чат ничего не идет.

Уважаемые форумчане! Пожалуйста, дайте наводку, куда можно мыслить?
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
MDSurgeon
Проверьте раскладку клавиатуры по умолчанию - должна быть английская. И отключите Punto Switcher (при наличии).
 
Верх