|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
[Архив - Часть 1.3] AutoIt скрипты
|
Старожил Сообщения: 250 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь. Вот что нужно сделать последовательно: 1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1 2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1 3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n) 4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5 5) сохраняем все изменения и выводим отчёт о проделанной работе :-) Заранее благодарен. |
|
Отправлено: 05:05, 03-12-2006 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Я тоже игрался с msagent-ом. Мои наблюдения:
#include <File.au3> #include <Misc.au3> $Path=@WindowsDir&"\MSAGENT\CHARS\" $figures=_FileListToArray($Path,"*.acs",1) ;демонстрация _msagent("Привет! Это просто тест") Func _msagent($msg) If IsArray($figures) Then $P = $Path & $figures[Random(1,$figures[0],1)] $fig = StringMid($P,StringInStr($P,'\',0,-1)+1) $fig = StringLeft($fig,StringInStr($fig,".acs",0,-1)-1) If FileExists($P) Then $AgentControl = ObjCreate("Agent.Control.1") $SinkObject = ObjEvent($AgentControl, "event_") If Isobj($AgentControl) Then $AgentControl.Connected = True $AgentControl.Characters.Load($fig, $P) With $AgentControl.Characters($fig) .Show Switch StringLower($fig) Case 'offcat' .Play("Greeting") .Play("RestPose") Case 'dot' .Play("Greeting") .Play("RestPose") Case 'f1' .Play("Greeting") .Play("RestPose") Case 'logo' .Play("Greeting") .Play("RestPose") Case 'rocky' .Play("Greeting") .Play("RestPose") Case 'clippit' .Play("Congratulate") .Play("RestPose") Case 'mnature' .Play("Congratulate") .Play("RestPose") Case 'qmark' .Play("Welcome") .Play("RestPose") Case 'angel' .Play("Halo") .Play("Glow") .Play("Glowoff") Case 'blonde fem a' .Play("Blink") .Play("Wink") .Play("RestPose") Case 'candy' .Play("Blink") .Play("RestPose") Case 'max' .Play("Blink") .Play("RestPose") Case 'paige' .Play("Pointleftreturn") Case 'reaper' .Play("Smile") .Play("RestPose") Case 'scientist' .Play("Blackboard") .Play("Entropy") .Play("RestPose") Case 'sharky' ; Case Else .Play("Greet") .Play("RestPose") EndSwitch While _KeyPressed()=0 .MoveTo(Random(180,@DesktopWidth-180,1), Random(260,@DesktopHeight-260,1)) .Speak($msg) WEnd .Hide .StopAll Endwith $AgentControl.Characters.Unload($fig) EndIf EndIf EndIf EndFunc Func _KeyPressed() Local $j Local $dll = DllOpen("user32.dll") For $j = 01 to 20 If _IsPressed($j, $dll) Then DllClose($dll) Return 1 EndIf Next DllClose($dll) Return 0 EndFunc |
------- Отправлено: 17:16, 12-03-2007 | #271 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Sanja Alone
Цитата:
![]() With $AgentControl.Characters($fig) .Show Switch StringLower($fig) Case 'offcat', 'dot', 'logo', 'rocky' $PlayArr = StringSplit("Greeting|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'clippit', 'mnature' $PlayArr = StringSplit("Congratulate|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'qmark' $PlayArr = StringSplit("Welcome|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'angel' $PlayArr = StringSplit("Halo|Glow|Glowoff", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'blonde fem a' $PlayArr = StringSplit("Blink|Wink|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'candy', 'max' $PlayArr = StringSplit("Blink|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'paige' .Play("Pointleftreturn") Case 'reaper' $PlayArr = StringSplit("Smile|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'scientist' $PlayArr = StringSplit("Blackboard|Entropy|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) Case 'sharky' ; Case Else $PlayArr = StringSplit("Greet|RestPose", "|") .Play($PlayArr[Random(1, $PlayArr[0], 1)]) EndSwitch While _KeyPressed()=0 .MoveTo(Random(180,@DesktopWidth-180,1), Random(260,@DesktopHeight-260,1)) .Speak($msg) WEnd .Hide .StopAll Endwith ![]() -А что, при использовании Switch учитывается регистр букв? (я про StringLower). Цитата:
Цитата:
Кстати, в системе есть более одного персонажа, благодаря этой статье, я значительно улучшил скрипт - Я написал функцию которая собирает в массив пути к этим персонажам (если они найдены) - _FiguresListToArray(), и затем на основе этих путей, методом случайного перебора (Random естественно), вызывается персонаж... А также удалось осуществить “убийство” персонажа при любой активности пользователя (это я реализовал на основе наводок твоего примера - спасибо). У меня такие вопросы: 1. Где можно узнать список действий определённого персонажа? (желательно средствами AutoIt'а выявить список действии для указанного персонажа). 2. Как можно, и можно ли вообще, регулировать скорость произношения речи? (или хотябы скорость печатания букв). Вот новый скрипт - Детектер лени - Я пока не знаю какой из существующих персонажей что умеет делать, поэтому присвоил им всем одинаковые действия (ошибку вроде не выдаёт) - можно было ещё перебирать оффисные персонажи (как и в статье указанно), но я посчитал это лишнее, хватит пока и 4-ёх ![]() HotKeySet("^e", "Quit") TraySetIcon("shell32.dll", 160) TraySetToolTip("Laziness Detecter (!)") Dim $MessagesArr[11] $MessagesArr[0] = 10 $MessagesArr[1] = "You are been lazy for a long time <%n>" $MessagesArr[2] = "This is enough, start doing something >:( - you are lazy to much (%n)" $MessagesArr[3] = "Hello!? Any one is home? why you are so lazy so long time? <%n> do somthing!" $MessagesArr[4] = "Hi! Don't you fill like cow? Laziness is reason number 1 of why people die" $MessagesArr[5] = "It's been over a <%n> time sense you touch your computer, touch it now!" $MessagesArr[6] = "I can not wait for you so long (%n), I am going to shutdown myself.... beep.. beeep.. beeeeeep" $MessagesArr[7] = "Hey man, are you forgot about me? Fine! I want to divorced" $MessagesArr[8] = "You have no check your email for <%n> time, maybe there something intersteing?" $MessagesArr[9] = "There is a virus on your computer! (it exists there for a long time <%n>) perform virus checking immediately!" $MessagesArr[10] = "Hi! What's up dog? Don't pay attention; I am just stupid character that doesn't need attention! >:(" $MessagesFile = "LazyMessages.dat" If FileExists($MessagesFile) And FileRead($MessagesFile) <> "" Then $MessagesArr = StringSplit(FileRead($MessagesFile), @LF) $Idle = 0 $TotalTime = 0 $MinLaziness = 10 $MaxLaziness = 60 $LazyLimit = Random($MinLaziness, $MaxLaziness, 1) $TimeStamp = TimerInit() AdlibEnable("CheckLaziness", 10) While 1 $Idle = _IdleWaitCommit(0) TraySetIcon("shell32.dll", 160) TrayTip("", "", 0) $TimeStamp = TimerInit() $Idle = 0 $TotalTime = 0 WEnd Func CheckLaziness() $TimeDiff = Round(TimerDiff($TimeStamp)/1000) If $TimeDiff > $LazyLimit And $Idle = 0 Then TraySetIcon("shell32.dll", 111) $TotalTime += $TimeDiff $LazyTime = _SecsToTime($TotalTime, ":") $TextToSay = StringReplace($MessagesArr[Random(1, $MessagesArr[0], 1)], "%n", $LazyTime) $SleepTime = Round((StringLen($TextToSay)/7)*1000) If StringLen($TextToSay) < 7 Then $SleepTime = 5000 CharacterMsg($TextToSay, Random(100, @DesktopWidth-100, 1), Random(10, @DesktopHeight-150, 1), $SleepTime) If @error Then TrayTip("You are lazy", $TextToSay, 5, 1) $LazyLimit = Random($MinLaziness, $MaxLaziness, 1) $TimeStamp = TimerInit() EndIf If $TimeDiff >= ($LazyLimit/2) Then TrayTip("", "", 0) If $TimeDiff >= 5 And $LazyLimit > 5 Then TraySetIcon("shell32.dll", 111) EndFunc Func _SecsToTime($iTicks, $Delim) If Number($iTicks) >= 0 Then $iHours = Int($iTicks / 3600) $iTicks = Mod($iTicks, 3600) $iMins = Int($iTicks / 60) $iSecs = Round(Mod($iTicks, 60)) If StringLen($iHours) = 1 Then $iHours = "0" & $iHours If StringLen($iMins) = 1 Then $iMins = "0" & $iMins If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs $Time = $iHours & $Delim & $iMins & $Delim & $iSecs Return $Time Else SetError(1) Return 0 EndIf EndFunc Func _IdleWaitCommit($idlesec, $TimeInit=0, $SleepTime=0) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(100) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) If $SleepTime <> 0 And TimerDiff($TimeInit) >= $SleepTime Then ExitLoop Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func CharacterMsg($TextToSay, $MovexX=200, $MoveY=200, $Sleep=5000) If $TextToSay = "" Then $TextToSay = "Oops! there was an Error!" $FiguresArr = _FiguresListToArray() If Not IsArray($FiguresArr) Then Return SetError(1) $RandomFigure = Random(1, $FiguresArr[0], 1) $FigurePath = $FiguresArr[$RandomFigure] $FigureName = StringTrimRight(StringRegExpReplace($FigurePath, '^.*\\', ''), 4) If Not FileExists($FigurePath) Then Return SetError(2) $AgentControl = ObjCreate("Agent.Control.1") $SinkObject = ObjEvent($AgentControl, "event_") If Not Isobj($AgentControl) Then Return SetError(3) $AgentControl.Connected = True $AgentControl.Characters.Load($FigureName, $FigurePath) $hCharacter = $AgentControl.Characters($FigureName) With $hCharacter .MoveTo($MovexX, $MoveY, 0) .Show .Speak($TextToSay) .Play("Greet") .Play("RestPose") $SleepInit = TimerInit() While TimerDiff($SleepInit) < $Sleep If _IdleWaitCommit(0, $SleepInit, $Sleep) <> 0 Then ExitLoop WEnd .Hide .StopAll EndWith $AgentControl.Characters.Unload($FigureName) EndFunc Func _FiguresListToArray() $FiguresPath1 = @WindowsDir & "\MSAGENT\CHARS\" $FiguresPath2 = @WindowsDir & "\srchasst\chars\" If Not FileExists($FiguresPath1) And Not FileExists($FiguresPath2) Then Return SetError(1) Local $FiguresArr[1] ;If FileExists($FiguresPath1 & "*.acs") Then Local $FigureFind1 = FileFindFirstFile($FiguresPath1 & "*.acs") If $FigureFind1 <> -1 Then While 1 $CurrentFigure = FileFindNextFile($FigureFind1) If @error Then ExitLoop ReDim $FiguresArr[UBound($FiguresArr)+1] $FiguresArr[0] += 1 $FiguresArr[UBound($FiguresArr)-1] = $FiguresPath1 & $CurrentFigure WEnd EndIf FileClose($FigureFind1) ;EndIf ;If FileExists($FiguresPath2 & "*.acs") Then Local $FigureFind2 = FileFindFirstFile($FiguresPath2 & "*.acs") If $FigureFind2 <> -1 Then While 1 $CurrentFigure = FileFindNextFile($FigureFind2) If @error Then ExitLoop ReDim $FiguresArr[UBound($FiguresArr)+1] $FiguresArr[0] += 1 $FiguresArr[UBound($FiguresArr)-1] = $FiguresPath2 & $CurrentFigure WEnd EndIf FileClose($FigureFind2) ;EndIf Return $FiguresArr EndFunc Func Quit() Exit EndFunc ![]() |
|||
------- Последний раз редактировалось Creat0R, 14-03-2007 в 18:00. Причина: Небольшая поправка в коде Отправлено: 22:53, 12-03-2007 | #272 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Creat0R
Цитата:
![]() Цитата:
Цитата:
![]() Цитата:
|
||||
------- Отправлено: 16:47, 14-03-2007 | #273 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать привет, в общем такая проблемка, нужно чтобы в этом скрипте перед Send ( 'Иванов' )
раскладка менялась на русскую а перед Send ( 'Ivanov@f57.nalog.ru' ) на англискую заранее спасибо ; Автоматическое заполнение квитанции ; ======================================== Run ( 'fap2006.exe' ) WinWaitActive ( 'Редактор актов приёма ПО' ) WinWaitActive ( 'Открыть' ) WinWaitActive ( 'Редактор актов приёма ПО', 'Акт приёма' ) Send ( '{Tab}' ) Send ( '9977' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( 'Иванов' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( 'Александр' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( 'Сергеевич' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( '913-08-24' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( 'Ivanov@f57.nalog.ru' ) AutoItSetOption ( "SendKeyDelay", 20 ) Exit |
Последний раз редактировалось Sanja Alone, 15-03-2007 в 11:35. Причина: Добавление тэга code Отправлено: 17:29, 14-03-2007 | #274 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Sancho111
FAQ -> Как с помощью AutoIt сменить раскладку клавиатуры -> WinAPI-метод |
------- Отправлено: 19:01, 14-03-2007 | #275 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Sanja Alone
Ты не поверишь, но я на офф. сайте нашел библиотеку для управления персонажами MSAgent! Там есть функция которая возвращает массив всех действии для заданного персонажа, и даже больше, там есть функции позволяющие добавлять/удалять действия в контекстное меню персонажа (по правой кнопке мышки на нём). В общем я в эйфории! ![]() Цитата:
![]() А функция для получения списка действии персонажа вот (довольно проста оказалась) : $oCharacter естественно должен передаваться как объект загрузки персонажа. |
|
------- Отправлено: 00:14, 15-03-2007 | #276 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
|
||
------- Отправлено: 11:25, 15-03-2007 | #277 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать ; Автоматическое заполнение квитанции ; ======================================== ;клавиши (разрешенные клавиши: 1,2,3,4,5,6,7,8,9,0,~,Ё - знак ударения) $vrtkey='1,2' ;модификаторы клавиш (разрешены: '05' - Ctrl;) $keymod='05,05' ;коды языков (можете посмотреть в разделе "Appendix" руководства по AutoIt или в вышеприведенном примере) $lang='0409,0419' ;включаем возможность раздельного переключения языков (англ. - Ctrl+Shift+1; рус. - Ctrl+Shift+2;) _EnableLangSwitching($vrtkey,$keymod,$lang) Run ( 'fap2006.exe' ) WinWaitActive ( 'Редактор актов приёма ПО' ) WinWaitActive ( 'Открыть' ) WinWaitActive ( 'Редактор актов приёма ПО', 'Акт приёма' ) Sleep(500) ;переключение на рус. Send('^+2') Send ( '{Tab}' ) Send ( '9977' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( 'Иванов' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( 'Александр' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( 'Сергеевич' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) Send ( '913-08-24' ) AutoItSetOption ( "SendKeyDelay", 20 ) Send ( '{Tab}' ) ;переключение на англ. Send('^+1') Send ( 'Ivanov@f58.nalog.ru' ) AutoItSetOption ( "SendKeyDelay", 20 ) ;отключение возможности раздельного переключения языков (удаление из реестра внесенных туда веток) ;в кач-ве аргумента укажите к-во языков, заданное выше в переменной $lang (для данного примера. - 3) _DisableLangSwitching(3) Func _EnableLangSwitching($key,$mod,$lng) $constpart="HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\000001" $akey=StringSplit($key,',',1) $amod=StringSplit($mod,',',1) $alng=StringSplit($lng,',',1) If UBound($akey,1)=UBound($amod,1) and UBound($akey,1)=UBound($alng,1) Then For $i=1 To UBound($alng,1)-1 RunWait('REG ADD "' & $constpart & StringFormat('%02s"',$i-1) & ' /v "Virtual Key" /t REG_BINARY /d ' & Hex(Asc($akey[$i]),2) & '000000 /f','',@SW_HIDE) RunWait('REG ADD "' & $constpart & StringFormat('%02s"',$i-1) & ' /v "Key Modifiers" /t REG_BINARY /d ' & $amod[$i] & 'c00000 /f','',@SW_HIDE) RunWait('REG ADD "' & $constpart & StringFormat('%02s"',$i-1) & ' /v "Target IME" /t REG_BINARY /d ' & StringRight($alng[$i],2)&StringLeft($alng[$i],2)&StringRight($alng[$i],2)&StringLeft($alng[$i],2) & ' /f','',@SW_HIDE) Next SetError(0) Return(1) Else SetError(1) Return(0) EndIf EndFunc Func _DisableLangSwitching($count) $constpart="HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\000001" For $i=0 To $count-1 RunWait('REG DELETE "' & $constpart & StringFormat('%02s"',$i) & ' /f','',@SW_HIDE) Next EndFunc Exit $akey=StringSplit($key,',',1) $akey=^ERROR Error: Incorect number of parametrs in function call |
Последний раз редактировалось Sanja Alone, 15-03-2007 в 23:22. Причина: Добавление тэга code Отправлено: 14:40, 15-03-2007 | #278 |
Ищу Человека… Сообщения: 420
|
Профиль | Сайт | Отправить PM | Цитировать Sancho111
Я же говорил о методе "WinAPI" Run ( 'fap2006.exe' ) AutoItSetOption ( "SendKeyDelay", 20 ) WinWaitActive ( 'Редактор актов приёма ПО' ) WinWaitActive ( 'Открыть' ) WinWaitActive ( 'Редактор актов приёма ПО', 'Акт приёма' ) $hWnd = WinGetHandle ( 'Редактор актов приёма ПО', 'Акт приёма' ) Send ( '{Tab}' ) Send ( '9977' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) Send ( '{Tab}' ) _SetKeyboardLayout("00000419", $hWnd) Send ( 'Иванов' ) Send ( '{Tab}' ) Send ( 'Александр' ) Send ( '{Tab}' ) Send ( 'Сергеевич' ) Send ( '{Tab}' ) Send ( '913-08-24' ) Send ( '{Tab}' ) _SetKeyboardLayout("00000409", $hWnd) Send ( 'Ivanov@f57.nalog.ru' ) Func _SetKeyboardLayout($sLayoutID, $hWnd) Local $WM_INPUTLANGCHANGEREQUEST = 0x50 Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0) DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret[0]) EndFunc |
------- Отправлено: 23:15, 15-03-2007 | #279 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Спасибо за код, но возникла следущая ошибочка
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0) Local $ret =^ERROR Error Uknown Function name |
Отправлено: 10:05, 16-03-2007 | #280 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[архив - Часть 2] AutoIt скрипты | Vadikan | AutoIt | 985 | 21-01-2008 09:58 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|