Что нового

Вставить символ в действие скрипта.

jufas222

Знающий
Сообщения
93
Репутация
5
Версия AutoIt: v3

Описание: Данный скрипт должен коннектится к серверу, но у меня возникла проблема, я не могу поставить двоеточие.
Поставьте пожалуйста двоеточие (я указал где нужно в скрипте) и если это возможно сделайте скрипт короче, и объясните каждую строчку, что бы в дальнейшем я мог поставить другие - нужные мне символы.

P.S. Если не сложно напишите (по подробней) как нажать клавишу NUM 5 в свернутом окне.




Код:
$aWinList = WinList('Counter-Strike')
$pid = WinGetProcess("Counter-Strike")
For $i = 1 To $aWinList[0][0] Step +1
    If WinGetProcess($aWinList[$i][1]) = $Pid Then
		Sleep (1000)
		ControlSend($aWinList[$i][1], '', '', '{ё}') ;консоль открывается
		Sleep (300)
		ControlSend($aWinList[$i][1], '', '', '{c}') ;connect
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{o}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{n}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{n}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{e}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{c}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{t}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{Space}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{6}')   ;62.122.213.23:27283
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{.}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{1}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{.}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{1}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{3}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{.}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{3}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{}')   ;Нужно поставить двоеточие
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{7}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{2}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{8}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{3}')
		Sleep (100)
		ControlSend($aWinList[$i][1], '', '', '{ENTER}')
		ExitLoop
    EndIf
 Next
 

Nelsy

Знающий
Сообщения
35
Репутация
8
как вариант.
Код:
$aWinList = WinList('Counter-Strike')
$pid = WinGetProcess("Counter-Strike")
For $i = 1 To $aWinList[0][0] Step +1
    If WinGetProcess($aWinList[$i][1]) = $Pid Then
        Sleep (1000)
        ControlSend($aWinList[$i][1], '', '', '{ё}') ;консоль открывается
        Sleep (300)
        ControlSend($aWinList[$i][1], '', '', 'connect 2.122.213.23:27283',1)
			; флаг 1 - raw режим, а значит это что строка отправляется такой какая она есть. По умолчанию флаг 0
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{ENTER}')
        ExitLoop
    EndIf
 Next

Отправить NUM5:
Код:
ControlSend($aWinList[$i][1], '', '', '{NUMPAD5}') ; взято из справки по команде send()
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Nelsy, к сожалению, скрипт данный вами мне не помог, он вписывает connect 2.122.213.2327283, то есть без двоеточия.

Viktor 1703, Ваша команда работает, но дело в том что это планируется делать в свернутом окне игры (не активном). Вы бы не могли переделать скрипт так, что бы символ ":" вводился в свернутое окно.
P.S. Дайте пожалуйста ссылку где посмотреть команды всех символов, и как осуществить нажатие NUM клавиш, если у вас это не в голове)
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ещё как вариант

Код:
#include <WinAPIEx.au3>

ControlSendFormat(WinGetHandle('[ACTIVE]'), '', '', ':')

Func ControlSendFormat($hWnd, $sText = '', $iCtrl = '', $sSimbol = '')
    Switch Hex(_WinAPI_GetKeyboardLayout($hWnd), 4)
	    Case 0409
		    If ($sSimbol = ':') Then Return ControlSend($hWnd,  $sText, $iCtrl, '+{Ж}')
		Case 0419
			If ($sSimbol = ':') Then Return ControlSend($hWnd,  $sText, $iCtrl, '+{6}')
	EndSwitch
EndFunc

Код:
#include <WinAPIEx.au3>

ControlSendFormat(WinGetHandle('[ACTIVE]'), '', '', ':')

Func ControlSendFormat($hWnd, $sText = '', $iCtrl = '', $sSimbol = '')
	Local $sKey = ''
	
    Switch Hex(_WinAPI_GetKeyboardLayout($hWnd), 4)
	    Case 0409
		    If ($sSimbol = ':') Then $sKey = '+{Ж}'
		Case 0419
			If ($sSimbol = ':') Then $sKey = '+{6}'
	EndSwitch
			
	Return ControlSend($hWnd,  $sText, $iCtrl, $sKey)		
EndFunc

Дайте пожалуйста ссылку где посмотреть команды всех символов, и как осуществить нажатие NUM клавиш, если у вас это не в голове)

Код:
...
Send('{NUMPAD0}')
Send('{NUMPAD1}')
Send('{NUMPAD2}')
...
ControlSend(WinGetHandle('[ACTIVE]'), '', '', '{NUMPAD0}')
ControlSend(WinGetHandle('[ACTIVE]'), '', '', '{NUMPAD1}')
ControlSend(WinGetHandle('[ACTIVE]'), '', '', '{NUMPAD2}')
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Я не понимаю куда нужно вставить код который вы мне дали, измените пожалуйста мой скрипт, добавив в него ваш скрипт.
P.S. если я правильно понял можно вместо "ж" и "6" писать любые другие сочетания кнопок относящихся к символам?
P.S.S. данные о NUM клавишах разные, но по функции одинаковы, они по прежнему нажимаются в активном окне, а не в окне которое я им задал.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
#include <WinAPIEx.au3>

$aWinList = WinList('Counter-Strike')
$pid = WinGetProcess("Counter-Strike")
For $i = 1 To $aWinList[0][0] Step +1
    If WinGetProcess($aWinList[$i][1]) = $Pid Then
        Sleep (1000)
        ControlSend($aWinList[$i][1], '', '', '{ё}') ;консоль открывается
        Sleep (300)
        ControlSend($aWinList[$i][1], '', '', '{c}') ;connect
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{o}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{n}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{n}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{e}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{c}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{t}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{Space}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{6}')   ;62.122.213.23:27283
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{.}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{1}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{.}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{1}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{3}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{.}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{3}')
        Sleep (100)
		ControlSendFormat($aWinList[$i][1], '', '', ':')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{7}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{2}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{8}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{3}')
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{ENTER}')
        ExitLoop
    EndIf
 Next

Func ControlSendFormat($hWnd, $sText = '', $iCtrl = '', $sSimbol = '')
	Local $sKey = ''
	
    Switch Hex(_WinAPI_GetKeyboardLayout($hWnd), 4)
	    Case 0409
		    If ($sSimbol = ':') Then $sKey = '+{Ж}'
		Case 0419
			If ($sSimbol = ':') Then $sKey = '+{6}'
	EndSwitch
			
	Return ControlSend($hWnd,  $sText, $iCtrl, $sKey)		
EndFunc


P.S. если я правильно понял можно вместо "ж" и "6" писать любые другие сочетания кнопок относящихся к символам?

Да, но учтите что символ : на русском выглядит SHIFT+6, а на английской раскладке SHIFT+Ж, при добавлении нового символа в функцию - нужно учитывать обе раскладки.
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
http://s017.radikal.ru/i418/1206/ef/dc4a74379a70.jpg

Это когда я запускаю скрипт.



http://s57.radikal.ru/i157/1206/5d/7edd9535cbc1.jpg


А это когда я запускаю скрипт в SciTE
 
Автор
J

jufas222

Знающий
Сообщения
93
Репутация
5
Скачал, кинул, спасибо.

Когда я запускаю скрипт (при этом в игре стоит кириллица) он пишет код как и раньше без ":", но если я поменяю расклад клавиатуры на английский, то пишется / вместо точек (это легко исправить, я знаю и сам ) и пишется вместо ":", ";"


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

Nelsy. Так, как ваш скрипт прописывал в консоль цифры с точками, но без двоеточия, я попробывал сделать чуть - чуть по другому, и у меня получилось, спасибо.

Сейчас скрипт выглядет вот так:

Код:
$aWinList = WinList('Counter-Strike')
$pid = WinGetProcess("Counter-Strike")
For $i = 1 To $aWinList[0][0] Step +1
    If WinGetProcess($aWinList[$i][1]) = $Pid Then
		Sleep (1000)
        ControlSend($aWinList[$i][1], '', '', '{ESC}')
		Sleep (1000)
        ControlSend($aWinList[$i][1], '', '', '{ё}') ;консоль открывается
        Sleep (1000)
        ControlSend($aWinList[$i][1], '', '', 'connect 62.122.213.23',1)
		ControlSend($aWinList[$i][1], '', '', ':',1)
		ControlSend($aWinList[$i][1], '', '', '27283',1)
        Sleep (100)
        ControlSend($aWinList[$i][1], '', '', '{ENTER}')
        ExitLoop
    EndIf
 Next
 
Верх