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

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

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

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

AZJIO



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

Код:
#Include <File.au3>
#include <WindowsConstants.au3>
AutoItSetOption("TrayIconHide", 1) ;скрыть в системной панели индикатор AutoIt
 
Global $Stack[50]
Global $Stack1[50]
Global $aRecords
 
; начало создания окна, вкладок, кнопок.
GUICreate("Создание ярлыков",468,318, -1, -1, -1, $WS_EX_ACCEPTFILES) ; размер окна
$tab=GUICtrlCreateTab (4,5, 460,310) ; размер вкладки
GUICtrlCreateLabel ("используйте drag-and-drop", 250,5,200,18)
 
$tab1=GUICtrlCreateTabitem ("LNK") ; имя вкладки
 
GUICtrlCreateLabel ("Имя ярлыка:", 20,38,125,22)
GUICtrlSetTip(-1, "Имя ярлыка без расширения")
$NME=GUICtrlCreateInput ('', 150,38,295,20)
 
GUICtrlCreateLabel ("Создать ярлык в папке:", 20,71,125,22)
GUICtrlSetTip(-1, "Можно указать прямой путь")
$DIR=GUICtrlCreateCombo ('', 150,67,295,18)
GUICtrlSetData(-1,'текущая|быстрый запуск|рабочий стол|SendTo|главное меню', 'текущая')
 
GUICtrlCreateLabel ("Рабочая папка:", 20,100,125,22)
GUICtrlSetTip(-1, "Папка, которая становится текущей"&@CRLF&"для стартующей программы")
$WRK=GUICtrlCreateInput ('', 150,100,295,20)
 
GUICtrlCreateLabel ("Полный путь к файлу: *", 20,130,125,22)
GUICtrlSetTip(-1, "Путь к файлу запуска (Объект)")
$EXE=GUICtrlCreateInput ('', 150,130,295,20)
GUICtrlSetState(-1,8)
 
GUICtrlCreateLabel ("Параметры запуска:", 20,160,125,22)
GUICtrlSetTip(-1, "Аргумент, ключ")
$ARG=GUICtrlCreateInput ('', 150,160,295,20)
 
GUICtrlCreateLabel ("Комментарий:", 20,190,125,22)
GUICtrlSetTip(-1, "Подробное описание к программе"&@CRLF&"будущая всплывающая подсказка")
$DSC=GUICtrlCreateInput ('', 150,190,295,20)
 
GUICtrlCreateLabel ("Иконка ярлыка:", 20,220,125,22)
GUICtrlSetTip(-1, "Если не указана, то по умолчанию"&@CRLF&" первая иконка стартового файла.")
$ICO=GUICtrlCreateInput ('', 150,220,295,20)
 
GUICtrlCreateLabel ("Номер иконки:", 20,250,125,22)
GUICtrlSetTip(-1, "Указывается для dll, по умолчанию"&@CRLF&"используется первая (отсчёт с нуля)")
$NMR=GUICtrlCreateInput ('', 150,250,295,20)
 
$TAK=GUICtrlCreateInput ('', 100,280,30,22)
GUICtrlSetState(-1,8)
GUICtrlSetTip($TAK, 'Перенести в это поле ярлык или *.exe'&@CRLF&'и нажать "Принять" для автозаполнения')
 
$take_lnk=GUICtrlCreateButton ("Принять", 140,280,70,22)
GUICtrlSetTip(-1, "Перенести ярлык или *.exe в поле слева"&@CRLF&"Принять ярлык для чтения его данных"&@CRLF&"и автозаполнения полей")
 
$read_lnk=GUICtrlCreateButton ("Открыть", 220,280,70,22)
GUICtrlSetTip(-1, "Открыть ярлык для чтения его данных"&@CRLF&"и автозаполнения полей")
$addbase_lnk=GUICtrlCreateButton ("Добавить", 300,280,70,22)
GUICtrlSetTip(-1, "Добавить ярлык в файл бэкапа base_lnk.txt")
$create_lnk=GUICtrlCreateButton ("Создать", 380,280,70,22)
GUICtrlSetTip(-1, "Создать ярлык")
 
$tab2=GUICtrlCreateTabitem ("AUTO") ; имя вкладки
;GUICtrlSetState(-1,16)

 
GUICtrlCreateGroup("Создание бэкапа ярлыков (текстовый файл)", 11, 35, 440, 120)
 
GUICtrlCreateLabel ("Перенести в это поле папку или выделенную группу ярлыков", 20,55,425,22)
$lnk_group=GUICtrlCreateInput ('', 20,75,335,20)
GUICtrlSetState(-1,8)
 
GUICtrlCreateLabel ("Путь к текстовому бэкап-файлу, по умолчанию base_lnk.txt в папке скрипта", 20,105,425,22)
$save_group1=GUICtrlCreateInput ('', 20,125,335,20)
GUICtrlSetState(-1,8)
GUICtrlSetTip($save_group1, "Перенести в это поле текстовый файл"&@CRLF&"создаётся автоматически")
$save_group=GUICtrlCreateButton ("Сохранить", 370,125,70,22)
GUICtrlSetTip(-1, "Сохранить ярлыки в бэкап.")
 
GUICtrlCreateGroup("Восстановление ярлыков из бэкапа", 11, 180, 440, 120)
 
GUICtrlCreateLabel ("Путь к текстовому файлу, по умолчанию base_lnk.txt в текущей папке", 20,200,425,22)
$base_backup1=GUICtrlCreateInput ('', 20,220,335,20)
GUICtrlSetState(-1,8)
GUICtrlSetTip($base_backup1, "Перенести в это поле бэкап-файл.")
 
GUICtrlCreateLabel ("Путь к папке, в которой будут созданы ярлыки, иначе путь из бэкап-файла", 20,250,430,22)
$restore_lnk=GUICtrlCreateInput ('', 20,270,335,20)
GUICtrlSetState(-1,8)
GUICtrlSetTip($restore_lnk, "Перенести в это поле папку,"&@CRLF&"в которой нужно создать ярлыки.")
$restore_lnk1=GUICtrlCreateButton ("Создать", 370,270,70,22)
GUICtrlSetTip(-1, "Создание ярлыков. При наличии"&@CRLF&"base_lnk.txt в папке скрипта"&@CRLF&"поля заполнять не обязательно.")
 
$tab2=GUICtrlCreateTabitem ("?") ; имя вкладки
GUICtrlCreateLabel ("Назначение программы", 30,35,400,22)
GUICtrlCreateLabel ("1. Содание бэкапа ярлыков.", 20,55,440,22)
GUICtrlCreateLabel ("2. Оптимизация ярлыков пересозданием.", 20,75,440,22)
GUICtrlCreateLabel ("3. Создание ярлыков для LiveCD при отсутствии объекта ярлыка.", 20,95,440,22)
GUICtrlCreateLabel ("Дополнительные возможности", 30,125,400,22)
GUICtrlCreateLabel ("1. Автоматическое создание ярлыков (скриптом) из бэкап-файла при загрузке LiveCD.", 20,145,440,22)
GUICtrlCreateLabel ("2. Автозамена данных (пути) в бэкап-файле.", 20,165,440,22)
GUICtrlCreateLabel ("AZJIO 26.10.2009", 380,270,80,32)
 
GUICtrlCreateTabitem ("")   ; конец вкладок
 
GUISetState ()
 
While 1
      $msg = GUIGetMsg()
      Select
        Case
$msg = $create_lnk
           $EXE1
=GUICtrlRead ($EXE)
           If $EXE1<>'' Then
            $aPath = StringRegExp($EXE1, "(^.*)\\(.*)$", 3)
            $EXENAME = StringTrimRight($aPath[1], 4)
            ; чтение параметров из полей ввода
            $NME1=GUICtrlRead ($NME)
            If $NME1='' Then $NME1=$EXENAME
            $DIR1
=GUICtrlRead ($DIR)
            If $DIR1='текущая' Then $DIR1=@ScriptDir
            If $DIR1='быстрый запуск' Then $DIR1=@AppDataDir&'\Microsoft\Internet Explorer\Quick Launch'
            If $DIR1='рабочий стол' Then $DIR1=@UserProfileDir&'\Рабочий стол'
            If $DIR1='SendTo' Then $DIR1=@UserProfileDir&'\SendTo'
            If $DIR1='главное меню' Then $DIR1=@UserProfileDir&'\Главное меню\Программы'
            If StringMid($DIR1, 3, 1)=':' Then $DIR1=$DIR
            $WRK1
=GUICtrlRead ($WRK)
            If $WRK1='' Then $WRK1=$aPath[0]
            $ARG1=GUICtrlRead ($ARG)
            $DSC1=GUICtrlRead ($DSC)
            $ICO1=GUICtrlRead ($ICO)
            $NMR1=GUICtrlRead ($NMR)
            $LNK1=$DIR1&'\'&$NME1
            FileCreateShortcut($EXE1,$LNK1&'.lnk',$WRK1,$ARG1,$DSC1,$ICO1,'',$NMR1)
           Else
            MsgBox(0, "Ошибка", "Минимум параметров - это полный путь к файлу запуска")
           EndIf
        Case
$msg = $read_lnk
           $Path_lnk
= FileOpenDialog("Выбор файла конфигурации сети.", @WorkingDir & "", "Ярлык (*.lnk)", 1 + 4 )
           If @error Then ContinueLoop
           $aLNK = FileGetShortcut($Path_lnk)
           $aPathLNK = StringRegExp($Path_lnk, "(^.*)\\(.*)$", 3)
           $NAME = StringTrimRight($aPathLNK[1], 4)
           GUICtrlSetData($NME,$NAME)
           GUICtrlSetData($WRK,$aLNK[1])
           GUICtrlSetData($ARG,$aLNK[2])
           GUICtrlSetData($DSC,$aLNK[3])
           GUICtrlSetData($ICO,$aLNK[4])
           GUICtrlSetData($NMR,$aLNK[5])
           GUICtrlSetData($EXE,$aLNK[0])
         ; Добавить ярлык в бэкап-файл
        Case $msg = $addbase_lnk
           $EXE1
=GUICtrlRead ($EXE)
           If $EXE1<>'' Then
            $aPath = StringRegExp($EXE1, "(^.*)\\(.*)$", 3)
            $EXENAME = StringTrimRight($aPath[1], 4)
            ; чтение параметров из полей ввода
            $NME1=GUICtrlRead ($NME)
            If $NME1='' Then $NME1=$EXENAME
            $DIR1
=GUICtrlRead ($DIR)
            If $DIR1='текущая' Then $DIR1=@ScriptDir
            If $DIR1='быстрый запуск' Then $DIR1=@AppDataDir&'\Microsoft\Internet Explorer\Quick Launch'
            If $DIR1='рабочий стол' Then $DIR1=@UserProfileDir&'\Рабочий стол'
            If $DIR1='SendTo' Then $DIR1=@UserProfileDir&'\SendTo'
            If $DIR1='главное меню' Then $DIR1=@UserProfileDir&'\Главное меню\Программы'
            If StringMid($DIR1, 3, 1)=':' Then $DIR1=$DIR
            $WRK1
=GUICtrlRead ($WRK)
            If $WRK1='' Then $WRK1=$aPath[0]
            $ARG1=GUICtrlRead ($ARG)
            $DSC1=GUICtrlRead ($DSC)
            $ICO1=GUICtrlRead ($ICO)
            $NMR1=GUICtrlRead ($NMR)
            $LNK1=$DIR1&'\'&$NME1
            $filebase
= FileOpen(@ScriptDir&'\base_lnk.txt', 1)
            ; проверка открытия файла для записи строки
            If $filebase = -1 Then
               MsgBox(0, "Ошибка", "Не возможно открыть файл.")
               Exit
            EndIf
            If
FileGetSize(@ScriptDir&'\base_lnk.txt')=0 Then
               FileWrite($filebase, $DIR1&'|||')
               FileWrite($filebase, @CRLF&'; путь от корневой папки и имя ярлыка|объект|рабочая папка|аргумент|комментарий|путь к файлу с иконкой|номер иконки')
            EndIf
            FileWrite($filebase, @CRLF&$NME1&'|'&$EXE1&'|'&$WRK1&'|'&$ARG1&'|'&$DSC1&'|'&$ICO1&'|'&$NMR1)
            FileClose($filebase)
           Else
            MsgBox(0, "Ошибка", "Минимум параметров - это полный путь к файлу запуска")
           EndIf
        Case
$msg = $take_lnk
           $Path_lnk
=GUICtrlRead ($TAK)
           If $Path_lnk = "" Then ContinueLoop
           If
StringRight( $Path_lnk, 4 )  = ".lnk" Then
           $aLNK = FileGetShortcut($Path_lnk)
           $aPathLNK = StringRegExp($Path_lnk, "(^.*)\\(.*)$", 3)
           $NAME = StringTrimRight($aPathLNK[1], 4)
           GUICtrlSetData($NME,$NAME)
           GUICtrlSetData($WRK,$aLNK[1])
           GUICtrlSetData($ARG,$aLNK[2])
           GUICtrlSetData($DSC,$aLNK[3])
           GUICtrlSetData($ICO,$aLNK[4])
           GUICtrlSetData($NMR,$aLNK[5])
           GUICtrlSetData($EXE,$aLNK[0])
           EndIf
           If
StringRight( $Path_lnk, 4 )  = ".exe" Then
           $aPathLNK = StringRegExp($Path_lnk, "(^.*)\\(.*)$", 3)
           $NAME = StringTrimRight($aPathLNK[1], 4)
           GUICtrlSetData($NME,$NAME)
           GUICtrlSetData($WRK,$aPathLNK[0])
           GUICtrlSetData($EXE,$Path_lnk)
           EndIf
 
; вкладка auto
        ; создание бэкапа

        Case $msg = $save_group
           $lnk_group1
=GUICtrlRead ($lnk_group) ; чтение пути и ярлыков
           $save_group2=GUICtrlRead ($save_group1) ; чтение пути к текстовому файлу
           ;если не указан базовый файл бэкапа, то по умолчанию base_lnk.txt в папке скрипта

           If $save_group2 = '' Then $save_group2=@ScriptDir&'\base_lnk.txt'
 
           ;Определяем тип данных
           ; если в конце LNK или содержит символ "|" но не содержит атрибут "D" то обработать как одиночный ярлык или группу ярлыков

           If StringRight( $lnk_group1, 4 )  = ".lnk" Or StringInStr($lnk_group1, "|") > 0 And StringInStr(FileGetAttrib($lnk_group1), "D") = 0 Then
              $lnk_group1 = StringSplit($lnk_group1, "|")
              For $i=1 To $lnk_group1[0]
                 $aLNK = FileGetShortcut($lnk_group1[$i])
                 $filebase = FileOpen($save_group2, 1)
                 ; проверка открытия файла для записи строки
                 If $filebase = -1 Then
                    MsgBox(0, "Ошибка", "Не возможно открыть файл.")
                    Exit
                 EndIf
                 $aDirlnk=StringRegExp($lnk_group1[$i], "(^.*)\\(.*)$", 3)
                 If FileGetSize($save_group2)=0 Then
                  FileWrite($filebase, $aDirlnk[0]&'|||')
                  FileWrite($filebase, @CRLF&'; путь от корневой папки и имя ярлыка|объект|рабочая папка|аргумент|комментарий|путь к файлу с иконкой|номер иконки')
                 EndIf
                 $NAME = StringTrimRight($lnk_group1[$i], 4)
                 $NAME = StringTrimLeft($NAME, StringLen($aDirlnk[0]&'\'))
                 FileWrite($filebase, @CRLF&$NAME&'|'&$aLNK[0]&'|'&$aLNK[1]&'|'&$aLNK[2]&'|'&$aLNK[3]&'|'&$aLNK[4]&'|'&$aLNK[5])
                 FileClose($filebase)
              Next
            EndIf
 
           ; если содержит атрибут "D" то обработать как каталог
           If StringInStr(FileGetAttrib($lnk_group1), "D") > 0 Then
            FileFindNextFirst($lnk_group1)
            While 1
               $tempname = FileFindNext()
               If $tempname = "" Then ExitLoop
               If StringRight( $tempname, 3 )  = "lnk" Then
                  $aLNK = FileGetShortcut($tempname)
                  $filebase = FileOpen($save_group2, 1)
                  ; проверка открытия файла для записи строки
                  If $filebase = -1 Then
                     MsgBox(0, "Ошибка", "Не возможно открыть файл.")
                     Exit
                  EndIf
                  If FileGetSize($save_group2)=0 Then
                     FileWrite($filebase, $lnk_group1&'|||')
                     FileWrite($filebase, @CRLF&'; путь от корневой папки и имя ярлыка|объект|рабочая папка|аргумент|комментарий|путь к файлу с иконкой|номер иконки')
                  EndIf
                  $NAME = StringTrimRight($tempname, 4)
                  $NAME = StringTrimLeft($NAME, StringLen($lnk_group1&'\'))
                  FileWrite($filebase, @CRLF&$NAME&'|'&$aLNK[0]&'|'&$aLNK[1]&'|'&$aLNK[2]&'|'&$aLNK[3]&'|'&$aLNK[4]&'|'&$aLNK[5])
                  FileClose($filebase)
               EndIf
            WEnd
           EndIf
 
        ; восстановление из бэкапа
        Case $msg = $restore_lnk1
           $restore_lnk2=GUICtrlRead ($restore_lnk) ; путь к папке ярлыков
           $base_backup2=GUICtrlRead ($base_backup1) ;текстовый файл
           ; если не указан бэкап-файл, то используется по умолчанию base_lnk.txt, (содержит путь по умолчанию)
           If $base_backup2 = '' Then $base_backup2 = (@ScriptDir&'\base_lnk.txt')
            ; читаем бэкап-файл в массив
           If Not _FileReadToArray($base_backup2,$aRecords) Then
               MsgBox(4096,"Ошибка", "Ошибка чтения массива", @error)
               Exit
           EndIf
           ; В массиве $aRecords будут содержаться все строки файла...
           ; В массив $aLnk читается каждая строчка состоящая из данных ярлыка
           $aSet = StringSplit($aRecords[1], "|")
           If $restore_lnk2 = '' Then $restore_lnk2 = $aSet[1] ; если не указан путь, установить путь из бэкапа в первой строке
           For $i=3 To $aRecords[0]
            ; решение проблемы пустых строк, пропускать цикл для пустой строки
            If $aRecords[$i]<>'' Then
            $aLnk = StringSplit($aRecords[$i], "|")
            ; проверка, если ярлык содержит "\", то это путь и нужно создать каталог
            If StringInStr($aLnk[1], '\') > 0 Then
              $aDirlnk=StringRegExp($aLnk[1], "(^.*)\\(.*)$", 3)
              If Not FileExists($restore_lnk2&'\'&$aDirlnk[0]) Then DirCreate($restore_lnk2&'\'&$aDirlnk[0])
            EndIf
            ; создание ярлыка
            FileCreateShortcut($aLnk[2],$restore_lnk2&'\'&$aLnk[1]&'.lnk',$aLnk[3],$aLnk[4],$aLnk[5],$aLnk[6],'',$aLnk[7])
            EndIf
           Next
 
        Case $msg = -3
                ExitLoop
        EndSelect
    WEnd
 
;======================================================================================================
; функция поиска всех файлов в каталоге
Func FileFindNextFirst($FindCat)
  $Stack[0] = 1
  $Stack1[1] = $FindCat
  $Stack
[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
  Return $Stack[$Stack[0]]
EndFunc   ;==>FileFindNextFirst
 
Func FileFindNext()
  While 1
    $file = FileFindNextFile($Stack[$Stack[0]])
    If @error Then
      FileClose($Stack[$Stack[0]])
      If $Stack[0] = 1 Then
        Return
""
      Else
        $Stack[0] -= 1
        ContinueLoop
      EndIf
    Else
      If
StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then
        $Stack[0] += 1
        $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file
        $Stack
[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
        ContinueLoop
      Else
        Return
$Stack1[$Stack[0]] & "\" & $file
      EndIf
    EndIf
  WEnd
EndFunc
  ;==>FileFindNext

Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 11:08 26-09-2009 | Исправлено: AZJIO, 11:18 26-09-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru