Что нового

[Автоматизация] Действия скрипта на основании полученых данных из буфера памяти

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
Добрый день, друзья!
Недавно начал изучать autoit, сейчас пишу скрипт и возник вопрос. Искал по разным веткам, ни не нашел конкретно, что мне надо.
Вопрос в следующем. Какими командами или как лучше реализовать; что бы скрипт сам сделал снимок или сразу распознал часть экрана или графический элемент (это обычный шрифт цифр, но их скопировать нельзя) и на основании полученных цифр начал действовать. Т.е. нужно мне, выделить -скопировать -распознать -действовать на основе полученных данных их два больше или меньше определенной суммы.
Прочитал краткое руководство, сейчас более подробное изучаю, но пока не могу сам этого решить. Буду благодарен, за общие направления или куски скрипта. :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
цифры в окне какой программы?
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
[Автоматизация] Действия скрипта на основании полученых данных из буфера памяти

joiner сказал(а):
цифры в окне какой программы?

Забыл сказать, IE 11.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
EnekinSky
Информация секретна или вы скромничаете?

Исходный код страницы / ссылку на страницу. Может быть это флэш-объект? Тогда на него ссылку.
Иначе вам не смогут помочь.
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
[Автоматизация] Действия скрипта на основании полученых данных из буфера памяти

firex сказал(а):
EnekinSky
Информация секретна или вы скромничаете?

Исходный код страницы / ссылку на страницу. Может быть это флэш-объект? Тогда на него ссылку.
Иначе вам не смогут помочь.

Совсем нет, на два утверждения ваших. Это не флэш, браузерная игра (травиан). Все же дать ссылку? Но нужно регистрироваться там.
Я уже нашёл способ их скопировать, однако вторая часть моего вопроса актуальна, извлечь из буфера нужные цифры и на основании их следовать той логике которую я укажу.
Напишу поподробнее: Скрипт распознает сколько ресурсов и действует на основании функции, допустим больше 1000 - 1 вариант, а меньше 2 вариант.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
EnekinSky,
Не надо менять название темы в каждом посте.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
EnekinSky [?]
извлечь из буфера
Если вы имеете ввиду буфер обмена, то ( при условии, что он содержит текстовые данные ) вы можете поступить таким образом:
Код:
$iValue = Int( ClipGet() )
If $iValue > 1000 Then ...


Но скажу вам сразу - это ненадежный вариант. Лучше курите ветку:
http://autoit-script.ru/autoit3_docs/libfunctions/ (функции _IE* и примеры к ним)
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
firex сказал(а):
EnekinSky [?]
извлечь из буфера
Если вы имеете ввиду буфер обмена, то ( при условии, что он содержит текстовые данные ) вы можете поступить таким образом:
Код:
$iValue = Int( ClipGet() )
If $iValue > 1000 Then ...


Но скажу вам сразу - это ненадежный вариант. Лучше курите ветку:
http://autoit-script.ru/autoit3_docs/libfunctions/ (функции _IE* и примеры к ним)

Спасибо, это то что нужно, однако он копирует цифры с текстом, по другому там не получается. Каким образом можно сделать что бы он обращал внимание только на цифры, а то не реагирует, на эту команду "If $iValue > 1000 Then"
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
EnekinSky
Пример можете привести? Без него я могу посоветовать только такой вариант:

Код:
$iValue = Int( StringRegExpReplace( ClipGet(), "^.*(\d+).*$", "$1" ) )
If $iValue > 1000 Then ...
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
Действия скрипта на основании полученых данных из буфера памяти

firex сказал(а):
EnekinSky
Пример можете привести? Без него я могу посоветовать только такой вариант:

Код:
$iValue = Int( StringRegExpReplace( ClipGet(), "^.*(\d+).*$", "$1" ) )
If $iValue > 1000 Then ...

Могу. Вот, что он копирует "Древесина Производство древесины +25% 36.720" и только так, там гиф изображение. Нужно что бы он брал в расчет последнее цифровое значение, в данном случае 36.720. И так три разных значения, после которых нужно будет принять решение. Я всего нескольк дней начал изучать эту программу, если что то смешное пишу или в коде. Не смейтесь громко ;D. Я это делаю так:
Код:
MouseClickDrag ("left",738,202,812,202,10)
Send("^{INSERT}")
$iValue = Int( StringRegExpReplace( ClipGet(), "^.*(\d+).*$", "$1" ) )
If $iValue > 10000 Then
   MouseClickDrag ("left",831,202,890,202,10)
   Send("^{INSERT}")   $iValue = Int( StringRegExpReplace( ClipGet(), "^.*(\d+).*$", "$1" ) )
