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

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

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

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

   

AZJIO



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

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_OutFile=create_lnk.exe
#AutoIt3Wrapper_icon=Icon_30.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=create_lnk.exe
#AutoIt3Wrapper_Res_Fileversion=1.1.0.1
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion
;**** Directives created by AutoIt3Wrapper_GUI ****
 
#Include <File.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#NoTrayIcon ;скрыть в системной панели индикатор AutoIt
 
Global $Stack[50], $Stack1[50], $aRecords
 
; начало создания окна, вкладок, кнопок.
GUICreate("Создание ярлыков",468,318, -1, -1, -1, $WS_EX_ACCEPTFILES) ; размер окна
 
$tab=GUICtrlCreateTab (4,5, 460,310) ; размер вкладки
GUICtrlCreateLabel ("используйте drag-and-drop", 170,5,140,18)
$icocheck1 = GUICtrlCreateCheckbox("иконка принудительно", 320, 5, 140, 18)
GUICtrlSetTip(-1, "Избавляет от проблем при использовании"&@CRLF&"переменных в путях ярлыка")
 
$tab1=GUICtrlCreateTabitem ("LNK") ; имя вкладки
$CatchDrop = GUICtrlCreateLabel("", 1, 1, 460, 310)
GUICtrlSetState(-1, $GUI_DISABLE + $GUI_DROPACCEPTED)
 
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)
 
GUICtrlCreateLabel ("Кидаем ярлык или *.exe в это окно", 20,283,185,22)
GUICtrlSetColor(-1,0xff0000)    ; Red
 
$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 13.03.2010", 370,290,90,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 = $GUI_EVENT_DROPPED
            If StringRight(@GUI_DRAGFILE, 4) = ".lnk" Or StringRight(@GUI_DRAGFILE, 4) = ".exe"  Then
                AddDropedFiles(@GUI_DRAGFILE)
            EndIf
 
; вкладка auto
        ; создание бэкапа

        Case $msg = $save_group
            $icocheck
=GUICtrlRead ($icocheck1)
           $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]&'\'))
                 If $icocheck = 1 and $aLNK[4]='' Then ; принудительное назначение иконки, если не указана и омечен чекбокс
                    $aLNK[4]=$aLNK[0]
                    $aLNK[5]=0
                 EndIf
                 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&'\'))
                 If $icocheck = 1 and $aLNK[4]='' Then ; принудительное назначение иконки, если не указана и омечен чекбокс
                    $aLNK[4]=$aLNK[0]
                    $aLNK[5]=0
                 EndIf
                  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
 
;======================================================================================================
; функция drag-and-drop для ярлыков и exe-файлов

Func AddDropedFiles($gaDropFiles)
$icocheck=GUICtrlRead ($icocheck1)
; принятие параметров ярлыка
If StringRight( $gaDropFiles, 4 )  = ".lnk" Then
$aLNK = FileGetShortcut($gaDropFiles)
$aPathLNK = StringRegExp($gaDropFiles, "(^.*)\\(.*)$", 3)
$NAME = StringTrimRight($aPathLNK[1], 4)
GUICtrlSetData($NME,$NAME)
GUICtrlSetData($WRK,$aLNK[1])
GUICtrlSetData($ARG,$aLNK[2])
GUICtrlSetData($DSC,$aLNK[3])
If $icocheck = 1 and $aLNK[4]='' Then ; принудительное назначение иконки, если не указана и омечен чекбокс
    GUICtrlSetData($ICO,$aLNK[0])
    GUICtrlSetData($NMR,'0')
Else
    GUICtrlSetData($ICO,$aLNK[4])
    GUICtrlSetData($NMR,$aLNK[5])
EndIf
GUICtrlSetData($EXE,$aLNK[0])
EndIf
; принятие параметров exe-файлов
If StringRight( $gaDropFiles, 4 )  = ".exe" Then
$aPathLNK = StringRegExp($gaDropFiles, "(^.*)\\(.*)$", 3)
$NAME = StringTrimRight($aPathLNK[1], 4)
GUICtrlSetData($NME,$NAME)
GUICtrlSetData($WRK,$aPathLNK[0])
GUICtrlSetData($EXE,$gaDropFiles)
If $icocheck = 1 Then ; принудительное назначение иконки, если не указана и омечен чекбокс
    GUICtrlSetData($ICO,$gaDropFiles)
    GUICtrlSetData($NMR,'0')
Else ; иначе сброс
    GUICtrlSetData($ICO,'')
    GUICtrlSetData($NMR,'')
EndIf
; сброс параметров, если существовали предварительно от предыдущего ярлыка
GUICtrlSetData($ARG,'')
GUICtrlSetData($DSC,'')
EndIf
EndFunc

Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 20:07 22-09-2009 | Исправлено: AZJIO, 20:45 06-04-2010
   

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

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