Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Закрытая тема
Настройки темы
[Архив - Часть 1.3] AutoIt скрипты

Старожил


Сообщения: 250
Благодарности: 16

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе 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

 

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
To CreatOR
К сожалению это единственный вариант, который приходит в голову и мне. Но это уже не имеет никакого отношения к автоматизации, ибо необходим универсальный способ, а на разных машинах с различным набором установленных программ
координаты конкретной иконки будут однозначно отличаться !?...

Вопрос № 2.

Как определить какая в текущий момент раскладка клавиатуры RU or EN и как переключать раскладку клавиатуры, не применяя эмуляцию нажатия клавиш ?

Наверняка не сложный вопрос, просто нет времени разбираться. Извините, если эти вопросы уже обсуждались в форуме. Хочется услышать именно ответы.
Спасибо.

Отправлено: 18:20, 20-01-2007 | #151



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
почему в справке нет (у меня) описании команд StringRegExp, StringRegExpReplace?
В папке AutoIt я нашёл 4 файла справки, все шли вместе с дистрибутивом v3.2.2.0
AutoIt, AutoIt3, AutoIt3Help, и наконец UDFs3 - (User Defined Function). В первых трёх, есть описания этих команд (у меня).
Цитата:
А если работа Vbscript нарушена в системе?
В этом плане, полностью с тобой согласен, любой объектно-ориентированный язык зависим от библиотек, их регистрации в системе и т.д. Но думаю что написанный на AutoIt'е код, так же не защищён от различных неприятностей, особенно если использует внешние dll библиотеки. Например применение функций ObjCreate() и DllCall() я считаю одинаково ненадёжным. С другой стороны... если отказаться от их использования, AutoIt будет выглядеть пустым.
Цитата:
по поводу файла Nul
Беру свои слова обратно. Странно... проверяется путь "C:\test\nul" и возвращается True, хотя на самом деле такого пути не существует - мистика. Раньше я использовал этот способ в батниках - как единственно возможный. А проверить его подобным образом, просто в голову не приходило...

Отправлено: 09:53, 21-01-2007 | #152


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Respect
Цитата:
необходим универсальный способ
Такого как мне кажется, в Аутоите, для этой задачи, увы нет .

Цитата:
как переключать раскладку клавиатуры, не применяя эмуляцию нажатия клавиш ?
См. в шапке AutoIt скрипты - введение и FAQ (Как с помощью AutoIt сменить раскладку клавиатуры).

Diamond
Цитата:
все шли вместе с дистрибутивом v3.2.2.0
Интересно, я установил эту версию, но поверх старой (v3.2.0.1), неужели файлы справки в таком случае не заменяются? (в самих справках написанно v3.2.0.1).

Цитата:
проверяется путь "C:\test\nul" и возвращается True, хотя на самом деле такого пути не существует - мистика.
Ну это не совсем мистика, просто видимо Nul, интерпритируется как “Ничто” (также как и при проверке If FileExists("") ... ), т.е учитывается только путь до Nul (в случае с FileExists("") это путь к скрипту, ну или к рабочему каталогу).

Цитата:
использовал этот способ в батниках - как единственно возможный
Кстати, в батниках тоже можно “атрибутным” (почти) способом проверять :

Код: Выделить весь код
@echo off
Set Dir=c:\D
If Not Exist "%Dir%" Goto ExitMsg
Attrib %Dir% > "%temp%\~6456t56iu.tmp"
For /f "delims= " %%a in (%temp%\~6456t56iu.tmp) Do If /i %%a==%Dir% (
Echo "%Dir%" Is a folder!  ---^> Exit in 7 seconds ;-^) ) Else (
Echo "%Dir%" Is Not a folder!  ---^> Exit in 7 seconds ;-^) )
Goto Exit
:ExitMsg
Echo This file ^<%Dir%^> was not found  ---^> Exit in 7 seconds ;-)

:Exit
ping -n 7 localhost > nul
Del "%temp%\~6456t56iu.tmp"
Хотя тоже не очень наджёжно, но это уже другая тема, сорри за офтоп


-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:06, 22-01-2007 | #153


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Вопрос:
Можно ли как-то заставить GUI, игнорировать (установленый в системе по умолчанию) стиль Windows XP. Т.е чтобы окно отбражалось в классическом виде (как в 98-м) не зависимо от системного стиля?
Второй вопрос:
Сущесвует ли какой нибудь простой способ претаскивания окна стиля $WS_POPUP или это возможно только за счёт слежения за позицией курсора? Кому нибудь уже удавалось двигать такое окно с помощью мыши? Я написал код, окно двигается без проблем, только вот я не уверен что это правильный способ.
Код: Выделить весь код
#include <Guiconstants.au3>
Opt("GUIOnEventMode",1)
$test=GUICreate("",400,300,-1,-1,$WS_POPUP+$WS_BORDER)
GUISetBkColor(0xBEFFBE)
GUISetOnEvent($GUI_EVENT_CLOSE,"ExitGui")
$Closed_button=GUICtrlCreateButton("X",377,3,18,18)
GUICtrlSetFont(-1,10,700,0,"Tahoma")
GUICtrlSetOnEvent(-1,"ExitGui")
$Mim_button=GUICtrlCreateButton("-",337,3,18,18)
GUICtrlSetFont(-1,13,700,0,"Arial Black")
GUICtrlSetOnEvent(-1,"MimimizeGui")
$Max_button=GUICtrlCreateButton(CHR(152),357,3,18,18)
GUICtrlSetFont(-1,9,700,0,"Tahoma")
GUICtrlSetState(-1,$GUI_DISABLE)
$panel=GUICtrlCreateGraphic(0,0,400,24)
GUICtrlSetOnEvent(-1,"MoveWindow")
$text=GUICtrlCreateLabel("TEST",5,5,100,18)
GUICtrlSetFont(-1,12,700,0,"Courier New")
GUICtrlSetColor(-1,0xBEFFBE)
GUICtrlSetBkColor(-1,0x000000)
DllCall("User32.dll","long","AnimateWindow","hwnd",$test,"long",300,"long",0x10)
GUICtrlSetBkColor($panel,0x000000)
GUISetState()

While 1
	Sleep(100)
WEnd

Func MoveWindow()
Opt("GUIOnEventMode",0)
	$Win=WinGetPos("")
	$Mouse=MouseGetPos()
	$fix_X=$Mouse[0]-$Win[0]
	$fix_Y=$Mouse[1]-$Win[1]
	Do 
		$msg=GUIGetMsg()
		$move=MouseGetPos()
		$x=$move[0]-$fix_X
		$y=$move[1]-$fix_Y
		WinMove("","",$x,$y)
	Until $msg=$GUI_EVENT_PRIMARYUP
Opt("GUIOnEventMode",1)
EndFunc

Func MimimizeGui()
GUISetState(@SW_MINIMIZE)
EndFunc

Func ExitGui()
DllCall("User32.dll","long","AnimateWindow","hwnd",$test,"long",300,"long",0x10+0x10000)
Exit
EndFunc
Creat0R
Цитата:
Кстати, в батниках тоже можно “атрибутным” (почти) способом проверять
Да ты оказывается Спец в батниках. :UP: Т.е. папка определяется по отсутствию отрибутов... действительно работает, спасибо!!!
Цитата:
я установил эту версию, но поверх старой (v3.2.0.1), неужели файлы справки в таком случае не заменяются?
Ну, либо так как ты предположил, либо они обновили дистрибутив уже после того как ты его скачал. Я посмотрел, у меня в заголовках 3-x справок написано: v3.2.2.0 (скачивал я его, где-то после 10.01.2007)

Отправлено: 12:16, 22-01-2007 | #154


Аватара для DenchikK

Старожил


Сообщения: 282
Благодарности: 40

Профиль | Отправить PM | Цитировать


Хочется узнать, как бы сделать так, чтоб скрипт искал файл qip.exe во
всём каталоге Program Files, и если таковой найдется - возвратил бы
тот каталог, в котором он лежит и запихнул бы в реестр полный путь к
катлогу (не к файлу). Это вообще осуществимо?
Заранее спасибо!

Отправлено: 18:24, 22-01-2007 | #155


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Diamond
Цитата:
Можно ли как-то заставить GUI, игнорировать (установленый в системе по умолчанию) стиль Windows XP
Такого конкретного стиля (кажется) нет, но можно вручную это делать, почти также как ты это сделал с примером для следующего вопроса

Цитата:
Сущесвует ли какой нибудь простой способ претаскивания окна стиля $WS_POPUP
Есть стил $GUI_WS_EX_PARENTDRAG, его нужно “вешать” например на GuiCtrlCreateLabel, и тогда можно перетаскивать окно тягая этот контроль:

Код: Выделить весь код
#include <Guiconstants.au3>
Opt("GUIOnEventMode",1)
$test=GUICreate("",400,300,-1,-1,$WS_POPUP+$WS_BORDER)
GUISetBkColor(0xBEFFBE)
GUISetOnEvent($GUI_EVENT_CLOSE,"ExitGui")
$Closed_button=GUICtrlCreateButton("X",377,4,18,18)
GUICtrlSetFont(-1,10,700,0,"Tahoma")
GUICtrlSetOnEvent(-1,"ExitGui")
$Mim_button=GUICtrlCreateButton("-",337,4,18,18)
GUICtrlSetFont(-1,13,700,0,"Arial Black")
GUICtrlSetOnEvent(-1,"MimimizeGui")
$Max_button=GUICtrlCreateButton(CHR(152),357,4,18,18)
GUICtrlSetFont(-1,9,700,0,"Tahoma")
GUICtrlSetState(-1,$GUI_DISABLE)
$text=GUICtrlCreateLabel("Manual GUI Drag",5,5,325,18, $SS_Center, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1,12,700,0,"Courier New")
GUICtrlSetColor(-1,0xBEFFBE)
GUICtrlSetBkColor(-1,0x000000)
DllCall("User32.dll","long","AnimateWindow","hwnd",$test,"long",300,"long",0x10)
GUISetState()

While 1
      Sleep(100)
WEnd

Func MimimizeGui()
      GUISetState(@SW_MINIMIZE)
EndFunc

Func ExitGui()
      DllCall("User32.dll","long","AnimateWindow","hwnd",$test,"long",300,"long",0x10+0x10000)
      Exit
EndFunc

Цитата:
либо они обновили дистрибутив уже после того как ты его скачал
Ладно, спасибо, попробую ещё раз перекачать и установить.

Последний раз редактировалось Creat0R, 23-01-2007 в 06:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:41, 23-01-2007 | #156


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


DenchikK
Цитата:
чтоб скрипт искал файл qip.exe во
всём каталоге Program Files, и если таковой найдется - возвратил бы
тот каталог, в котором он лежит и запихнул бы в реестр полный путь к
катлогу (не к файлу).
Вот рабочий пример, путь в реестре куда писать, поменяешь у переменной $RegKey, а имя значения у переменной $RegValueName:

Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

$PathForSearch = @ProgramFilesDir
$FileToFind = "Qip.exe"
$RegKey = "HKEY_CURRENT_USER\Software\QIP"
$RegValueName = "Path"

ProgressOn("Please wait...", "Getting Folders Structure...", $PathForSearch, -1, -1, 16)
$SearchResults = _FileFind($PathForSearch, $FileToFind)
ProgressOff()
If $SearchResults <> -1 Then
      RegWrite($RegKey, $RegValueName, "REG_SZ", $SearchResults)
      MsgBox(262144+64, "Done!", "File <" & $FileToFind & "> was found in this path <" & $SearchResults & ">, and the path was writen to registry key <" & $RegKey & "> under <" & $RegValueName & "> valuename.")
Else
      MsgBox(262144+48, "Attention!", "File <" & $FileToFind & "> was not found on <" & $PathForSearch & "> and it subfolders." & @CR & @CR & "OK ---> EXIT")
EndIf

Func _FileFind($Path, $FileToFind)
      Local $RetPath = $Path
      If FileExists($Path & "\" & $FileToFind) Then Return $Path
      $SubFoldersArr = _DirListToArray($Path)
      If IsArray($SubFoldersArr) Then
            $PrgrsDelim = 100 / $SubFoldersArr[0]
            $Prgrrs = $PrgrsDelim
            ProgressSet($Prgrrs, $Path, "Search for <" & $FileToFind & "> is in process...")
            For $iF = 1 To $SubFoldersArr[0]
                  ProgressSet($Prgrrs, $SubFoldersArr[$iF])
                  $Prgrrs = $Prgrrs + $PrgrsDelim
                  If FileExists($SubFoldersArr[$iF] & "\" & $FileToFind) Then
                        $RetPath = $SubFoldersArr[$iF]
                        ExitLoop
                  EndIf
            Next
      EndIf
      If $RetPath <> $Path Then
            Return $RetPath
      Else
            Return -1
      EndIf
EndFunc

Func _DirListToArray ($sPath)
    Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
    If IsArray ($alist) Then
       For $i=1 To $alist [0]
            _ArrayAdd ($rlist, $sPath & "\" & $alist [$i])
            $blist = _DirListToArray ($sPath & "\" & $alist [$i])
            If $blist[0] > 0 Then
                  $PrgrsDelim = 100 / ($blist[0] + $alist[0])
                  $Prgrrs = $PrgrsDelim
                  For $j=1 To $blist[0]
                        ProgressSet($Prgrrs, $blist[$j])
                        $Prgrrs = $Prgrrs + $PrgrsDelim
                        _ArrayAdd ($rlist, $blist[$j])
                  Next
            EndIf
        Next
    EndIf
    $rlist [0] = UBound ($rlist) - 1
    Return $rlist
EndFunc
Если ненужен вывод прогресса, просто убери строчки связанные с Progress

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 23-01-2007 в 06:46. Причина: Поправка кода

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:06, 23-01-2007 | #157


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


DenchikK
Creat0R
К сожалению, а может и к радости, мне не удалось найти уже готового решения и я решил написать функцию поиска сам.
А сейчас захожу на форум и, вот тебе раз, опоздал... Ну да ладно... как вам такой вариант, вроде бы тоже ничего?
P.S. Есть ещё перебор через VBScript с помощью ObjCreate(). Если интересно - выложу.
Код: Выделить весь код
$ret = find(@ProgramFilesDir,"qip.exe")
If Not $ret=0 Then
	MsgBox(0,"",$ret)
	; Записываем значение $ret в реестр...
Else
	MsgBox(0,"","Файл не найден.")
EndIf

;=================================

; $Path - Путь поиска. ( Не должен заканчиваться слэшем!!! )
; $FileName - Имя искомого файла.
; Возвращает полный путь к каталогу (не к файлу), если файл осутствует возвращает 0

Func find($Path,$FileName)
If Not IsDeclared("GetPath") Then
	Global $GetPath=0
EndIf
$ModPath=$Path & "\*" ; Формирую строку поиска (толко для инициализации)
$file=FileFindFirstFile($ModPath) ; Инициализация поиска
While 1
	$get=FileFindNextFile($file) ; Поиск...
	If @error Then ExitLoop
	$string=$Path & "\" & $get ; Формирую новый путь
	If Not StringInStr(FileGetAttrib($string),"D") Then ;Если не является папкой тогда:
		If $get=$FileName Then
			$GetPath=$Path
			ExitLoop
		EndIf
	Else
		find($string,$FileName) ; Запуск подфункции для поиска в подпапке
	EndIf
WEnd
FileClose($file) ;Завершение инициализации
Return $GetPath
EndFunc
Исправлено!

Последний раз редактировалось Diamond, 24-01-2007 в 02:51. Причина: Исправление кода

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:31, 23-01-2007 | #158


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Такой вопрос:
-Возможно ли получить иконку из файла, в случае если расширение файла не зарегистрированно в системе? Т.е мне нужно сделать GuiCtrlSetImage(), и указать так, чтобы та иконка которая отображается на файле, была считана для контроля ($CtrlID).
К примеру, есть файл Program.exe, известно что далеко не все исполняемые файлы (и другие) содержат иконку, и нужно каким то образом определить, содержит ли этот файл иконку, если не содержит, то естественно путь к иконке можно указать к Shell32.dll, 2 (где 2 это ID иконки для екзешников не содержащих иконки), если содержит, то к самому файлу, и как ID ставить 0. А если файл не исполняемы, то можно по расширению читать из реестра путь к иконке.

Вобщем-то сам вопрос - Как узнать, содержит ли файл иконку? и по возможности, получить путь к иконке для не зарегистрированных типов файлов.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 05:47, 23-01-2007 | #159


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Diamond
Цитата:
вроде бы тоже ничего?
Вроде бы? а теперь засекай время поиска моей функции (часть которой является также и функция от amel27 - _DirListToArray()), и время для поиска которое уходит у твоей функции, результат шокирующий (меня) - Мой скрипт ищет (у меня на компе, с моей кучей программ) ровно 16 секунд, твой, ровно в два раза быстрее! 8 секунд! :UP: я понимаю что ProgressSet занимает время, но я сравнивал “голые” функции в действии, и тоже в два раза твоя оказалась быстрее.
Правда есть пару минусов - нет возможности заранее получить общее количество найденых папок (для точного подсчёта прогрессбара, или вывода прочей информации), также нельзя искать по маске, или ставить случайно слеш после пути . Но в данном случае, если требуется произвести исключительно поиск, то этот (твой) вариант идеальный!

P.S.
Немного изменил гуи для перетаскивания, и код для поиска (там в самой функции случайно указал \qip.exe ).

Последний раз редактировалось Creat0R, 23-01-2007 в 06:53.


Отправлено: 06:38, 23-01-2007 | #160



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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




 
Переход