If $iValue > 10000 Then
	  MouseClickDrag ("left",916,202,980,202,10)
   Send("^{INSERT}")
   $iValue = Int( StringRegExpReplace( ClipGet(), "^.*(\d+).*$", "$1" ) )
   If $iValue > 10000 Then  MsgBox(4096,"","Просто тест")

   EndIf
EndIf


На привязку к разрешению можно не обращать внимание, есть свободный пк 24\7 там планирую держать этот скрипт.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
EnekinSky
Код:
MouseClickDrag( "left", 738, 202, 812, 202, 10)
Send( "^{INSERT}" )

If _GetValue() > 10000 Then
	MouseClickDrag ("left",831,202,890,202,10)
	Send("^{INSERT}")

	If _GetValue() > 10000 Then
		MouseClickDrag ("left",916,202,980,202,10)
		Send("^{INSERT}")

		If _GetValue() > 10000 Then
			MsgBox(4096,"","Просто тест")
		EndIf
	EndIf
EndIf

Func _GetValue()
	Local $aResult
	; ---
	$aResult = StringRegExp( ClipGet(), "(\d+\.?\d*)$", 3 )
	If UBound( $aResult ) = 1 Then _
		Return Round( $aResult[0], 9 )

	Return 0
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Мой вариант.
Код:
$vStr = 'Древесина Производство древесины +25% 36.720'
$vStr = StringRegExpReplace($vStr, '^.*\h', '')
If @extended = 1 Then
	$vStr = Number($vStr)
	ConsoleWrite($vStr & @TAB & VarGetType($vStr) & @LF)
Else
	ConsoleWrite('Error :(' & @LF)
EndIf
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
Действия скрипта на основании полученых данных из буфера памяти

firex сказал(а):
EnekinSky
Код:
MouseClickDrag( "left", 738, 202, 812, 202, 10)
Send( "^{INSERT}" )

If _GetValue() > 10000 Then
	MouseClickDrag ("left",831,202,890,202,10)
	Send("^{INSERT}")

	If _GetValue() > 10000 Then
		MouseClickDrag ("left",916,202,980,202,10)
		Send("^{INSERT}")

		If _GetValue() > 10000 Then
			MsgBox(4096,"","Просто тест")
		EndIf
	EndIf
EndIf

Func _GetValue()
	Local $aResult
	; ---
	$aResult = StringRegExp( ClipGet(), "(\d+\.?\d*)$", 3 )
	If UBound( $aResult ) = 1 Then _
		Return Round( $aResult[0], 9 )

	Return 0
EndFunc

Все заработало. Спасибо большое. Только могли бы вы объяснить, что в этой строчке означает цифра 3 "$aResult = StringRegExp( ClipGet(), "(\d+\.?\d*)$", 3 )"
Буду дальше разбираться!
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
OffTopic:
Любят люди изобретать велосипед. Для "Травиан" уже столько всевозможных ботов и помощников написано, что изобрести что-то новое просто сложно
 
Автор
EnekinSky

EnekinSky

Моцарт - Великий композитор!
Сообщения
8
Репутация
0
Действия скрипта на основании полученых данных из буфера памяти

edyapd сказал(а):
OffTopic:
Любят люди изобретать велосипед. Для "Травиан" уже столько всевозможных ботов и помощников написано, что изобрести что-то новое просто сложно

Хмм... да... 1\3 с вирусами, вторая кривая, третья платная. Или я не прав?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Re: Действия скрипта на основании полученых данных из буфера памяти

EnekinSky сказал(а):
Хмм... да... 1\3 с вирусами, вторая кривая, третья платная. Или я не прав?
OffTopic:
Не правы. Если есть возможность посмотреть исходники скриптов, работающих через greasemonkey, то какой смысл туда запихивать вредоностный код?
Я не против AutoIT :IL_AutoIt_1: Я за то, чтобы для каждой работы применялся подходящий инструмент!
 
Верх