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

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

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

(*.*)


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


Конфигурация

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


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







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


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

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

Отправлено: 00:02, 05-02-2006

 

Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
не совсем понял что надо
Я пытаюсь (с твоей помощью почти закончил ) сделать UDF с гуи для поиска и замены по тексту (текст передаётся как параметр, т.ч это предназначено не только для однократного использования) - Саму функцию выложу чуть позже.

Цитата:
может пригодится
Ещё как... Я сколько не лазил в справке, но этот момент упустил:

Цитата:
\b - Matches at a word boundary.
А я столько мучался подбирал разные вариации с табами/пробелами и т.д
Спасибо!

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

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

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


Отправлено: 02:51, 13-08-2007 | #291



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

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


Аватара для Creat0R

Must AutoIt


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

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


По поводу функции конвертирования формата даты - всё таки пришлось делать две функции, проверьте плиз кто нибудь, как оно работает:

Код: Выделить весь код
$FullDateTime = _TimeConvertFormat("HH:MM:SS") & ", " & _DateConvertFormat("DD/MM/YY")
MsgBox(64, "Date/Time Convert Results", $FullDateTime)

Func _TimeConvertFormat($sFormat)
    Local $RetDateTime = $sFormat

        Local $Hours_Raw = @HOUR
    Local $Hours_Part = StringRight($Hours_Raw, 1)
    If $Hours_Raw > 9 Then $Hours_Part = $Hours_Raw

        Local $Minutes_Raw = @MIN
    Local $Minutes_Part = StringRight($Minutes_Raw, 1)
    If $Minutes_Raw > 9 Then $Minutes_Part = $Minutes_Raw

        Local $Seconds_Raw = @SEC
    Local $Seconds_Part = StringRight($Seconds_Raw, 1)
    If $Seconds_Raw > 9 Then $Seconds_Part = $Seconds_Raw

        $RetDateTime = StringReplace($RetDateTime, "hh", $Hours_Raw)
    $RetDateTime = StringReplace($RetDateTime, "h", $Hours_Part)

        $RetDateTime = StringReplace($RetDateTime, "mm", $Minutes_Raw)
    $RetDateTime = StringReplace($RetDateTime, "m", $Minutes_Part)

        $RetDateTime = StringReplace($RetDateTime, "ss", $Seconds_Raw)
    $RetDateTime = StringReplace($RetDateTime, "s", $Seconds_Part)

        Return $RetDateTime
EndFunc

Func _DateConvertFormat($sFormat)
    Local $RetDateTime = $sFormat

        StringReplace($RetDateTime, "y", "")
    Local $Year = StringRight(@YEAR, @extended)

        Local $Mounth_Raw = @MON
    Local $Mounth_Part = StringRight($Mounth_Raw, 1)
    If $Mounth_Raw > 9 Then $Mounth_Part = $Mounth_Raw

        Local $Day_Raw = @MDAY
    Local $Day_Part = StringRight($Day_Raw, 1)
    If $Day_Raw > 9 Then $Day_Part = $Day_Raw

        $RetDateTime = StringReplace($RetDateTime, "y", $Year, 1)
    $RetDateTime = StringReplace($RetDateTime, "y", "")

        $RetDateTime = StringReplace($RetDateTime, "mm", $Mounth_Raw)
    $RetDateTime = StringReplace($RetDateTime, "m", $Mounth_Part)

        $RetDateTime = StringReplace($RetDateTime, "dd", $Day_Raw)
    $RetDateTime = StringReplace($RetDateTime, "d", $Day_Part)
    Return $RetDateTime
EndFunc

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

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

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


Отправлено: 03:52, 13-08-2007 | #292


Googler


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

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


Цитата Creat0R:
проверьте плиз кто нибудь, как оно работает
вроде работает... при условии что год встречается не больше 1 раза, немного изменил:
Код: Выделить весь код
Func _TimeConvertFormat($sFormat)
    Local $Hours_Raw = @HOUR
    Local $Minutes_Raw = @MIN
    Local $Seconds_Raw = @SEC

    $sFormat = StringReplace($sFormat, "hh",$Hours_Raw)
    $sFormat = StringReplace($sFormat, "h", $Hours_Raw+0)

    $sFormat = StringReplace($sFormat, "mm",$Minutes_Raw)
    $sFormat = StringReplace($sFormat, "m", $Minutes_Raw+0)

    $sFormat = StringReplace($sFormat, "ss",$Seconds_Raw)
    $sFormat = StringReplace($sFormat, "s", $Seconds_Raw+0)

    Return $sFormat
EndFunc

Func _DateConvertFormat($sFormat)
    StringReplace($sFormat, "y", "")
    Local $Year = StringRight(@YEAR, @extended)
    Local $Mounth_Raw = @MON
    Local $Day_Raw = @MDAY

    $sFormat = StringRegExpReplace($sFormat, '(?i)y+', $Year)

    $sFormat = StringReplace($sFormat, "mm",$Mounth_Raw)
    $sFormat = StringReplace($sFormat, "m", $Mounth_Raw+0)

    $sFormat = StringReplace($sFormat, "dd",$Day_Raw)
    $sFormat = StringReplace($sFormat, "d", $Day_Raw+0)

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

Отправлено: 05:28, 13-08-2007 | #293


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
немного изменил:
Спасибо - Я как то не подумал что прибавляя ноль на втором этапе замены, получается тот же результат - И код короче стал...

Но мне всё же нужно доделать чтобы оно работало с одной строкой (где может встречаться и дата, и время)... вот что пока получилось:

Код: Выделить весь код
$Str = 'DD/MM/YYYY, [HH;MM;SS]'

ConsoleWrite(_DateTimeConvertFormat($Str))

Func _DateTimeConvertFormat($sFormat)
    Local $RetDateTime = $sFormat

        If StringRegExp($sFormat, '(?i)\[(.*)\]') Then
        $TPos_1 = StringInStr($sFormat, "[")
        $TPos_2 = StringInStr($sFormat, "]")

                $TruimVal = 1
        If StringInStr(StringMid($sFormat, $TPos_2 + 1), "]") Then $TruimVal = 0

                $TimeStr = StringMid($sFormat, $TPos_1+1, ($TPos_2 - $TPos_1) - $TruimVal)
        $TimeStr = _TimeConvertFormat($TimeStr)
        $DateStr = _DateConvertFormat(StringRegExpReplace($sFormat, '(?i)\[(.*)\]', '', 1))
        If StringRegExp(StringMid($sFormat, $TPos_2), '(?i)D|MM/Y') Then
            $RetDateTime = $TimeStr & $DateStr
        Else
            $RetDateTime = $DateStr & $TimeStr
        EndIf
    Else
        $RetDateTime = _DateConvertFormat($sFormat)
    EndIf

        If $RetDateTime = $sFormat Then $RetDateTime = _DateConvertFormat($sFormat)
    Return $RetDateTime
EndFunc
Время может быть задано только обрамлённое квадратными скобками, другого выхода пока не вижу

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

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

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


Отправлено: 06:12, 13-08-2007 | #294


Googler


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

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


Цитата Creat0R:
Но мне всё же нужно доделать чтобы оно работало с одной строкой (где может встречаться и дата, и время)...
например так - опознавать месяц по наличию вблизи "M" символов "D" и "Y":
Код: Выделить весь код
$Str = 'DD/MM/YYYY, [HH;MM;SS]'
ConsoleWrite(_DateTimeConvertFormat($Str))

Func _DateTimeConvertFormat($sFormat)
    StringReplace($sFormat, "y", "")
    Local $Year = StringRight(@YEAR, @extended)
    Local $Stamp = '<'& Random(10000000,99999999,1) &'>'
    Local $Mounth_Raw = @MON
    Local $Day_Raw = @MDAY
    Local $Hours_Raw = @HOUR
    Local $Minutes_Raw = @MIN
    Local $Seconds_Raw = @SEC

    $sFormat = StringRegExpReplace($sFormat, "(?i)(?:(d+|y+)(\W*)(mm)|(mm)(\W*)(d+|y+))", '\1\2'& $Stamp &'\5\6')
    If @extended Then $sFormat = StringReplace($sFormat, $Stamp, $Mounth_Raw)
    $sFormat = StringRegExpReplace($sFormat, "(?i)(?:(d+|y+)(\W*)(m)|(m)(\W*)(d+|y+))", '\1\2'& $Stamp &'\5\6')
    If @extended Then $sFormat = StringReplace($sFormat, $Stamp, $Mounth_Raw+0)

    $sFormat = StringRegExpReplace($sFormat, '(?i)y+', $Year)

    $sFormat = StringReplace($sFormat, "mm",$Minutes_Raw)
    $sFormat = StringReplace($sFormat, "m", $Minutes_Raw+0)

    $sFormat = StringReplace($sFormat, "dd",$Day_Raw)
    $sFormat = StringReplace($sFormat, "d", $Day_Raw+0)

    $sFormat = StringReplace($sFormat, "hh",$Hours_Raw)
    $sFormat = StringReplace($sFormat, "h", $Hours_Raw+0)

    $sFormat = StringReplace($sFormat, "ss",$Seconds_Raw)
    $sFormat = StringReplace($sFormat, "s", $Seconds_Raw+0)

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

Отправлено: 11:19, 13-08-2007 | #295


Аватара для Maza Faka

Ветеран


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

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


Упрощённая схема кода:

Код: Выделить весь код
#include <GuiConstants.au3>
Dim $msg, $time = 3000

GUICreate("Test", 300, 200)
GUISetState()

AdlibEnable("Play", $time)

While $msg <> $Gui_Event_Close
    $msg = GUIGetMsg()
WEnd

Func Play()
    SoundPlay(@ScriptDir & "\24.wav")
    $time = 10000
EndFunc
Как присвоить переменной $time значение 10000, что бы
Код: Выделить весь код
 AdlibEnable("Play", $time)
вызывал функцию с этим новым значением переменной?

Отправлено: 12:17, 13-08-2007 | #296


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


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

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


Добрый день!
не подскажет ли кто по сочетаниям клавиш в AutoIt...SendKey.
программа выполняет сохранение файла в Exel. Меню "Файл"- >Enter->-5 раз Down - будет "сохранить как"
Но! другие пользователи поменяли меню "Файл", удалив из него открыть и закрыть...в результате 5 раз Down получилось - печать! скрипт не работает по идее надо бы сделать сочетание клавиш Ctrl+S, но
ControlSend("^{S}") просто печатает в ячейке S. не могу понять в чем дело( в кодировках? как быть?
Буду благодарна за любой ответ.

Отправлено: 17:16, 13-08-2007 | #297


Аватара для Maza Faka

Ветеран


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

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


SvetlanaK
Попробуй так:
Код: Выделить весь код
Opt("WinTitleMatchMode", 1)
If WinExists("Microsoft Excel") Then WinActivate("Microsoft Excel")
	Send("^s")

Отправлено: 17:33, 13-08-2007 | #298


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

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


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

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


SvetlanaK
Можно и с помощью COM:
Код: Выделить весь код
$sFilePath = 'D:\MyDoc\Sample.xls' ;путь файла для выполнения действий над ним

$oExcel = ObjGet("", "Excel.Application") ; "схватить" существующий объект Excel (например, файл уже открыт в Excel)
If @error Then ; в случае неудачи создаем новый объект Excel и открываем требуемый файл
    $oExcel = ObjCreate("Excel.Application") ; создать объект Excel
    If Not IsObj($oExcel) Then Exit ; выйти, если не удалось создать объект Excel
    If FileExists($sFilePath) Then $oExcel.Workbooks.Open ($sFilePath) ; открыть в Excel указанный файл
EndIf

$oExcel.CalculateFull ; пересчитать формулы (это просто для примера, здесь можно выполнять массу других действий)
$oExcel.DisplayAlerts = 0 ; отключить предупреждения
$oExcel.Save ; сохранить файл
$oExcel.Quit ; выйти
P.S. Все вышеприведенные действия будут выполнены в hidden-режиме (за одним исключением - если на момент запуска скрипта файл открыт в Excel "руками"). Скрытый режим использован потому, что при данных условиях нет смысла отображать окно Excel - это приведет к неприятному мельканию...

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

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

Отправлено: 21:43, 13-08-2007 | #299


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
например так
Гинеально! Работает лучше чем ожидалось!

Я правда добавил небольшую подстраховку на $Stamp

Код: Выделить весь код
Func _DateTimeConvertFormat($sFormat)
    Local $Stamp = '<_>'
    While StringInStr($sFormat, $Stamp)
        $Stamp = '<'& Random(10000000,99999999,1) &'>'
    WEnd

        StringReplace($sFormat, "y", "")
    Local $Year = StringRight(@YEAR, @extended)
    Local $Mounth = @MON
    Local $Day = @MDAY
    Local $Hours = @HOUR
    Local $Minutes = @MIN
    Local $Seconds = @SEC

    $sFormat = StringRegExpReplace($sFormat, "(?i)(?:(d+|y+)(\W*)(mm)|(mm)(\W*)(d+|y+))", '\1\2' & $Stamp & '\5\6')
    If @extended Then $sFormat = StringReplace($sFormat, $Stamp, $Mounth)
    $sFormat = StringRegExpReplace($sFormat, "(?i)(?:(d+|y+)(\W*)(m)|(m)(\W*)(d+|y+))", '\1\2' & $Stamp & '\5\6')
    If @extended Then $sFormat = StringReplace($sFormat, $Stamp, $Mounth+0)

        $sFormat = StringRegExpReplace($sFormat, '(?i)y+', $Year)

        $sFormat = StringReplace($sFormat, "mm",$Minutes)
    $sFormat = StringReplace($sFormat, "m", $Minutes+0)

        $sFormat = StringReplace($sFormat, "dd",$Day)
    $sFormat = StringReplace($sFormat, "d", $Day+0)

        $sFormat = StringReplace($sFormat, "hh",$Hours)
    $sFormat = StringReplace($sFormat, "h", $Hours+0)

        $sFormat = StringReplace($sFormat, "ss",$Seconds)
    $sFormat = StringReplace($sFormat, "s", $Seconds+0)

        Return $sFormat
EndFunc
Шанс конечно очень маленький (а точнее мизерный) на то что будет сгенерирован штамп существующий в передаваемом формате даты/времени, но он всё же есть

Maza Faka,
Цитата:
Как присвоить переменной $time значение 10000, что бы
AdlibEnable("Play", $time)
вызывал функцию с этим новым значением переменной?
Просто вызови по новой функцию :

Код: Выделить весь код
#include <GuiConstants.au3>
Dim $msg, $time = 3000

GUICreate("Test", 300, 200)
GUISetState()

AdlibEnable("Play", $time)

While $msg <> $Gui_Event_Close
    $msg = GUIGetMsg()
WEnd

Func Play()
    SoundPlay(@ScriptDir & "\24.wav")
    $time = 10000
    AdlibEnable("Play", $time)
EndFunc
SvetlanaK,
Цитата:
ControlSend("^{S}") просто печатает в ячейке S
Потому что там фокус находится...
Попробуй активировать окно Excel (тем самым убрав фокус с ячеек), затем вызвать клавиши.
Но тут возможна всплывёт другая проблема - если раскладка языка клавиатуры по умолчанию будет русской к примеру, тогда это сочетание не сработает, нужно будет делать так:

Код: Выделить весь код
If @KBLayout = 0419 Then
    Send("^ы")
Else
    Send("^s")
EndIf
Есть ещё один такой подводный камушек - а если изменять профиль сочетании клавиш в Excel? не знаком с ним, но полагаю там есть такая возможность?

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

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

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

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

Отправлено: 21:46, 13-08-2007 | #300



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход