Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Открыть новую тему     Написать ответ в эту тему

gyra

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Версии для устаревших Windows
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 7932 | Зарегистр. 18-02-2006 | Отправлено: 10:49 23-01-2020 | Исправлено: Egor2020, 14:02 22-03-2021
    Habib2302



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток. Как в каждой папке объединить от 3 до 10 файлов в один exe. Сразу скажу это не текстовые файлы. А объединять вручную от 1000 и более файлов через hex редактор не хочу

    Всего записей: 529 | Зарегистр. 09-05-2012 | Отправлено: 17:11 20-12-2020 | Исправлено: Habib2302, 17:13 20-12-2020
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, пожалуйста подскажите, каким образом проверить целостность всех ключей "INI-файла"?
    Для одного ключа можно примерно так. Буду Вам очень признателен за помощь.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 09:23 22-12-2020 | Исправлено: Artem_Butenko, 09:24 22-12-2020
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Habib2302, не понятно. Сформулируйте более подробно.
     
     
    Artem_Butenko,

    Код:
    $sIniFile = @ScriptDir & "\test.ini"
    Dim $aParams[6] = ["key1", "key2", "key3", "key4", "key5", "key6"] ; создаём массив из списка параметров
    For $i=0 To 5 ; крутим цикл столько раз, сколько у нас параметров. Отсчёт с нуля.
        $sCurKey = IniRead($sIniFile, "section", $aParams[$i], "error")
        If $sCurKey = "error" Then
            MsgBox (0, "","Ошибка параметра: "&$aParams[$i])
        EndIf
    Next

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 21:17 22-12-2020 | Исправлено: ynbIpb, 21:23 22-12-2020
    Habib2302



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Habib2302, не понятно. Сформулируйте более подробно.

    https://yadi.sk/i/GkTH7HmgpINL2A

    Всего записей: 529 | Зарегистр. 09-05-2012 | Отправлено: 23:44 22-12-2020
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Habib2302
    Эту задачу, при условии, что порядок сортировки устраивает, легко решается батником
    Код:
    copy /b x:\path\to\files\*.* x:\path\to\output.file"

    Если дефолтная сортировка не устраивает или нужен особый порядок, то
    Код:
    copy /b file1+file2+..+fileN output.file

    Если это обязательно в AutoIt-скрипте делать, то итоговая команда запускается через RunWait()
    Если делать чисто на AutoIt, то решение будет подлиннее
     
    В общем, решение зависит от (более) конкретной задачи и, возможно, уже имеюшихся наработок/среды

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 00:48 23-12-2020
    Habib2302



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    copy /b file1+file2+..+fileN output.file

    Я думал, что эта команда умеет объединять только текстовые файлы txt

    Всего записей: 529 | Зарегистр. 09-05-2012 | Отправлено: 07:08 23-12-2020
    YS555

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Цитата: copy /b file1+file2+..+fileN output.file   Я думал, что эта команда умеет объединять только текстовые файлы txt

    /b говорит о том, что файлы двоичные!!!
     

    Всего записей: 101 | Зарегистр. 20-02-2008 | Отправлено: 21:27 23-12-2020
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Habib2302
    Да, кода на мноого больше получилось)

    Код:
    #include <File.au3>
    $sMergeFolder = FileSelectFolder ("Select directory", "", 0, @ScriptDir); выбираем основную папку с подпапками
    If $sMergeFolder = "" Then Exit ; если не выбрали, выход
    $aAllSubfolders = _FileListToArray($sMergeFolder, "*", 2); формируем массив из списка подпапок
    If IsArray ($aAllSubfolders) = 0 Then Exit ; если результат не является массивом, значит нет подпапок, выход.
    For $i=1 To $aAllSubfolders[0] ; крутим цикл столько раз, сколько у нас подпапок.
        $aAllfiles = _FileListToArray($sMergeFolder&"\"&$aAllSubfolders[$i], "*.dat", 1); формируем массив и списка *.dat файлов в текущей подпапке
        If IsArray ($aAllfiles) Then ; если результат является массивом, значит есть файлы, выполняем манипуляции
            $hMergedfile = FileOpen ($sMergeFolder&"\"&$aAllSubfolders[$i]&"\Mergedfile.dat", 1+16); создаём объединённый файл
            For $j=1 To $aAllfiles[0]; крутим цикл столько раз, сколько у нас *.dat файлов в текущей подпапке
                $hCurfile = FileOpen ($sMergeFolder&"\"&$aAllSubfolders[$i]&"\"&$aAllfiles[$j], 0+16); открываем текущий файл в режиме чтения + бинарный
                FileWrite ($hMergedfile, FileRead ($hCurfile)) ; пишем в объединённый файл
                FileClose ($hCurfile); закрываем текущий файл
            Next
            FileClose ($hMergedfile); закрываем объединённый файл
        EndIf
    Next
    MsgBox (0, "", "Done!"&@CRLF&$aAllSubfolders[0])

     
    Skif_off, спасибо поправил.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 23:15 23-12-2020 | Исправлено: ynbIpb, 19:29 24-12-2020
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Почему бы не открыть "объединённый файл" до цикла и не дописывать в его конец, без "и объединяем прочитанные данные в одну переменную"? Без вызова Hex() и Binary().

    Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 15:24 24-12-2020
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, пожалуйста подскажите, каким образом выполнить проверку, что каталог не пуст?

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 01:48 09-01-2021
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    FileFindFirstFile( "X:\FOLDER\*.*" )
    If @error Then Каталог пуст

    Так правильнее:

    Код:
    If FileFindFirstFile( "X:\FOLDER\*.*" ) = -1 And @error = 1 Then Каталог пуст


    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 02:11 09-01-2021 | Исправлено: iglezz, 03:09 09-01-2021
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    iglezz
    Можно пример с MSGBox. Верно или нет?

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 03:25 09-01-2021
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Что здесь может быть непонятно?

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 15:46 09-01-2021
    xrun1



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Есть другой вариант. Только проверить папку сначала на существование, если нужно, следует FileExists. Я согласен с iglezz, его вариант оптимальней. Но если хотите, можно так:

    Код:
    #include <WinAPIFiles.au3>
    If _WinAPI_PathIsDirectoryEmpty("C:\Temp\_tc") Then
        MsgBox(64, "Messsage", "Empty !")
    Else
        MsgBox(48, "Messsage", "Not Empty !")
    EndIf
     

    Подробнее in MSDN Library
    или _WinAPI_PathIsDirectoryEmpty

    Всего записей: 716 | Зарегистр. 26-12-2009 | Отправлено: 18:10 09-01-2021 | Исправлено: xrun1, 18:25 09-01-2021
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    iglezz
    Спасибо, туплю я. Сделал следующим образом.
     
    xrun1
    Спасибо, буду знать.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 19:56 09-01-2021 | Исправлено: Artem_Butenko, 19:57 09-01-2021
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В UDF я делал "файловые операции"
     

    Код:
    Func _FO_IsEmptyFolder($sPath)
        If Not _FO_IsDir($sPath) Then Return SetError(1)
        If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
        Local $s = FileFindFirstFile($sPath & '*')
        If $s = -1 Then Return 1
        FileClose($s)
        Return 0
    EndFunc   ;==>_FO_IsEmptyFolder

     
    кстати _WinAPI_PathIsDirectoryEmpty возвращает 0 если папки не существует. Варианта 3, папка пуста, полна и не существует. Отсюда вывод, папка полна или не существует даёт 0, а именно существует и пуста, тогда 1. На PureBasic на днях переписывал именно с 3 значениями.
     
    Примеры выше постами: вы не закрываете дескриптор поиска. Если допустим запускать поиск пустых папок, то вы понаоткрываете миллион дескрипторов поиска и оставите их открытыми до закрытия программы или перезагрузки, если программа была убита.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 14:26 30-01-2021 | Исправлено: AZJIO, 14:52 30-01-2021
    BOBAT



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу помощи, как определить раскладку клавиатуры с периодичностью 100 мс  и переключить значок в трее?

    Всего записей: 1511 | Зарегистр. 07-08-2005 | Отправлено: 08:12 31-01-2021
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BOBAT
    в исходнике Text Correction, строка 313, цикл While

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 14:41 31-01-2021
    BOBAT



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Спасибо, я просто использовал Вашу программу, поменяв иконки на свои

    Всего записей: 1511 | Зарегистр. 07-08-2005 | Отправлено: 19:14 31-01-2021
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BOBAT
    Ну утилита кроме этого имеет полезные функции без которых я уже не могу. Но если этот функционал не нужен, то вот ещё вариант, а также можно самому накодить на PureBasic с компактным размером, пример

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 17:07 01-02-2021 | Исправлено: AZJIO, 17:32 01-02-2021
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru