Что нового

[Данные, строки] Редактирование строки для передачи в Send()

diabloff

Новичок
Сообщения
9
Репутация
1
Здравствуйте, уважаемые пользователи Autoit!

Понадобилось тут давеча написать программу для отправки случайного сообщения, взятого из текстового файла .
Основную программу написал почти за минуту, но вот незадача: функция send() не воспринимает (точнее, воспринимает как нажатие клавиш-модификаторов) некоторые символы, а именно: !, #, +, ^, {, }. Их нужно передавать, используя {} для изоляции.
С первыми четырьмя проблем не возникло, но вот { и } загнали меня в тупик из-за моего неумения работать с регулярными выражениями. :stars:
Поиск не дал результатов.
Помогите, пожалуйста.
Код прилагаю.


Код:
$THotKey = "{PAUSE}"
$Filename =  'sayit.dat'
$Tpause = 5
$Pre = ''
$Post = '{enter}'

HotKeySet($THotKey,"SendText")
global $lines [0]
global $line =  ''


$File = fileopen($Filename,8)
#Region изоляция спецсимволов
Do
   $line = FileReadLine($File)
   if $line <> '' then
    $line=StringReplace($line,"!","{!}")
	$line=StringReplace($line,"#","{#}")
	$line=StringReplace($line,"+","{+}")
	$line=StringReplace($line,"^","{^}")
    ReDim $lines[UBound($lines) + 1]
    $lines[UBound($lines) - 1] = $line
   endif
Until @error=-1
#EndRegion


Global $n=UBound($lines)-1

While 1
	sleep(200)
WEnd


Func SendText()
	  $i = Random(0,$n,1)
		Send($Pre)
		sleep($Tpause)
		Send($lines[$i])
		sleep($Tpause)
		Send($Post)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
diabloff,
У функции
Код:
Send()
Есть флаг 1, используйте его.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
diabloff [?]
С первыми четырьмя проблем не возникло, но вот { и } загнали меня в тупик из-за моего неумения работать с регулярными выражениями.

Как вариант используя регулярное выражение:
Код:
Local $sKeys = "^+!##", $sResult = StringRegExpReplace( $sKeys, "([\+\^\!\#])", "{$1}" )
ConsoleWrite( $sResult & @CRLF )
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
diabloff
Замените все StringReplace из своего примера на это:
Код:
$line = StringRegExpReplace($line, '(?!\t)([\!\#\^\+\{\}])','{\1}')
$line = StringReplace($line, '\t', '{TAB}')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
firex, Z_Lenar,
Зачем делать лишние телодвижения?
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
madmasles
Судя по названию темы может понадобится передача комбинаций вида "{SHIFTDOWN}, {ALT}..."
Жду ответа от diabloff
 
Автор
D

diabloff

Новичок
Сообщения
9
Репутация
1
Z_Lenar сказал(а):
madmasles
Судя по названию темы может понадобится передача комбинаций вида "{SHIFTDOWN}, {ALT}..."
Жду ответа от diabloff

Не, нужно просто текст передавать, просто возможны смайлы по типу }:-D или ^_^ , возможна такая гадость, что } изменится не в {}}, а во что-то по типу {{}}}{}
Спецклавиши передаются в начале и в конце ($Pre и $Post )

Если я правильно понял, то вот так
Код:
StringRegExpReplace( $sKeys, "([\+\^\!\#\{\}])", "{$1}" )

Как раз решит мою задачу

madmasles сказал(а):
diabloff,
У функции
Код:
Send()
Есть флаг 1, используйте его.
Спасибо, я даже не подумал об этом, весь мануал send-а несколько раз перечитал, не обратил внимания :stars:! Какой я невнимательный :-[

Огромное всем спасибо!
 
Верх