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

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

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

Ветеран


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

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


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





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


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

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


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

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


Creat0R
И для обычного файла решение предоставляли заранее.
Это решение я взял из справки по Dos и прикрутил к AutoIt:
Код: Выделить весь код
If RunWait('@ComSpec@ /C find "Pacific Rim" < trade.txt','',0)=0 Then 
...
EndIf
Ксати, ini-файл ничем не отличается от обычного файла, и в нем можно искать текст таким же способом.

Sanja Alone, привет!
Ты быстрее набираешь тексты! А я - короче!

Отправлено: 13:35, 15-08-2006 | #281



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

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


Googler


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

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


bogomolv

Строго говоря, оба варианта находят не слова, а заданные последовательности символов. Например, при поиске слова "кот" мы найдем и "котлету", и "антрекот" и много еще чего... В AutoIt явно не хватает поддержки регулярных выражений, в качестве альтернативы можно использовать FINDSTR. Например, следующий скрипт ищет все вхождения слова BASIC:
Код: Выделить весь код
If RunWait('@ComSpec@ /C findstr /I "\<baSic\>" lang.txt','',0)=0 Then 
...
EndIf
Ложка дегтя - судя по всему FINDSTR распознает только слова из английских букв, остальные для него лишь набор символов.

Отправлено: 18:54, 15-08-2006 | #282


Аватара для XXXler

Ветеран


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

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


Цитата:
Строго говоря, оба варианта находят не слова, а заданные последовательности символов. Например, при поиске слова "кот" мы найдем и "котлету", и "антрекот" и много еще чего...
что мешает искать в строке вхождение не "кот" а " кот ", т.е. с пробелами с обоих сторон?

-------
Исходные коды проектов


Отправлено: 19:33, 15-08-2006 | #283


Аватара для Creat0R

Must AutoIt


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

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


Sanja Alone, amel27, XXXler:
Во-первых, большое спасибо за помощь.
Пример который привёл Sanja Alone, выводит ошибку (в MsgBox), также пример от bogomolv, выводит ошибку о том, что не возможно найти файл (хотя он наместе)...

Но не в этом суть, я в результате использовал пример от Sanja Alone, но немного модифицировал его, т.к этот пример не искал кириллицу (для этого добавил перекодировку строк)... но есть другая проблема - если я пытаюсь указать строчку для поиска, не прямым способом, а через переменную ($Text), то поиск не осуществляется, и постоянно возвращается $Var = @error :

Код: Выделить весь код
;Файл в котором будет произведён поиск
$InputFile = @ScriptDir& "\MyFile.txt"

;Текст для поиска
$Text = IniRead(@ScriptDir& "\Test.ini", "Section", "Parametr", "")

;Использование функции для перекодировки строчек в UTF
	$TxtToFindUTF = StringToUTF($Text)

$var = _FindTextInFile($InputFile,$TxtToFindUTF)

;Проверка на существование искомого текста, и если существует, то выводим сообщение об этом
If $var <> @error Then
MsgBox(64,"","Текст <" & $Text & "> Был найден в файле <" & $InputFile & ">, и находится в линии под номером <" & $var[0] & ">")

;Если не существует, то выводим сообщение об ошибке
Else

MsgBox(48,"","Текст <" & $Text & "> Не Был найден в файле <" & $InputFile & ">" & @CRLF & "Или файл <" & $InputFile & "> не найден")

	EndIf
Exit

;Начало функции для поиска текста
Func _FindTextInFile($ifile,$text)
Local $i
Dim $ret[2]
$file = FileOpen($ifile,0)
$a = StringSplit( FileRead($file, FileGetSize($ifile)), @LF)
FileClose($file)

If StringIsASCII($text) Then
	For $i = 1 To UBound($a,1)-1
		If StringInStr($a[$i],$text) Then
			$ret[0]=$i
			$ret[1]=$a[$i]
			Return $ret
		EndIf
	Next
Else
	For $i = 1 To UBound($a,1)-1
		If StringInStr(StringLower($a[$i]),StringLower($text)) Then
			$ret[0]=$i
			$ret[1]=$a[$i]
			Return $ret
		EndIf
	Next
EndIf
EndFunc ;--> Конец функции для поиска текста (_FindTextInFile)

;Начало функции для перекодировки строк в UTF
Func StringToUTF($String)
	Dim $sResult = ""
	$VarUTFArr = StringSplit($String, "")
	
	For $i = 1 To $VarUTFArr[0]
		$code = Asc($VarUTFArr[$i])
		
		Select
			Case $code >= 192 And $code <= 239
				$VarUTFArr[$i] = Chr(208) & Chr($code - 48)
			Case $code >= 240 And $code <= 255
				$VarUTFArr[$i] = Chr(209) & Chr($code - 112)
			Case $code = 168
				$VarUTFArr[$i] = Chr(208) & Chr(129)
			Case $code = 184
				$VarUTFArr[$i] = Chr(209) & Chr(145)
			Case Else
				$VarUTFArr[$i] = Chr($code)
		EndSelect
		
		$sResult = $sResult & $VarUTFArr[$i]
	Next
	
	Return $sResult
EndFunc   ;==> Конец функции для перекодировки строк в UTF (StringToUTF)

Если в файле Test.ini, в секции [Section], у параметра Parametr, будет значение предназначенное для того самого поиска (т.е само искомое слово), то запустив этот скрипт, в любом случае $Var будет ровнятся @error, т.е текст указанный в ини файле, искаться не будет, а именно так мне нужно осуществить поиск.

И ещё раз спасибо, буду благодарен если сможете и в этом помочь.

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

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

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


Отправлено: 22:04, 15-08-2006 | #284


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


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

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


Creat0R
Цитата:
выводит ошибку о том, что не возможно найти файл (хотя он наместе)...
На каком месте? Именно это и укажи.
Например:
Код: Выделить весь код
If RunWait('@ComSpec@ /C find "Pacific Rim" < C:\DOS\trade.txt','',0)=0 Then 
...
EndIf
И не забудь прописать в начале скрипта
Код: Выделить весь код
Opt('ExpandVarStrings', 1); default = 0

Отправлено: 22:17, 15-08-2006 | #285


Аватара для Creat0R

Must AutoIt


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

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


bogomolv

Вот так выглядит у меня состав скрипта:

Код: Выделить весь код
Opt("ExpandVarStrings", 1)
If RunWait('@ComSpec@ /C find "word" < C:\Test.txt','',0)=0 Then 

MsgBox(64,"","Текст Был найден")

EndIf
На диске С:\, у меня лежит файл Test.txt, а в этом файле, среди прочего текста, есть строка содержащая слово Word - и после запуска этого скрипта, ничего не происходит, а если бы слово было найдено, то вывелось бы сообщение: "Текст Был найден".

Вот как можно заставить такой вариант сработать, но это тоже только для латиницы:

Код: Выделить весь код
If RunWait(@ComSpec & " /C find /i /c ""Word"" ""C:\Test.txt"" | find /c "": 0"" > f.tmp","",0)<>0 Then 
FileDelete("f.tmp")
MsgBox(64,"","Текст Был найден")

	EndIf
Можно конечно и легче написать этот код, но не в этом суть.

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

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

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


Отправлено: 00:16, 16-08-2006 | #286


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


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

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


Дополнил код по сетевым интерфейсам.
Не могу понять почему не получается обновить информацию по состоянию интерфейса после включения / выключения.
Мож кто подскажит.
Код: Выделить весь код
#include <GUIConstants.au3>
#include <GuiCombo.au3>
#NoTrayIcon
Dim $i=1
Dim $NetArr[$i+1][6]
$objShare = ObjCreate("HNetCfg.HNetShare.1")
$shellApp = ObjCreate("Shell.Application")
; GUI ------------------------------------------------------
$Form1 = GUICreate("Сетевые подключения", 350, 198)
GuiSetIcon("netshell.dll", 100)
$Combo1 = GUICtrlCreateCombo("Подключения", 16, 16, 320, 21)
$Button1 = GUICtrlCreateButton("Вкл / Выкл", 100, 145, 150, 35)
$Label1 = GUICtrlCreateLabel("Выберите подключение", 16, 48, 320, 81, $BS_PUSHLIKE)
Data($NetArr, $objShare)
For $n = 1 To $NetArr[0][0]
	GUICtrlSetData($Combo1,$NetArr[$n][1])
Next	
GUISetState(@SW_SHOW)
While 1
	$msg = GuiGetMsg()
  Select
	Case $msg = $GUI_EVENT_CLOSE
		ExitLoop
	Case $msg = $Combo1
		$n = _GUICtrlComboGetCurSel($Combo1)
		If $n > 0 Then
        Output($n)
	    Else
		  GUICtrlSetData($Label1, "Выберите подключение")
	    EndIf
	Case $msg = $Button1
        $oNetConnections = $shellApp.Namespace(0x00000031)
        For $folderitem in $oNetConnections.items
		  For $verb in $folderitem.verbs
            if $folderitem.name = $NetArr[$n][1] Then
              $verb.DoIt
              Sleep(1000)
              ExitLoop 2
            EndIf 
          Next
        Next
        If $folderitem.name <> $NetArr[$n][1] Then msgbox(48, "Ошибка", "Имя соединения указанно не правильно")
		GUICtrlSetData($Label1,"Ждите")
        Output($n)
  EndSelect
WEnd
Exit
; Func -------------------------------------------------------
Func Data(ByRef $NetArr, $objShare)
  If $objShare = 0 Then 
	  MsgBox(48, "Внимание", "Сетевых подключений не найдено", 5)
	  Exit
  EndIf
  $objEveryColl = $objShare.EnumEveryConnection
  If $objEveryColl <> 0 Then
	For $objNetConn In $objEveryColl
	  $objShareCfg = $objShare.INetSharingConfigurationForINetConnection($objNetConn)
	  If $objShareCfg <> 0 Then
		$objNCProps = $objShare.NetConnectionProps($objNetConn)
		If $objNCProps <> 0 Then
			ReDim $NetArr[$i+1][6]
			Select
				Case  $objNCProps.Status = 0
                    $Status = "The connection is disconnected."
				Case  $objNCProps.Status = 1
                    $Status = "The connection is in the process of connecting."
				Case  $objNCProps.Status = 2
                    $Status = "The connection is in a connected state."
				Case  $objNCProps.Status = 3
                    $Status = "The connection is in the process of disconnecting."
				Case  $objNCProps.Status = 4
                    $Status = "The hardware for the connection, for example network interface card (NIC), is not present."
				Case  $objNCProps.Status = 5
                    $Status = "The hardware for the connection is present, but is not enabled."
				Case  $objNCProps.Status = 6
                    $Status = "A malfunction has occurred in the hardware for the connection."
				Case  $objNCProps.Status = 7
                    $Status = "The media, for example the network cable, is disconnected."
				Case  $objNCProps.Status = 8
                    $Status = "The connection is waiting for authentication to occur."
				Case  $objNCProps.Status = 9
                    $Status = "Authentication has succeeded on this connection."
				Case  $objNCProps.Status = 10
                    $Status = "Authentication has failed on this connection."
				Case  $objNCProps.Status = 11
                    $Status = "The address is invalid."
				Case  $objNCProps.Status = 12
                    $Status = "Security credentials are required."
			EndSelect
			Select
				Case $objNCProps.MediaType = 0 
                    $MediaType = "No media is present."
				Case $objNCProps.MediaType = 1
                    $MediaType = "Direct serial connection through a serial port."
				Case $objNCProps.MediaType = 2
                    $MediaType = "Connection is through an integrated services digital network (ISDN) line."
				Case $objNCProps.MediaType = 3
                    $MediaType = "Connection is to a local area network (LAN)."
				Case $objNCProps.MediaType = 4
                    $MediaType = "Dial-up connection over a conventional phone line."
				Case $objNCProps.MediaType = 5
                    $MediaType = "Virtual private network (VPN) connection."
				Case $objNCProps.MediaType = 6
                    $MediaType = "Point-to-Point protocol (PPP) over Ethernet."
				Case $objNCProps.MediaType = 7
                    $MediaType = "Bridged connection."
				Case $objNCProps.MediaType = 8
                    $MediaType = "Shared connection to a LAN."
				Case $objNCProps.MediaType = 9
                    $MediaType = "Shared connection to a remote or wide area network (WAN)."
			EndSelect
			$NetArr[$i][1] = $objNCProps.Name
			$NetArr[$i][2] = $objNCProps.Guid
			$NetArr[$i][3] = $objNCProps.DeviceName
			$NetArr[$i][4] = $Status
			$NetArr[$i][5] = $MediaType
			$NetArr[0][0] = $i  ; Общее кол-во
			$i = $i + 1
		  EndIf
	  EndIf
	Next
  EndIf
Return $NetArr
EndFunc
Func Output($n)
	GUICtrlSetData($Label1, _ 
	      "- Name: "       & $NetArr[$n][1] & @CRLF & _
	      "- Device Name: " & $NetArr[$n][3] & @CRLF & _
	      "- Status: "     & $NetArr[$n][4] & @CRLF & _
	      "- Media Type: "  & $NetArr[$n][5] & @CRLF)
	      ;"- Guid: "       & $NetArr[$n][2]
EndFunc

Отправлено: 00:30, 16-08-2006 | #287


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


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

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


Creat0R

У тебя потрясающее умение делать ошибки там, где их сделать невозможно!
В своих примерах ты в первом случае искал слово "word", а во втором - слово "Word". Естественно, что результаты были разными.

Проблема русского языка и DOS поднималась здесь не раз.
Один из вариантов:
Код: Выделить весь код
If RunWait('@ComSpec@ /C  chcp 1251 | find "Ворд" < C:\Test.txt','',0)=0 Then MsgBox(64,"","Текст Был найден")

Отправлено: 01:05, 16-08-2006 | #288


Аватара для Creat0R

Must AutoIt


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

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


bogomolv
Цитата:
У тебя потрясающее умение делать ошибки там, где их сделать невозможно!
Я знаю

Цитата:
В своих примерах ты в первом случае искал слово "word", а во втором - слово "Word". Естественно, что результаты были разными.
Если быть точным, то я искал совсем другое слово, а Word привёл в пример, и тот факт что первая буква большая, не играет роли, это тольку тут я написал так.

Цитата:
Один из вариантов:
И он не работает, слово есть, а он не выводит ничего, и поверь, я перебробовал множество вариантов (с большими буквами, с мелкими, писал даже слово в самое начало файла с пробелом после него, но ничего не сработало). Я даже без аутоита пробовал сделать (через батник), но командной строкой заставить делать поиск по рускому тексту, думаю не всегда возможно (кодировка файла, кодировка текста и т.д).

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

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

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


Отправлено: 01:44, 16-08-2006 | #289


Googler


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

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


XXXler
Цитата:
что мешает искать в строке вхождение не "кот" а " кот ", т.е. с пробелами с обоих сторон?
Тогда придется еще учесть все знаки препинания, а также расположение слова в начале и конце строки

Отправлено: 02:29, 16-08-2006 | #290



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] 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.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход