Что нового

[Мышь, клавиатура] нажатие клавиш в неактивное окно Martial Empires

lirikmel

Продвинутый
Сообщения
226
Репутация
84
никак не могу заставить бота нажимать в неактивное окно игры...
Код:
$hWnd = WinGetHandle("Martial Empires", "")
$hCtrl = ControlGetHandle($hWnd, '', 'Button1')
ControlSend($hWnd, "", "", "{TAB}")

..не работает
команда Send в активном окне работает без проблемм
хотелось бы разобраться с DllCall
как будет выглядеть нажатие клавиши tab ?
61180935.jpg
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
[Мышь, клавиатура] нажатие клавиш в неактивное окно без ControlSend

никак не могу заставить бота нажимать в неактивное окно игры...
Код:
$hWnd = WinGetHandle("Martial Empires", "")
$hCtrl = ControlGetHandle($hWnd, '', 'Button1')
ControlSend($hWnd, "", "", "{TAB}")

..не работает
команда Send в активном окне работает без проблемм
хотелось бы разобраться с DllCall
как будет выглядеть нажатие клавиши tab ?
61180935.jpg
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: [Мышь, клавиатура] нажатие клавиш в неактивное окно без ControlSend

В следующий раз изображение заключайте в тег [spoiler].

По поводу вопроса, это у нас уже обсуждалось столько раз, что я добавил себе ссылку в "Мои закладки". Прочитайте следующую тему до конца.

*click*
 

spider_xr

Знающий
Сообщения
14
Репутация
7
ControlSend($hWnd, "", "", "{TAB}")
ты не тот хэндл посылаеш, контрол хэндл нашол но забыл заменить ? )))


ControlSend($hCtrl, "", "", "{TAB}")
так попробуй.


Добавлено:
Сообщение автоматически объединено:

вот тебе пример DllCall гдет тут нашол. я его малость упростил, сам вчера разберался (строки текста и каманды придется вводить отдельно(есть подобный код на PureBasic там команды отделяются [] но мне переделывать влом, если надо выложу))




Код:
; #FUNCTION# ====================================================================================================================
; Name...........: SimulKey
; Description ...: Simulate a Key-Send to a specified handle in the Background
; Author ........: Felix Lehmann
; Modified.......: If you modify this Script, please enter your name here
; Remarks .......: -
; Related .......: -
; Parameters ....: $hwnd = Specified Window to Send to
; ...............: $key = Key or String to Send (If String $string have to be enabled [see $string])
; ...............: $string = Set this to 1 If your "$key" is a string
; ...............: $state = Set this to 'up' or 'down' if u want a special event | Default is press the Key 1 Time
; ...............: $delay = The delay to hold the key down
; Return Values .: 1 = Done | -1 = Couldn't load user32.dll
; Link ..........; -
; ===============================================================================================================================
Func SimulKey($hWnd, $key, $delay = 10)
    ;//Open DLL (user32)
    $user32 = DllOpen('user32.dll')
    If $user32 = -1 Then
        SetError(-1, 1, -1)
    EndIf
	
	$comand = 0
	
    ;//Handle Special Keys
    Switch StringLower($key)
        Case 'enter'
            $WM_ENTER = 0x0d
            $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_ENTER, 'int', 0)
            $lParam = BitOR(BitShift($dCall[0], -16), 1)
			$comand = 1
        Case 'space'
            $WM_SPACE = 0x20
            $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_SPACE, 'int', 0)
            $lParam = BitOR(BitShift($dCall[0], -16), 1)
			$comand = 1
        Case 'tab'
            $WM_TAB = 0x09
            $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_TAB, 'int', 0)
            $lParam = BitOR(BitShift($dCall[0], -16), 1)
			$comand = 1
            ;//Handle Standard Keys
		Case 'F3'
            $WM_F3 = 0x72
            $dCall = DllCall($user32, 'int', "MapVirtualKey", 'int', $WM_F3, 'int', 0)
            $lParam = BitOR(BitShift($dCall[0], -16), 1)
			$comand = 1
;~ 			; можно накидать больше "Special Keys" (F1 - F9 соотведственно 0x70 - 0x78)
        Case Else
                $split = StringSplit($key, "")
                For $ctn = 1 To $split[0]
                    $split[$ctn] = Asc(StringLower($split[$ctn]))
                Next
                For $ctn = 1 To $split[0]
                    $dCall = DllCall($user32, 'int', "VkKeyScan", 'int', $split[$ctn])
                    $lParamAsc = DllCall($user32, 'int', "MapVirtualKey", 'int', $dCall[0], 'int', 0)
                    $lParam = BitOR(BitShift($lParamAsc[0], -16), 1)
                    $lUpParam = BitOR($lParam, 0xC0000000)
                    DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[0], 'int', $lParam)
                    Sleep($delay)
                    DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0101, 'int', $dCall[0], 'int', $lUpParam)
                    Sleep(100)
                Next
    EndSwitch
    
    If $comand = 1 Then
		$lUpParam = BitOR($lParam, 0xC0000000)
        DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[1], 'int', $lParam)
        Sleep($delay)
        DllCall($user32, 'int', "PostMessage", 'hwnd', $hWnd, 'int', 0x0100, 'int', $dCall[1], 'int', $lUpParam)
		$comand = 0
	EndIf
    DllClose($user32)
    Return 1
EndFunc   ;==>SimulKey


; пример
$hwnd = ControlGetHandle('Безымянный - Блокнот','' ,'Edit1' )

simulkey($hwnd, 'god job', 5 )
 

kry

Новичок
Сообщения
14
Репутация
4
lirikmel сказал(а):
никак не могу заставить бота нажимать в неактивное окно игры...
Код:
$hWnd = WinGetHandle("Martial Empires", "")
$hCtrl = ControlGetHandle($hWnd, '', 'Button1')
ControlSend($hWnd, "", "", "{TAB}")

..не работает
команда Send в активном окне работает без проблемм
хотелось бы разобраться с DllCall
как будет выглядеть нажатие клавиши tab ?
61180935.jpg

Ну что, сделал что хотел, тоже играю в MA , и то же хочу посылать клавиши в неактивное окно )
Если что-либо вышло просьба отпостить сюда.


Добавлено:
Сообщение автоматически объединено:

NEED HELP !!!
 
Верх