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

Компьютерный форум 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

 

Googler


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

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


Creat0R
Цитата:
и если этот файл будет в кодировке UTF-8, то в MsgBox выведутся каракули, как можно это исправить?
вариант реализации функции преобразования кодировок и пример использования:
Код: Выделить весь код
$file = "test.txt"
$foo = FileOpen($file, 4) ; 4 - RAW-режим!

$text = _Utf8ToAnsi(FileRead($foo,FileGetSize($file)))
MsgBox(0,"Test",$text)
FileClose ($foo)

; Пример преобразования UTF-8 в ANSI
; другие варианты кодировок:
; 0  - ANSI
; 1  - OEM
; 2  - MAC
; 42 - Symbol
; 65000 - UTF-7
; 65001 - UTF-8

Func _Utf8ToAnsi($utf8String)
	Return _Uni2Any(_Any2Uni($utf8String, 65001),0)
EndFunc

; Преобразование символьной строки заданной кодировки в юникод

Func _Any2Uni($anyString, $codePage)
	Local $bufSize = StringLen($anyString) * 2
	Local $buf = DllStructCreate("byte[" & $bufSize & "]")
	Local $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
		"int", $codePage, _
		"int", 0, _
		"str", $anyString, _
		"int", StringLen($anyString), _
		"ptr", DllStructGetPtr($buf), _
		"int", $bufSize)
	Local $uniString = StringLeft(DllStructGetData($buf, 1), $ret[0] * 2)
	$buf = 0
	Return $uniString   
EndFunc

; Преобразование юникода в символьную строку заданной кодировки

Func _Uni2Any($uniString, $codePage)
	Local $uniStringLen = StringLen($uniString)
	Local $bufLen = $uniStringLen * 2
	Local $in = DllStructCreate("byte[" & $bufLen & "]")
	Local $out= DllStructCreate("char[" & $bufLen & "]")
	DllStructSetData($in, 1, $uniString)
	Local $ret = DllCall("kernel32.dll", "int", "WideCharToMultiByte", _
		"int", $codePage, _
		"int", 0, _
		"ptr", DllStructGetPtr($in), _
		"int", $uniStringLen / 2, _
		"ptr", DllStructGetPtr($out), _
		"int", $bufLen, _
		"int", 0, _
		"int", 0)   
	Local $anyString = DllStructGetData($out, 1)
	$out= 0
	$in = 0
	Return $anyString
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:25, 11-09-2006 | #361



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

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


Ветеран


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

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


Кстати, а что с поддержкой юникода(UTF-8) в autoit? Оч. хотелось бы сделать gui-оболочку для редактирования файлов с иероглифами. Возможно?

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


Отправлено: 14:34, 11-09-2006 | #362


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
вариант реализации функции преобразования кодировок и пример использования
Примного благодарен! спас меня от многих мучении и разного рода батниковых выкрутасов!

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

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

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


Отправлено: 15:46, 11-09-2006 | #363


Покинул форум


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

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


Sanja Alone

Ты меня совсем не понял. Извини если я тя чем то задел. Мне не нужен Office (мне его и на работе хватает) я хотел показать тебе экран перезагрузки, я пользуюсь пользуюсь прогой Symantec Ghost AI Snapshot мне так более удобно сделал все настройки сохранил как с Atnotes и все Winamp, Nero устанавливаются за 2-3 секунды, со всеми ярлыками какие нужны, с настройками. Тока один недостаток просит перезагрузку понимаешь как это неудобно в режиме GuiRunOnce после каждой проги появляется экран перезагрузки - Nero перезагрузка, Promt перезагрузка ну и т.д. Постоянно приходится нажимать нет, нет.....
Цитата:
Практически у любого приложения есть ключи/параметры файла ответов и т.п
Облазил практически весь нет нигде даже в родной справке нет даже заиканий о ключиках для этой проги.
Насчет AutoIt, мне он не нужен в дальнейшем, вот как ты думаешь скока часов уйдет на то чтобы я овладел какимитами понятиями о действиях этой проги, для того чтобы поставить одну!!! единственную команду на отмену перезагрузки.

Последний раз редактировалось prokazzza, 12-09-2006 в 10:05.


Отправлено: 09:34, 12-09-2006 | #364


Аватара для Sanja Alone

Ищу Человека…


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

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


prokazzza
Цитата:
я хотел показать тебе экран перезагрузки
Здесь нужны свойства этого экрана, а не он сам. Вот я тебе и твержу уже третий раз об AutoIt Window Info. Нужно при появлении экрана, тьфу ты... ОКНА перезагрузки запустить AutoIt Window Info, ткнуть мышью на окно, подвести указатель мыши к кнопочке "No" (но не нажимать на нее!), нажать CTRL + ALT + F (для фиксации сведений в AutoIt Window Info), снять скриншоты полного содержимого окна AutoIt Window Info, затем выложить снимки 2-3 таких окошек (от разных приложений), например, на imageshack, и только после этого можно будет предложить конкретные способы автоматического закрытия данных окон. Надеюсь, что теперь я все понятно описал...

Цитата:
пользуюсь прогой Symantec Ghost AI Snapshot
Я не знаю особенностей работы данного приложения. Насколько я понял, все отслеженные настройки и измененные файлы оно пихает в файл INSTALL.exe, запуск к-рого все это дело и восстанавливает. Возможно, в настройках самого Symantec Ghost AI Snapshot есть какой-то пункт отмены вывода окна перезагрузки, т.к. это окно не имеет ни малейшего отношения ни к Office 2003, ни к Atnotes.

Цитата:
единственную команду на отмену перезагрузки
Есть такая команда (shutdown -a), но в данном контексте она бесполезна

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Отправлено: 08:20, 13-09-2006 | #365


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


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

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


Здравствуйте.

Кто-нибудь знает, как в AutoIt реализована функция ProcessList?
Используется ли там DLLCall("psapi.dll"...) или DLLCall("kernel32.dll"...)

Заранее благодарен.

Отправлено: 17:35, 17-09-2006 | #366


Googler


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

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


AxelM
однако PSAPI.DLL, хотя конечно не DLLCall

Отправлено: 04:21, 19-09-2006 | #367


Аватара для Creat0R

Must AutoIt


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

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


Есть два тревожующих вопроса:

1) Нужно запустить мелодию (точнее звук в 5 секунд), и чтобы она постоянно запускалась в цикле. Т.е пока скрипт запущен, чтобы один и тот-же файл играл по кругу (если закончилась мелодия, то чтобы началась по новой играть). Если нужно было бы только это, то можно обойтись так:

Код: Выделить весь код
While 1
SoundPlay("File.wav", 1)
Wend
Но мне нужно запустить мелодию (в круговом режиме), и чтобы в это время скрипт делал что-то другое - Т.е чтобы была (или уже есть?) какая-то функция, которую можно было бы использовать примерно так:

Код: Выделить весь код
Function("File.wav", 1) ; Ноль если нужно просто один раз проиграть, а единица (1) для повторного проигрывания.
.........
;тут будет что-то делаться во время того как играет мелодия
Возможно такое осуществить?


2) Мне нужно отнять от формата времени, определённое количество минут (до 60-ти), и нужно чтобы не просто отнимались числа от минут, а чтобы именно происходил подсчёт оставшегося времени (уитывая часы).
Допустим, есть данное время 22:07:01 - И отняв от этого времени, допустим 8 минут, нужно чтобы получился такой результат - 21:59:01...

Если речь идёт только о минутах (т.е без подсчёта часов), то я могу сделать это так:

Код: Выделить весь код
$Time = "22:07:01"
$CleanSec = StringTrimRight($Time, 3)
$CleanHour = StringTrimLeft($CleanSec, 3)

If StringLeft($CleanHour, 1) = "0" Then
      $Minutes = StringLeft($CleanHour, 1)
    Else
 $Minutes = $CleanHour
EndIf

$Result = $Minutes - 8

If $Result < 0 Then
    $Minutes =  (60 - 8) + $Minutes

ElseIf StringLeft($CleanHour, 1) = "0" Then

$Minutes = "0" & $Minutes

EndIf

$TimeResult = StringLeft($Time, 3) & $Minutes & StringRight($Time, 3)
В результате, переменной $TimeResult присваивается значение равное времени, у которого отняли 8 минут (22:59:01), но в данном примере не учитывается изминения часов... я конечно же мог продолжить, и выявить всевозможные варианты и условия при которых достичь смену часов в соответствии смены минут, но это заняло бы слишком много времени, и наверное немало строк (при том как я бы их изложил), и тем более, что у меня возня с матиматикой, вызывает серъёзное головокружение - Может кто-то плиз помочь разобраться с этим? - Задача вроде и не сложная, но я никак не приложу к этому ума.

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

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

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


Отправлено: 07:43, 19-09-2006 | #368


Googler


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

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


1, Можно через вызов внешнего (скомпилированного) скрипта:
Код: Выделить весь код
Func Function ($file, $play)
	Local $pid=0
	If $play Then $pid = Run ("Au3Sound.Exe", @ScriptDir, @SW_HIDE)
	...
	If $pid Then ProcessClose ($pid)
EndFunc
где Au3Sound.Exe:
Код: Выделить весь код
While 1
SoundPlay("File.wav", 1)
Wend
2. Например так:
Код: Выделить весь код
$Time = "22:07:01"
$Mins = 8

Dim $TMS0 = StringSplit ($Time,":")
Dim $TMS1 = $TMS0

$Mins = Mod (24*60 + $TMS0[1]*60 + $TMS0[2] - $Mins, 24*60)
$TMS1[2] = Mod ($Mins, 60)
$TMS1[1] = ($Mins - $TMS1[2])/60

$TimeResult = $TMS1[1] & ":" & $TMS1[2] & ":" & $TMS1[3]

Последний раз редактировалось amel27, 19-09-2006 в 10:50. Причина: правка скрипта

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

Отправлено: 09:41, 19-09-2006 | #369


Аватара для Creat0R

Must AutoIt


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

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


amel27

Цитата:
Можно через вызов внешнего (скомпилированного) скрипта:
Дело в том, что мне нужно именно в том же скрипте...

Пример который ты привёл, а точнее фраза которую я процетировал, навела меня на идею, которая решает эту проблему.
Вместо того, чтобы запускать ещё один скрипт, можно запустить этот-же скрипт, но с параметром ком. строки, а запуск мелодии в цикле, поставить под условие - т.е если скрипт запущен с ключём, то запустить цыкл с проигрыванием мелодии:

Код: Выделить весь код
#NoTrayIcon
Dim $SoundText, $Flag = 64

Select
 
Case $CmdLine[0] = 0

$Ask = MsgBox(36, "question", "Play the sound?")

If $Ask = 6 Then
	Run(@AutoItExe & " """ & @ScriptFullPath & """ /ps")
$SoundText = ", exit the script and stop the sound?"
$Flag = 36
EndIf

$Else = MsgBox($Flag, "else", "I am somthing else" & $SoundText)
If $Else = 6 Then
	Send("^!s")
Exit
ElseIf $SoundText <> "" Then
	MsgBox(64, "close msg", "for stop the sound, hold down thees hotkeys:" & @CR & "CTRL+ALT+S")
EndIf

Case $CmdLine[1] = "/ps"
HotKeySet("^!s", "ExitScript")

While 1
SoundPlay (@WindowsDir & "\media\tada.wav", 1)
Wend

EndSelect

Func ExitScript()
Exit 0
EndFunc
Там где выделенный текст, это позволяет запустить не закомпелированный скрипт с ком. строкой, для того чтобы вызвать этот-же закомпелированный скрипт с ком. срокой, нужно поменять выделенный код на это - Run(@ScriptFullPath & " /ps")

Цитата:
Например так:
Большое спасибо! -Правда в некоторых случаях, у минут и у часов будет нехватать нуля (0) . Например, если время будет такое: - 01:10:43, то отняв от него 8, результат мы получмим такой - 1:2:43. Поэтому я немного модифицыровал скрипт, и добавил определение для часов и минут на отсутствие нулей (см. выделенный текс в коде):

Код: Выделить весь код
$Time = 01:10:43
$Mins = 8

Dim $TMS0 = StringSplit ($Time,":")
Dim $TMS1 = $TMS0

$Mins = Mod (24*60 + $TMS0[1]*60 + $TMS0[2] - $Mins, 24*60)
$TMS1[2] = Mod ($Mins, 60)
$TMS1[1] = ($Mins - $TMS1[2])/60

Switch $TMS1[1]
	
Case 0 to 9
	$TMS1[1] = "0" & $TMS1[1]
EndSwitch
	
Switch $TMS1[2]
	
Case 0 to 9
	$TMS1[2] = "0" & $TMS1[2]
EndSwitch

$TimeResult = $TMS1[1] & ":" & $TMS1[2] & ":" & $TMS1[3]

EndIf
-----------------------------------

Есть один глупый вопрос, но я его всё же задам (любопытство преодаливает ) - Чем отличаются между собой: @CR, @LF, и @CRLF ?

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

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

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:11, 20-09-2006 | #370



Компьютерный форум 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




 
Переход