AZJIO

portable_v1.6_AutoIt3.au3

Nov 9th, 2011
453
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;  @AZJIO 19.03.2010
  2. #NoTrayIcon
  3. Global $AutInp0, $RedInp01, $RedInp02, $OpenCom0, $EditCom0, $CompCom0, $RunCom0, $aPathAut0, $err1, $run_m0, $OpenCom, $EditCom, $CompCom, $RunCom, $filesave1, $aRegList
  4. $as='HKCR\AutoIt3Script'
  5.  
  6. $Gui = GUICreate("Portable AutoIt3",  528, 401, -1, -1, -1, 0x00000010)
  7. $StatusBar = GUICtrlCreateLabel('Строка состояния', 5,383,560,18)
  8. GUICtrlCreateLabel ("используйте drag-and-drop", 250,3,200,18)
  9.  
  10. $tab=GUICtrlCreateTab (0,2, 528,401-20) ; размер вкладки
  11. $hTab = GUICtrlGetHandle($tab)
  12. $tab1=GUICtrlCreateTabitem ("AutoIt3") ; имя вкладки
  13.  
  14. $assreg = GUICtrlCreateButton("Ассоциировать", 380, 40, 122, 25)
  15. GUICtrlSetTip(-1, "Зарегистрировать расширение"&@CRLF&"и контекстное меню с AutoIt3")
  16. $zareg = GUICtrlCreateButton("Зарегистрировать", 380, 71, 122, 25)
  17. GUICtrlSetTip(-1, "Аналогично установке AutoIt3")
  18. $delreg = GUICtrlCreateButton("Удалить регистрацию", 380, 102, 122, 25)
  19. GUICtrlSetTip(-1, "Удалить все упоминания"&@CRLF&"об AutoIt3 в реестре")
  20. $reau3 = GUICtrlCreateButton("1 Создать re_au3", 380, 133, 107, 25)
  21. GUICtrlSetTip(-1, "Для переназначения из контекстного меню"&@CRLF&"Выполнять или Открывать скрипт кликом мыши.")
  22. $reau4 = GUICtrlCreateButton("2 Создать re_au3", 380, 164, 107, 25)
  23. GUICtrlSetTip(-1, "Нестандартный вариант, но даёт возможность"&@CRLF&"в справке выполнять скрипты вместо открытия в редакторе.")
  24. $reaust3 = GUICtrlCreateButton("s", 487, 133, 15, 25)
  25. GUICtrlSetTip(-1, "Выполнить re_au3.au3")
  26. $reaust4 = GUICtrlCreateButton("s", 487, 164, 15, 25)
  27. GUICtrlSetTip(-1, "Выполнить re_au3.au3")
  28.  
  29. $lang=GUICtrlCreateGroup ("Язык контекстного меню", 345, 195, 150, 55)
  30. GUIStartGroup()
  31. $russet = GUICtrlCreateRadio("Russian", 350, 211, 67, 20)
  32. GUICtrlSetTip(-1, "Обновить раскрывающиеся списки")
  33. $enset = GUICtrlCreateRadio("English", 350, 228, 67, 20)
  34. GUICtrlSetTip(-1, "Обновить раскрывающиеся списки")
  35.  
  36. $act=GUICtrlCreateGroup ("Действие кликом мыши", 345, 255, 150, 55)
  37. GUIStartGroup()
  38. $run_m = GUICtrlCreateRadio("Выполнить скрипт", 350, 271, 137, 20)
  39. GUICtrlSetTip(-1, "Сохраняется при выборе")
  40. $open_m = GUICtrlCreateRadio("Открыть скрипт", 350, 288, 137, 20)
  41. GUICtrlSetTip(-1, "Сохраняется при выборе")
  42. If RegRead($as&"\Shell", "") = "Run" Then
  43.     GUICtrlSetState ($run_m,1)
  44. Else
  45.     GUICtrlSetState ($open_m,1)
  46. EndIf
  47.  
  48. $AutLab = GUICtrlCreateLabel("Путь к AutoIt3.exe", 24, 40, 130, 17)
  49. $AutInp = GUICtrlCreateInput("", 24, 57, 305, 21)
  50. GUICtrlSetState(-1,8)
  51. $folder1 = GUICtrlCreateButton("...", 337, 56, 27, 23)
  52. GUICtrlSetFont (-1,13)
  53.  
  54. $RedLab1 = GUICtrlCreateLabel("Путь к основному редактору", 24, 90, 186, 17)
  55. $RedInp1 = GUICtrlCreateInput("", 24, 107, 305, 21)
  56. GUICtrlSetState(-1,8)
  57. $folder2 = GUICtrlCreateButton("...", 337, 106, 27, 23)
  58. GUICtrlSetFont (-1,13)
  59.  
  60. $RedLab2 = GUICtrlCreateLabel("Путь к дополнительному редактору", 24, 140, 186, 17)
  61. $RedInp2 = GUICtrlCreateInput("", 24, 157, 305, 21)
  62. GUICtrlSetState(-1,8)
  63. $folder3 = GUICtrlCreateButton("...", 337, 156, 27, 23)
  64. GUICtrlSetFont (-1,13)
  65.  
  66. $OpenLab=GUICtrlCreateLabel ('Пункт "Открыть"', 20,200,130,20)
  67. $OpenCom=GUICtrlCreateCombo ("", 150,197,180,18)
  68.  
  69. $EditLab=GUICtrlCreateLabel ('Пункт "Изменить"', 20,230,130,20)
  70. $EditCom=GUICtrlCreateCombo ("", 150,227,180,18)
  71.  
  72. $CompLab=GUICtrlCreateLabel ('Пункт "Компилировать"', 20,260,130,20)
  73. $CompCom=GUICtrlCreateCombo ("", 150,257,180,18)
  74.  
  75. $RunLab=GUICtrlCreateLabel ('Пункт "Выполнить"', 20,290,130,20)
  76. $RunCom=GUICtrlCreateCombo ("", 150,287,180,18)
  77.  
  78. If RegRead($as&"\Shell\Open", "") = "Open" Then
  79.     GUICtrlSetState ($enset,1)
  80.     _langen()
  81. Else
  82.     GUICtrlSetState ($russet,1)
  83.     _langrus()
  84. EndIf
  85.  
  86. $auopen = GUICtrlCreateButton("открыть", 152, 37, 55, 20)
  87. GUICtrlSetTip(-1, "Открыть каталог")
  88. $aureg = GUICtrlCreateButton("v реестр", 213, 37, 55, 20)
  89. GUICtrlSetTip(-1, "Прочитать путь из реестра")
  90. $cl = GUICtrlCreateButton("Очистить", 274, 37, 55, 20)
  91. GUICtrlSetTip(-1, "Очистить все (3) поля ввода")
  92.  
  93. $edreg1 = GUICtrlCreateButton("v реестр", 213, 87, 55, 20)
  94. GUICtrlSetTip(-1, "Прочитать путь из реестра")
  95. $root1 = GUICtrlCreateButton("v корень", 274, 87, 55, 20)
  96. GUICtrlSetTip(-1, "Копировать путь от корня AutoIt3.exe")
  97.  
  98. $edreg2 = GUICtrlCreateButton("v реестр", 213, 137, 55, 20)
  99. GUICtrlSetTip(-1, "Прочитать путь из реестра")
  100. $root2 = GUICtrlCreateButton("v корень", 274, 137, 55, 20)
  101. GUICtrlSetTip(-1, "Копировать путь от корня AutoIt3.exe")
  102.  
  103. $Save = GUICtrlCreateButton("Save", 344, 320, 57, 23)
  104. GUICtrlSetTip(-1, "Сохранить путь к AutoIt3"&@CRLF&"создание списка версий.")
  105.  
  106. $SaveCom=GUICtrlCreateCombo ("", 24,405,305,22)
  107. GUICtrlSetTip(-1, "Список версий")
  108.  
  109. If FileExists(@ScriptDir&"\vAutoIt3.txt") Then
  110.     GUICtrlSetPos($SaveCom, 24,320)
  111.     $filesave = FileOpen(@ScriptDir&"\vAutoIt3.txt", 0)
  112.     $filesave1 = FileRead($filesave)
  113.     GUICtrlSetData($SaveCom,$filesave1, '')
  114.     FileClose($filesave)
  115. EndIf
  116.  
  117. $folder4 = GUICtrlCreateButton("Добавить", 344, 350, 57, 23)
  118. GUICtrlSetTip(-1, "Добавить пункт"&@CRLF&"в контекстное меню")
  119. $delitem = GUICtrlCreateButton("Удалить", 411, 350, 57, 23)
  120. GUICtrlSetTip(-1, "Удалить пункт"&@CRLF&"из контекстного меню"&@CRLF&"указанный в списке")
  121. $savereg = GUICtrlCreateButton("SAVE REG", 411, 320, 57, 23)
  122. GUICtrlSetTip(-1, "Сохранить настройки"&@CRLF&"из реестра в reg-файл")
  123. $genlist=GUICtrlCreateCombo ("", 24,350,305,22)
  124. GUICtrlSetTip(-1, "Список контекстного меню"&@CRLF&"в реестре")
  125. _genlist()
  126.  
  127. $tab2=GUICtrlCreateTabitem ("    ?") ; имя вкладки
  128. GUICtrlCreateLabel ('    Данная утилитка поможет портабельно использовать AutoIt3, а также переключаться между версиями; удалить из реестра всю информацию об использовании AutoIt3; назначить любой редактор в качестве основного или дополнительного; переключать действие клика мыши на скрипте в контекстном меню.'&@CRLF&'     Если редактор не указан или автоматически не найден, то ассоциации не прописываются. Наличие каталога Include не проверяется.'&@CRLF&'     Кнопка Save позволяет сохранять несколько путей с указанием версии в файл и при последующем старте выбрать необходимую версию из списка. Не добавляются пути уже существующие в списке. Младшие версии AutoIt3 создают более компактные exe-файлы.'&@CRLF&'     Кнопка "1 Создать re_au3" позволяет не открывая эту программу из контекстного меню скрипта переназначить клик мыши на скрипте между вариантами "Открыть" и "Выполнить".'&@CRLF&'Кнопка "2 Создать re_au3" создаёт нестандартный переназначатель, но с преимуществом: в справке вместо открытия скрипта он будет выполнятся, побочный эффект: в переключателе на радиокнопках "Действие кликом мыши" будет противоположно. Рекомендуется: радиокнопка всегда "Открыть скрипт", и нажатие последовательно кнопок "Ассоциировать" и "s", при условии, что выполнено "2 Создать re_au3"'&@CRLF&'     Кнопками "Добавить / Удалить" можно управлять контекстным меню, пункты которого отображаются в раскрывающемся списке ', 20,40,488,300)
  129. GUICtrlCreateLabel ('@AZJIO  19.03.2010, v1.6', 380,350,130,20)
  130. GUICtrlCreateTabitem ("")   ; конец вкладок
  131.  
  132. ; устранение проблем интерфейса
  133. Switch @OSVersion
  134.     Case 'WIN_2000', 'WIN_XP', 'WIN_2003'
  135.         $Part = 10
  136.     Case Else
  137.         $Part = 11
  138. EndSwitch
  139. $Color = _WinAPI_GetThemeColor($hTab, 'TAB', $Part, 1, 0x0EED)
  140. If Not @error Then
  141.     GUICtrlSetBkColor($russet, $Color)
  142.     GUICtrlSetBkColor($enset, $Color)
  143.     GUICtrlSetBkColor($run_m, $Color)
  144.     GUICtrlSetBkColor($open_m, $Color)
  145.     GUICtrlSetBkColor($lang, $Color)
  146.     GUICtrlSetBkColor($act, $Color)
  147. EndIf
  148.  
  149. ;вызов функций автозаполнения input из реестра
  150. _aureg()
  151. _edreg1()
  152. _edreg2()
  153.  
  154. GUISetState ()
  155.  
  156.     While 1
  157.         $msg = GUIGetMsg()
  158.         Select
  159.             Case $msg = -13
  160.                 If @GUI_DropID=$AutInp Then
  161.                     GUICtrlSetData($AutInp, @GUI_DRAGFILE)
  162.                     GUICtrlSetData ($StatusBar, "Выбран AutoIt3.exe, версия - "&FileGetVersion(@GUI_DRAGFILE))
  163.                 ;заполнение полей редакторов реестровыми путями
  164.                 _edreg1()
  165.                 _edreg2()
  166.                 EndIf
  167.                 If @GUI_DropID=$RedInp1 Then
  168.                     If StringRight(@GUI_DRAGFILE, 4) = ".lnk" Or StringRight(@GUI_DRAGFILE, 4) = ".exe"  Then
  169.                         If StringRight( @GUI_DRAGFILE, 4 )  = ".lnk" Then ; принятие если lnk (ярлык) и объект (exe) в переменную
  170.                             $aLNK = FileGetShortcut(@GUI_DRAGFILE)
  171.                             $EXE=$aLNK[0]
  172.                         EndIf
  173.                         If StringRight( @GUI_DRAGFILE, 4 )  = ".exe" Then $EXE=@GUI_DRAGFILE ; принятие exe-файла
  174.                         GUICtrlSetData($RedInp1, $EXE)
  175.                     Else
  176.                         MsgBox(0, "Ошибка", "Файл не является программой (*.exe).")
  177.                         GUICtrlSetData($RedInp1, '')
  178.                     Endif
  179.                 Endif
  180.                 If @GUI_DropID=$RedInp2 Then
  181.                     If StringRight(@GUI_DRAGFILE, 4) = ".lnk" Or StringRight(@GUI_DRAGFILE, 4) = ".exe"  Then
  182.                         If StringRight( @GUI_DRAGFILE, 4 )  = ".lnk" Then ; принятие если lnk (ярлык) и объект (exe) в переменную
  183.                             $aLNK = FileGetShortcut(@GUI_DRAGFILE)
  184.                             $EXE=$aLNK[0]
  185.                         EndIf
  186.                         If StringRight( @GUI_DRAGFILE, 4 )  = ".exe" Then $EXE=@GUI_DRAGFILE ; принятие exe-файла
  187.                         GUICtrlSetData($RedInp2, $EXE)
  188.                     Else
  189.                         MsgBox(0, "Ошибка", "Файл не является программой (*.exe).")
  190.                         GUICtrlSetData($RedInp2, '')
  191.                     Endif
  192.                 Endif
  193.             Case $msg = $delreg
  194.                 _split()
  195.                 For $i=1 To $aRegList[0]
  196.                     RegDelete($aRegList[$i])
  197.                 Next
  198.                 GUICtrlSetData ($StatusBar, "Удаление регистрации в реестре выполнено.")
  199.             Case $msg = $zareg
  200.                 _read()
  201.                 If $err1<>0 Then ContinueLoop
  202.                 RegWrite("HKCR\.au3","","REG_SZ",'AutoIt3Script')
  203.                 RegWrite($as,"","REG_SZ",'AutoIt v3 Script')
  204.                 RegWrite($as&"\Shell\Open","","REG_SZ",$OpenCom0)
  205.                 RegWrite($as&"\Shell\Open\Command","","REG_SZ",'"'&$RedInp01&'" "%1"')
  206.                 RegWrite($as&"\Shell\Run","","REG_SZ",$RunCom0)
  207.                 RegWrite($as&"\Shell\Run\Command","","REG_SZ",'"'&$AutInp0&'" "%1" %*')
  208.                 RegWrite($as&"\Shell\Compile","","REG_SZ",$CompCom0)
  209.                 RegWrite($as&"\Shell\Compile\Command","","REG_SZ",'"'&$aPathAut0[0]&'\Aut2Exe\Aut2Exe.exe" /in "%l"')
  210.                 RegWrite($as&"\Shell\Edit","","REG_SZ",$EditCom0)
  211.                 RegWrite($as&"\Shell\Edit\Command","","REG_SZ",'"'&$RedInp02&'" "%1"')
  212.                
  213.                 RegWrite($as&"\Shell","","REG_SZ",$run_m0)
  214.                 RegWrite("HKCR\.au3\ShellNew","FileName","REG_SZ",'Template.au3')
  215.                 RegWrite("HKCR\.au3","PerceivedType","REG_SZ",'text')
  216.                 RegWrite("HKCR\.au3\PersistentHandler","","REG_SZ",'{5e941d80-bf96-11cd-b579-08002b30bfeb}')
  217.  
  218.                 RegWrite("HKCR\AutoIt3XScript","","REG_SZ",'AutoIt v3 Encoded Script')
  219.                 RegWrite("HKCR\AutoIt3XScript\Shell","","REG_SZ",'Run')
  220.                 RegWrite("HKCR\AutoIt3XScript\Shell\Run","","REG_SZ",'Run Script')
  221.                 RegWrite("HKCR\AutoIt3XScript\Shell\Run\Command","","REG_SZ",'"'&$AutInp0&'" "%1" %*')
  222.  
  223.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","LastExeDir","REG_SZ",'My Documents')
  224.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","LastScriptDir","REG_SZ",'My Documents')
  225.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","LastIconDir","REG_SZ",'"'&$aPathAut0[0]&'\Aut2Exe\Icons"')
  226.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","LastIcon","REG_SZ",'')
  227.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","LastCompression","REG_DWORD",'2')
  228.                 RegWrite("HKCU\Software\AutoIt v3\Aut2Exe","AllowDecompile","REG_DWORD",'1')
  229.  
  230.                 RegWrite("HKLM\SOFTWARE\AutoIt v3\AutoIt","InstallDir","REG_SZ",$aPathAut0[0])
  231.                 RegWrite("HKLM\SOFTWARE\AutoIt v3\AutoIt","Version","REG_SZ",'v'&FileGetVersion($AutInp0))
  232.                 RegWrite("HKCR\.a3x","","REG_SZ",'AutoIt3XScript')
  233.  
  234.                 RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Au3Info.exe","","REG_SZ",$aPathAut0[0]&'\Au3Info.exe')
  235.                 RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Aut2Exe.exe","","REG_SZ",$aPathAut0[0]&'\Aut2Exe\Aut2Exe.exe')
  236.                 RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoIt3.exe","","REG_SZ",$aPathAut0[0]&'\AutoIt3.exe')
  237.                
  238.                 $un='HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AutoItv3'
  239.                 RegWrite($un,"DisplayName","REG_SZ",'AutoIt v'&FileGetVersion($AutInp0))
  240.                 RegWrite($un,"UninstallString","REG_SZ",$aPathAut0[0]&'\Uninstall.exe')
  241.                 RegWrite($un,"DisplayIcon","REG_SZ",$aPathAut0[0]&'\AutoIt3.exe,0')
  242.                 RegWrite($un,"URLInfoAbout","REG_SZ",'http://www.autoitscript.com/autoit3')
  243.                 RegWrite($un,"Publisher","REG_SZ",'AutoIt Team')
  244.                 RegWrite($un,"NoModify","REG_DWORD",'1')
  245.                 RegWrite($un,"NoRepair","REG_DWORD",'1')
  246.  
  247.                 If FileExists ($aPathAut0[0]&'\AutoItX\AutoItX3.dll') Then ShellExecute(@SystemDir&'\regsvr32.exe','/s "'&$aPathAut0[0]&'\AutoItX\AutoItX3.dll"','','', @SW_HIDE )
  248.                 If FileExists ($aPathAut0[0]&'\Icons\au3script_v10.ico') Then
  249.                     RegWrite($as&"\DefaultIcon","","REG_SZ",$aPathAut0[0]&'\Icons\au3script_v10.ico')
  250.                     RegWrite("HKCR\AutoIt3XScript\DefaultIcon","","REG_SZ",$aPathAut0[0]&'\Icons\au3script_v10.ico')
  251.                     DllCall("shell32.dll", "none", "SHChangeNotify", "long", '0x8000000', "uint", '0x1000', "ptr", '0', "ptr", '0')
  252.                 Endif
  253.                 GUICtrlSetData ($StatusBar, "Регистрация выполнена. Версия AutoIt3 - "&FileGetVersion($AutInp0))
  254.  
  255.             Case $msg = $assreg
  256.                 _read()
  257.                 If $err1<>0 Then ContinueLoop
  258.                     RegWrite("HKCR\.au3","","REG_SZ",'AutoIt3Script')
  259.                     RegWrite($as&"\Shell","","REG_SZ",$run_m0)
  260.                     RegWrite($as,"","REG_SZ",'AutoIt v3 Script')
  261.                     RegWrite($as&"\Shell\Open","","REG_SZ",$OpenCom0)
  262.                     RegWrite($as&"\Shell\Open\Command","","REG_SZ",'"'&$RedInp01&'" "%1"')
  263.                     RegWrite($as&"\Shell\Run","","REG_SZ",$RunCom0)
  264.                     RegWrite($as&"\Shell\Run\Command","","REG_SZ",'"'&$AutInp0&'" "%1" %*')
  265.                     RegWrite($as&"\Shell\Compile","","REG_SZ",$CompCom0)
  266.                     RegWrite($as&"\Shell\Compile\Command","","REG_SZ",'"'&$aPathAut0[0]&'\Aut2Exe\Aut2Exe.exe" /in "%l"')
  267.                     RegWrite($as&"\Shell\Edit","","REG_SZ",$EditCom0)
  268.                     RegWrite($as&"\Shell\Edit\Command","","REG_SZ",'"'&$RedInp02&'" "%1"')
  269.                 If FileExists ($aPathAut0[0]&'\Icons\au3script_v10.ico') Then
  270.                         RegWrite($as&"\DefaultIcon","","REG_SZ",'"'&$aPathAut0[0]&'\Icons\au3script_v10.ico"')
  271.                         RegWrite("HKCR\AutoIt3XScript\DefaultIcon","","REG_SZ",'"'&$aPathAut0[0]&'\Icons\au3script_v10.ico"')
  272.                         DllCall("shell32.dll", "none", "SHChangeNotify", "long", '0x8000000', "uint", '0x1000', "ptr", '0', "ptr", '0')
  273.                 Endif
  274.                     RegWrite("HKLM\SOFTWARE\AutoIt v3\AutoIt","InstallDir","REG_SZ",$aPathAut0[0])
  275.                     ;RegWrite($as&"\DefaultIcon","","REG_SZ",'assot.dll,20')
  276.                 GUICtrlSetData ($StatusBar, "Ассоциации выполнены. Версия AutoIt3 - "&FileGetVersion($AutInp0))
  277.             Case $msg = $reau3
  278.                 _read()
  279.                 If $err1<>0 Then ContinueLoop
  280.                 RegWrite($as&"\Shell\rx_re","","REG_SZ",'Переназначить au3')
  281.                 RegWrite($as&"\Shell\rx_re\Command","","REG_SZ",'"'&$AutInp0&'" "'&$aPathAut0[0]&'\re_au3.au3" %*')
  282.                 $file = FileOpen($aPathAut0[0]&'\re_au3.au3', 2)
  283.                 $sText = '$au3 = RegRead("HKCR\AutoIt3Script\Shell", "")' & @CRLF & 'If RegRead("HKCR\AutoIt3Script\Shell\rx_re", "") = "" Then' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re","","REG_SZ","Переназначить au3")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re\Command","","REG_SZ","""'&$AutInp0&'"" ""'&$aPathAut0[0]&'\re_au3.au3"" %*")' & @CRLF &'EndIf'& @CRLF &'If $au3 = "Open" Then RegWrite("HKCR\AutoIt3Script\Shell","","REG_SZ","Run")'& @CRLF &'If $au3 = "Run" Then RegWrite("HKCR\AutoIt3Script\Shell","","REG_SZ","Open")'& @CRLF
  284.                 FileWrite($file, $sText)
  285.                 FileClose($file)
  286.                 GUICtrlSetData ($StatusBar, "Файл re_au3.au3 создан.")
  287.                 _genlist()
  288.                
  289.             Case $msg = $reau4
  290.                 _read()
  291.                 If $err1<>0 Then ContinueLoop
  292.                 RegWrite($as&"\Shell\rx_re","","REG_SZ",'Переназначить au3')
  293.                 RegWrite($as&"\Shell\rx_re\Command","","REG_SZ",'"'&$AutInp0&'" "'&$aPathAut0[0]&'\re_au3.au3" %*')
  294.                 $file = FileOpen($aPathAut0[0]&'\re_au3.au3', 2)
  295.                 $sText = '$au3 = RegRead("HKCR\AutoIt3Script\Shell\Open", "")' & @CRLF & 'If $au3 = "'&$OpenCom0&'" Then' & @CRLF &'; Старт' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Open","","REG_SZ","'&$RunCom0&'")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Open\Command","","REG_SZ","""'&$AutInp0&'"" ""%1"" %*")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Run","","REG_SZ","'&$OpenCom0&'")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Run\Command","","REG_SZ","""'&$RedInp01&'"" ""%1""")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re","","REG_SZ","Переназначить au3")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re\Command","","REG_SZ","""'&$AutInp0&'"" ""'&$aPathAut0[0]&'\re_au3.au3"" %*")' & @CRLF &'EndIf' & @CRLF & @CRLF &'If $au3 = "'&$RunCom0&'" Then' & @CRLF &'; Открыть' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Run","","REG_SZ","'&$RunCom0&'")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Run\Command","","REG_SZ","""'&$AutInp0&'"" ""%1"" %*")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Open","","REG_SZ","'&$OpenCom0&'")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\Open\Command","","REG_SZ","""'&$RedInp01&'"" ""%1""")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re","","REG_SZ","Переназначить au3")' & @CRLF &'RegWrite("HKCR\AutoIt3Script\Shell\rx_re\Command","","REG_SZ","""'&$AutInp0&'"" ""'&$aPathAut0[0]&'\re_au3.au3"" %*")' & @CRLF &'EndIf' & @CRLF
  296.                 FileWrite($file, $sText)
  297.                 FileClose($file)
  298.                 GUICtrlSetData ($StatusBar, "Файл re_au3.au3 создан.")
  299.                 _genlist()
  300.                    
  301.                     ; кнопки выбора языка
  302.             Case $msg = $russet
  303.                 _clear()
  304.                 _langrus()
  305.             Case $msg = $enset
  306.                 _clear()
  307.                 _langen()
  308.                
  309.             Case $msg = $run_m
  310.                 RegWrite($as&"\Shell","","REG_SZ",'Run')
  311.             Case $msg = $open_m
  312.                 RegWrite($as&"\Shell","","REG_SZ",'Open')
  313.                
  314.                 ;  мелкие кнопки
  315.             Case $msg = $auopen
  316.                 $AutInp0=GUICtrlRead ($AutInp)
  317.                 If FileExists($AutInp0) Then
  318.                     $aPathAut0 = StringRegExp($AutInp0, "(^.*)\\(.*)$", 3)
  319.                 Else
  320.                     ContinueLoop
  321.                 EndIf
  322.                 If FileExists($aPathAut0[0]) Then Run('Explorer.exe '&$aPathAut0[0])
  323.             Case $msg = $aureg
  324.                 _aureg()
  325.             Case $msg = $edreg1
  326.                 _edreg1()
  327.             Case $msg = $root1
  328.                 _read()
  329.                 If $err1<>0 Then ContinueLoop
  330.                 GUICtrlSetData($RedInp1, $aPathAut0[0]&'\SciTE\SciTE.exe')
  331.             Case $msg = $edreg2
  332.                 _edreg2()
  333.             Case $msg = $root2
  334.                 _read()
  335.                 If $err1<>0 Then ContinueLoop
  336.                 GUICtrlSetData($RedInp2, $aPathAut0[0]&'\SciTE\SciTE.exe')
  337.             Case $msg = $cl
  338.                 GUICtrlSetData($AutInp, '')
  339.                 GUICtrlSetData($RedInp1, '')
  340.                 GUICtrlSetData($RedInp2, '')
  341.                
  342.             Case $msg = $Save
  343.                 $filesave = FileOpen(@ScriptDir&"\vAutoIt3.txt", 1)
  344.                 _read()
  345.                 ;If StringInStr($filesave1, '\Q'&$AutInp0&'\E')=0 Then
  346.                 If StringRegExp($filesave1, '\Q'&$AutInp0&'\E',0)<>0 Then
  347.                     MsgBox(0, "Ошибка", "Этот путь к AutoIt3.exe уже существует в списке")
  348.                     FileClose($filesave)
  349.                     ContinueLoop
  350.                 EndIf
  351.                 If FileExists($AutInp0) Then
  352.                     FileWrite($filesave, '|'&$AutInp0&' '&FileGetVersion($AutInp0))
  353.                     FileClose($filesave)
  354.                     ; обновление списка
  355.                     $filesave = FileOpen(@ScriptDir&"\vAutoIt3.txt", 0)
  356.                     $filesave1 = FileRead($filesave)
  357.                     FileClose($filesave)
  358.                     GUICtrlSendMsg($SaveCom, 0x14B, 0, 0)
  359.                     GUICtrlSetData($SaveCom,$filesave1, '')
  360.                     GUICtrlSetPos($SaveCom, 24,320)
  361.                 EndIf
  362.             Case $msg = $SaveCom
  363.                 $SaveCom0 = GUICtrlRead ($SaveCom)
  364.                 If StringInStr($SaveCom0,'.exe')<>0 Then
  365.                     $aSC0=StringRegExp($SaveCom0, "(^.*)exe(.*)$", 3)
  366.                     If FileExists($aSC0[0]&'exe') Then
  367.                         GUICtrlSetData ($StatusBar, "Выбран AutoIt3.exe, версия - "&FileGetVersion($aSC0[0]&'exe'))
  368.                     Else
  369.                         GUICtrlSetData ($StatusBar, "Путь неверный")
  370.                     EndIf
  371.                     GUICtrlSetData($AutInp,$aSC0[0]&'exe')
  372.                 EndIf
  373.                 ;заполнение полей редакторов реестровыми путями при выборе из списка SAVE.
  374.                 _edreg1()
  375.                 _edreg2()
  376.                 ; выполнить re_au3.au3
  377.             Case $msg = $reaust3 or $msg = $reaust4
  378.                 _aureg()
  379.                 _read()
  380.                 Run('"'&$AutInp0&'" "'&$aPathAut0[0]&'\re_au3.au3"', '', @SW_HIDE)
  381.                
  382.                 ; кнопки обзор
  383.             Case $msg = $folder1
  384.                 $folder01 = FileOpenDialog("Указать AutoIt3.exe", @WorkingDir & "", "AutoIt3 (*.exe)", 1 + 4 )
  385.                 If @error Then ContinueLoop
  386.                 GUICtrlSetData($AutInp, $folder01)
  387.                 GUICtrlSetData ($StatusBar, "Выбран AutoIt3.exe, версия - "&FileGetVersion($folder01))
  388.             Case $msg = $folder2
  389.                 $folder01 = FileOpenDialog("Указать основной редкатор", @WorkingDir & "", "Редкатор1 (*.exe)", 1 + 4 )
  390.                 If @error Then ContinueLoop
  391.                 GUICtrlSetData($RedInp1, $folder01)
  392.                 GUICtrlSetData ($StatusBar, "Редактор 1 выбран.")
  393.             Case $msg = $folder3
  394.                 $folder01 = FileOpenDialog("Указать дополнительный редкатор", @WorkingDir & "", "Редкатор2 (*.exe)", 1 + 4 )
  395.                 If @error Then ContinueLoop
  396.                 GUICtrlSetData($RedInp2, $folder01)
  397.                 GUICtrlSetData ($StatusBar, "Редактор 2 выбран.")
  398.             Case $msg = $folder4
  399.                 $folder01 = FileOpenDialog("Указать *.exe", @WorkingDir & "", " (*.exe)", 1 + 4 )
  400.                 If @error Then ContinueLoop
  401.                 $aFolder = StringRegExp($folder01, "(^.*)\\(.*)\.(.*)$", 3)
  402.                 If $aFolder[2]='exe' Then
  403.                 If $aFolder[1]='AutoIt3Wrapper' or $aFolder[1]='AutoIt3Wrapper_Gui' or $aFolder[1]='Aut2exe' or $aFolder[1]='Aut2exe_x64' Then
  404.                     RegWrite($as&"\Shell\"&$aFolder[1]&"\command","","REG_SZ",'"'&$folder01&'" /in "%1"')
  405.                 Else
  406.                     RegWrite($as&"\Shell\"&$aFolder[1]&"\command","","REG_SZ",'"'&$folder01&'" "%1"')
  407.                 EndIf
  408.                 EndIf
  409.                 _genlist()
  410.                 GUICtrlSetData ($StatusBar, 'Пункт "'&$aFolder[1]&'" добавлен в контекстное меню')
  411.             Case $msg = $delitem
  412.                 $genlist0=GUICtrlRead ($genlist)
  413.                 RegDelete("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\"&$genlist0)
  414.                 _genlist()
  415.             Case $msg = $savereg
  416.                 _aureg()
  417.                 _read()
  418.                 $Aut_v=FileGetVersion($AutInp0)
  419.                 $tempfile=@TempDir&'\temp8491.reg'
  420.                 ; генерируем имя нового файла с номером копии на случай если файл существует
  421.                 $i = 1
  422.                 While FileExists(@ScriptDir&'\save'&$i&'_AutoIt3_v'&$Aut_v&'.reg')
  423.                    $i +=1
  424.                 WEnd
  425.                 $regfile=@ScriptDir&'\save'&$i&'_AutoIt3_v'&$Aut_v&'.reg'
  426.                 $regfileF = FileOpen($regfile, 1) ; открываем бэкап-файл
  427.                 FileWrite($regfileF,"Windows Registry Editor Version 5.00"&@CRLF&@CRLF)
  428.                 ; массив данных для экспорта
  429.                 _split()
  430.                 $Data=''
  431.                 For $i=1 To $aRegList [0]
  432.                     RunWait ( @Comspec&' /C reg export "'&$aRegList[$i]&'" "'&$tempfile&'"', '', @SW_HIDE )
  433.                     $vr = FileOpen($tempfile, 0)
  434.                     $vr1 = FileRead($vr)
  435.                     $vr1 = StringReplace($vr1, "Windows Registry Editor Version 5.00"&@CRLF, '')
  436.                     $Data &=$vr1
  437.                     FileClose($vr)
  438.                 Next
  439.                 FileWrite($regfileF, $Data&@CRLF)
  440.                 FileClose($regfileF)
  441.             Case $msg = -3
  442.                 ExitLoop
  443.         EndSelect
  444.     WEnd
  445.  
  446. ; создание массива веток реестра
  447. Func _split()
  448. $aRegList = StringSplit( 'HKCR\.a3x|HKCR\.au3|HKCR\AutoIt3Script|HKCR\AutoIt3XScript|HKCR\AutoItX3.Control|HKCR\AutoItX3.Control.1|HKCR\AppID\AutoItX3.DLL|HKCR\AppID\{6E8109C4-F369-415D-AF9A-2AEEFF313234}|HKCR\CLSID\{1A671297-FA74-4422-80FA-6C5D8CE4DE04}|HKCR\CLSID\{3D54C6B8-D283-40E0-8FAB-C97F05947EE8}|HKCR\Interface\{3D54C6B8-D283-40E0-8FAB-C97F05947EE8}|HKCR\TypeLib\{F8937E53-D444-4E71-9275-35B64210CC3B}|HKCU\Software\AutoIt v3|HKLM\SOFTWARE\AutoIt v3\AutoIt|HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Au3Info.exe|HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Aut2Exe.exe|HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AutoIt3.exe|HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AutoItv3', "|")
  449. EndFunc
  450.  
  451. ; чтение пути к AutoIt3 из реестра
  452. Func _aureg()
  453. $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run\Command", "")
  454. If StringInStr($type,'AutoIt3.exe')=0 Then $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Open\Command", "")
  455. If @error=1 Then return
  456. $aPathexe=StringRegExp($type, "(^.*)exe(.*)$", 3)
  457. If @error=1 Then return
  458. $Pathexe1 = StringReplace($aPathexe[0], '"', '')
  459. If FileExists($Pathexe1&'exe') Then
  460.     GUICtrlSetData($AutInp, $Pathexe1&'exe')
  461.     GUICtrlSetData ($StatusBar, "Версия AutoIt3 из реестра - "&FileGetVersion($Pathexe1&'exe'))
  462. EndIf
  463. EndFunc
  464.  
  465. ; чтение пути редактора из реестра
  466. Func _edreg1()
  467. $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Open\Command", "")
  468. If StringInStr($type,'AutoIt3.exe')<>0 Then $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run\Command", "")
  469. If @error=1 Then return
  470. $aPathexe=StringRegExp($type, "(^.*)exe(.*)$", 3)
  471. If @error=1 Then return
  472. $Pathexe1 = StringReplace($aPathexe[0], '"', '')
  473. If FileExists($Pathexe1&'exe') Then GUICtrlSetData($RedInp1, $Pathexe1&'exe')
  474. EndFunc
  475.  
  476. ; чтение пути редактора из реестра
  477. Func _edreg2()
  478. $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Edit\Command", "")
  479. If @error=1 Then return
  480. $aPathexe=StringRegExp($type, "(^.*)exe(.*)$", 3)
  481. If @error=1 Then return
  482. $Pathexe1 = StringReplace($aPathexe[0], '"', '')
  483. If FileExists($Pathexe1&'exe') Then GUICtrlSetData($RedInp2, $Pathexe1&'exe')
  484. EndFunc
  485.  
  486.  
  487. ; заполнение комбобокса списком пунктов реестра
  488. Func _genlist()
  489. GUICtrlSendMsg($genlist, 0x14B, 0, 0)
  490. $regst=''
  491. For $i = 1 to 20
  492. $regShell = RegEnumKey("HKEY_CLASSES_ROOT\AutoIt3Script\Shell", $i)
  493. if @error <> 0 Then ExitLoop
  494. $regst&='|'&$regShell
  495. next
  496. GUICtrlSetData($genlist,$regst, '')
  497. EndFunc
  498.  
  499.  
  500. ; очистка комбобоксов
  501. Func _clear()
  502. GUICtrlSendMsg($OpenCom, 0x14B, 0, 0)
  503. GUICtrlSendMsg($EditCom, 0x14B, 0, 0)
  504. GUICtrlSendMsg($CompCom, 0x14B, 0, 0)
  505. GUICtrlSendMsg($RunCom, 0x14B, 0, 0)
  506. EndFunc
  507.  
  508. ; установка английского языка
  509. Func _langen()
  510. GUICtrlSetData($OpenCom,'Открыть в редакторе|Open', 'Open')
  511. GUICtrlSetData($EditCom,'Изменить|Edit Script', 'Edit Script')
  512. GUICtrlSetData($CompCom,'Компилировать в EXE|Compile Script', 'Compile Script')
  513. GUICtrlSetData($RunCom,'Выполнить скрипт|Run Script', 'Run Script')
  514. EndFunc
  515.  
  516. ; установка русского языка
  517. Func _langrus()
  518. GUICtrlSetData($OpenCom,'Открыть в редакторе|Open', 'Открыть в редакторе')
  519. GUICtrlSetData($EditCom,'Изменить|Edit Script', 'Изменить')
  520. GUICtrlSetData($CompCom,'Компилировать в EXE|Compile Script', 'Компилировать в EXE')
  521. GUICtrlSetData($RunCom,'Выполнить скрипт|Run Script', 'Выполнить скрипт')
  522. EndFunc
  523.  
  524. ; чтение переменных, проверка валидности параметров
  525. Func _read()
  526. $err1=1
  527. If GUICtrlRead ($run_m)=1 Then
  528.     $run_m0='Run'
  529. Else
  530.     $run_m0='Open'
  531. EndIf
  532. $AutInp0=GUICtrlRead ($AutInp)
  533. $RedInp01=GUICtrlRead ($RedInp1)
  534. $RedInp02=GUICtrlRead ($RedInp2)
  535. $OpenCom0=GUICtrlRead ($OpenCom)
  536. $EditCom0=GUICtrlRead ($EditCom)
  537. $CompCom0=GUICtrlRead ($CompCom)
  538. $RunCom0=GUICtrlRead ($RunCom)
  539. If $OpenCom0='' Then $OpenCom0='Open'
  540. If $EditCom0='' Then $EditCom0='Edit Script'
  541. If $CompCom0='' Then $CompCom0='Compile Script'
  542. If $RunCom0='' Then $RunCom0='Run Script'
  543.  
  544. If $AutInp0='' or Not FileExists($AutInp0) Then
  545. MsgBox(0, "Ошибка", "Укажите правильно путь к AutoIt3.exe")
  546. return
  547. EndIf
  548.  
  549. $aPathAut0 = StringRegExp($AutInp0, "(^.*)\\(.*)$", 3)
  550.  
  551. ; пробуем определить редактор1
  552. If Not FileExists($RedInp01) Then
  553.     If FileExists($aPathAut0[0]&'\SciTE\SciTE.exe') Then
  554.         $RedInp01=$aPathAut0[0]&'\SciTE\SciTE.exe'
  555.     Else
  556.         $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Open\Command", "")
  557.         If StringInStr($type,'AutoIt3.exe')<>0 Then $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Run\Command", "")
  558.         If @error=1 Then return
  559.         $aPathexe=StringRegExp($type, "(^.*)exe(.*)$", 3)
  560.         If @error=1 Then return
  561.         $Pathexe1 = StringReplace($aPathexe[0], '"', '')
  562.         If FileExists($Pathexe1&'exe') Then $RedInp01=$Pathexe1&'exe'
  563.     EndIf
  564. EndIf
  565. If Not FileExists($RedInp01) Then MsgBox(0, "Ошибка", "Не найден путь к основному редактору")
  566.  
  567. ; пробуем определить редактор2
  568. If Not FileExists($RedInp02) Then
  569.     If FileExists($aPathAut0[0]&'\SciTE\SciTE.exe') Then
  570.         $RedInp02=$aPathAut0[0]&'\SciTE\SciTE.exe'
  571.     Else
  572.         $type = RegRead("HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Edit\Command", "")
  573.         If @error=1 Then return
  574.         $aPathexe=StringRegExp($type, "(^.*)exe(.*)$", 3)
  575.         If @error=1 Then return
  576.         $Pathexe1 = StringReplace($aPathexe[0], '"', '')
  577.         If FileExists($Pathexe1&'exe') Then $RedInp02=$Pathexe1&'exe'
  578.     EndIf
  579. EndIf
  580. If Not FileExists($RedInp02) Then MsgBox(0, "Ошибка", "Не найден путь к дополнительному редактору")
  581. If FileExists($RedInp02) and $RedInp02<>'' and FileExists($RedInp01) and $RedInp01<>'' and FileExists($AutInp0) and $AutInp0<>'' Then
  582. $err1=0
  583. GUICtrlSetData($RedInp2, $RedInp02)
  584. GUICtrlSetData($RedInp1, $RedInp01)
  585. EndIf
  586. EndFunc
  587.  
  588. ; устранение проблем интерфейса
  589. Func _WinAPI_GetThemeColor($hWnd, $sClass, $iPart, $iState, $iProp)
  590.     Local $hTheme = DllCall('uxtheme.dll', 'ptr', 'OpenThemeData', 'hwnd', $hWnd, 'wstr', $sClass)
  591.     Local $Ret = DllCall('uxtheme.dll', 'lresult', 'GetThemeColor', 'ptr', $hTheme[0], 'int', $iPart, 'int', $iState, 'int', $iProp, 'dword*', 0)
  592.  
  593.     If (@error) Or ($Ret[0] < 0) Then
  594.         $Ret = -1
  595.     EndIf
  596.     DllCall('uxtheme.dll', 'lresult', 'CloseThemeData', 'ptr', $hTheme[0])
  597.     If $Ret = -1 Then
  598.         Return SetError(1, 0, -1)
  599.     EndIf
  600.     Return SetError(0, 0, BitOR(BitAND($Ret[5], 0x00FF00), BitShift(BitAND($Ret[5], 0x0000FF), -16), BitShift(BitAND($Ret[5], 0xFF0000), 16)))
  601. EndFunc   ;==>_WinAPI_GetThemeColor
  602.  
RAW Paste Data