hey autoitler
Wer kennt es nicht: man will etwas programmieren und weiß man hat eine udf dafür, aber man hat den namen vergessen... nachdem man dann 10 minuten den include-ordner durchsucht hat und wiederum die udf nach der passenden funktion sind bereits 15 minuten vergangen. Dann hat man sich den Funkionsnamen rauskopiert und ins script eingefügt... script wird gestartet und da kommt der fehler: "called with wrong number of args" man hat natürlich die udf schon wieder geschlossen und hat keinen plan welcher parameter fehlt oder zuviel ist ... sowas muss ja nicht sein^^
deshalb stelle ich auch hier im autoit forum mein UDF installer vor. Man kann mit ihr sehr schnell und einfach UDFs erstellen und importieren. Wo liegt jetzt der vorteil fragt ihr euch? ganz einfach: der udf-installer hat eine offline-datenbank der udfs, wo euch alle angezeigt werden (in nächster version auch unterteil in standart & nicht-standart udfs), somit habt ihr immer alle auf einen Blick. Zweiter Vorteil ist, dass es eine online-datenbank gibt (momentan noch nicht implementiert, aber die nächste version wird diesen monat noch fertig^^). In dieser Datenbank könnt ihr eure udfs veröffentlichen und udfs von anderen downloaden, bewerten und kommentieren. Ein weiterer Vorteil ist, dass die UDF einen simplen Hash-schutz bekommt. Somit werdet ihr darauf hingewiesen, wenn an der udf etwas verändert wurde. Der letzte und entscheidenste Vorteil ist aber wahrscheinlich, dass eure UDF gehighlighted werden (wie die standartudfs auch) und dass euch zu euren Befehlen ein Tooltip angezeigt wird (ebenfalls wie bei den normalen Funktionen!). Die Tooltips können individuell gestalltet werden =) Es werden natürlich noch mehr Funktionen geboten, aber das solltet ihr lieber selbst herausfinden
Zitat von AMrKBitte beachtet, dass das Konzept und die Funktionen (insbesondere die Funktionen Au3Install, Au3GetFunctions, Au3GetHash, Au3CreateInformation, Au3GetInformation, UpdateGetVersion und vorallem die _TCPDownload -Funktion) mein Eigentum sind und nicht außerhalb des UDF-Installers ohne meine Erlaubnis genutzt werden dürfen!
Source 1.1
#NoTrayIcon
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon.ico
#AutoIt3Wrapper_Outfile=UDF Installer.exe
#AutoIt3Wrapper_Res_Comment=Erstellt und installiert UDFs
#AutoIt3Wrapper_Res_Description=By AMrK
#AutoIt3Wrapper_Res_Fileversion=1.1
#AutoIt3Wrapper_Res_LegalCopyright=Alexander 'AMRK' Mattis
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <String.au3>
#include <GuiComboBox.au3>
#include <GuiListBox.au3>
#include <Array.au3>
#include <IE.au3>
If $CmdLine[0] = 1 Then
If StringTrimLeft($CmdLine[1], 15) = 'update/' Then
UpdateGetVersion()
ElseIf StringTrimLeft($CmdLine[1], 15) = 'upload/' Then
UploadUDF()
EndIf
Exit
EndIf
DirRemove(@TempDir & '\udfinstaller_update', 1)
[/autoit] [autoit][/autoit] [autoit]#compiler_plugin_funcs = MD5Hash
[/autoit] [autoit][/autoit] [autoit]Opt('GUIOnEventMode', 1)
Opt('GUICloseOnESC', 0)
Opt('MustDeclareVars', 1)
Global $MD5Plugin = PluginOpen(@ScriptDir & "\MD5Hash.dll")
Global $oNews, $oSammlung, $Form, $Tabs, $install_searchfile, $install_path, $install_autor, $install_version, $install_datum, $install_copyright
Global $create_about, $create_autor, $create_copyright, $create_datum, $create_path, $create_searchfile, $create_version, $install_about, $sammlung_offline_liste
Global $create_installlist, $create_notinstalllist, $create_add, $create_remove, $create_tooltip, $create_export, $Gui_LastListBox, $install_start
Global $create_Tooltips[1], $create_nTooltips[1], $create_FilePath = "", $create_FileName = "", $install_Funcs[1], $install_tools[1], $create_tooltip_s
Global $dir_install, $dir_scite, $dir_properties, $dir_api, $dir_include, $install_FilePath, $sammlung_offline, $install_filehash, $install_functions
Global $file_api, $file_keywords, $bool_firstrun
Const $iBiuld = 2
[/autoit] [autoit][/autoit] [autoit]RegWrite('HKEY_CLASSES_ROOT\udfinstaller', '', 'REG_SZ', 'URL:udfinstaller protocol')
RegWrite('HKEY_CLASSES_ROOT\udfinstaller', 'URL Protocol', 'REG_SZ', '')
RegWrite('HKEY_CLASSES_ROOT\udfinstaller\DefaultIcon', '', 'REG_SZ', @ScriptFullPath)
RegWrite('HKEY_CLASSES_ROOT\udfinstaller\Shell\Open\Command', '', 'REG_SZ', '"' & @ScriptFullPath & '" %1')
ProgressOn("Starte UDF-Installer", "Überprüfe Updates", "Bitte warten...")
UpdateGetVersion()
ProgressSet(50, "Bitte warten...", "Starte ActiveX")
$oNews = _IECreateEmbedded()
$oSammlung = _IECreateEmbedded()
ProgressSet(80, "Bitte warten...", "Initialisiere User-Interface")
$Form = GUICreate("UDF Installer", 605, 406)
$Tabs = GUICtrlCreateTab(2, 5, 600, 400, $TCS_BUTTONS)
GUICtrlCreateTabItem("News")
GUICtrlCreateObj($oNews, 4, 30, 596, 370)
GuiSetActiveX($oNews, 1)
GUICtrlCreateTabItem("UDF Installieren")
$install_searchfile = GUICtrlCreatePic(@ScriptDir & '\data\search.jpg', 5, 35, 20, 20)
$install_path = GUICtrlCreateCombo("", 30, 35, 567, 20)
GUICtrlCreateLabel("Autor:", 10, 63, 70, 20)
GUICtrlCreateLabel("Version:", 10, 88, 70, 20)
GUICtrlCreateLabel("Datum:", 10, 113, 70, 20)
GUICtrlCreateLabel("Copyright:", 10, 138, 70, 20)
GUICtrlCreateLabel("Beschreibung:", 10, 163, 70, 20)
GUICtrlCreateLabel("File-Hash:", 10, 188, 70, 20)
GUICtrlCreateLabel("Die UDF beinhaltet folgende Funktionen:", 200, 215, 300, 20)
$install_autor = GUICtrlCreateInput("", 80, 60, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_version = GUICtrlCreateInput("", 80, 85, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_datum = GUICtrlCreateInput("", 80, 110, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_copyright = GUICtrlCreateInput("", 80, 135, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_about = GUICtrlCreateInput("", 80, 160, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_filehash = GUICtrlCreateInput("", 80, 186, 517, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
$install_functions = GUICtrlCreateList("", 10, 235, 587, 100, $WS_BORDER)
$install_start = GUICtrlCreateButton("Installieren", 252, 350, 100, 25)
GUICtrlCreateTabItem("UDF Erstellen")
$create_searchfile = GUICtrlCreatePic(@ScriptDir & '\data\search.jpg', 5, 35, 20, 20)
GUICtrlCreateLabel("Autor:", 10, 63, 70, 20)
GUICtrlCreateLabel("Version:", 10, 88, 70, 20)
GUICtrlCreateLabel("Datum:", 10, 113, 70, 20)
GUICtrlCreateLabel("Copyright:", 10, 138, 70, 20)
GUICtrlCreateLabel("Beschreibung:", 10, 163, 70, 20)
GUICtrlCreateLabel("Installieren:", 30, 200, 100, 20)
GUICtrlCreateLabel("Nicht Installieren:", 320, 200, 100, 20)
GUICtrlCreateLabel("Scite Funktions-Tooltip:", 10, 335, 120, 20)
GUICtrlCreateLabel("Bei der Installation wird die komplette UDF kopiert!" & _
" Diese Auswahl bestimmt lediglich, welche Funktionen später in Scite sichtbar sind...", 20, 320, 570, 10)
GUICtrlSetFont(-1, 7)
$create_path = GUICtrlCreateCombo("", 30, 35, 567, 20)
$create_autor = GUICtrlCreateInput("", 80, 60, 517, 20)
$create_version = GUICtrlCreateInput("", 80, 85, 517, 20)
$create_datum = GUICtrlCreateInput("", 80, 110, 517, 20)
$create_copyright = GUICtrlCreateInput("", 80, 135, 517, 20)
$create_about = GUICtrlCreateInput("", 80, 160, 517, 20)
$create_installlist = GUICtrlCreateList("", 30, 220, 250, 100)
$create_notinstalllist = GUICtrlCreateList("", 320, 220, 250, 100)
$create_add = GUICtrlCreateButton("<=", 290, 240, 20, 20)
$create_remove = GUICtrlCreateButton("=>", 290, 270, 20, 20)
$create_tooltip = GUICtrlCreateInput("", 10, 350, 505, 20)
$create_tooltip_s = GUICtrlCreateButton("Speichern", 520, 350, 75, 20)
$create_export = GUICtrlCreateButton("Exportieren", 252, 375, 100, 25)
$sammlung_offline = GUICtrlCreateTabItem("UDF Eigene Sammlung")
$sammlung_offline_liste = GUICtrlCreateList("", 7, 35, 585, 340)
GUICtrlCreateTabItem("UDF Online Sammlung")
GUICtrlCreateObj($oSammlung, 4, 30, 596, 370)
GuiSetActiveX($oSammlung, 2)
GUICtrlCreateTabItem("")
ProgressOff()
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, 'GuiTerminate')
GUICtrlSetOnEvent($install_searchfile, 'GuiFileOpen')
GUICtrlSetOnEvent($create_searchfile, 'GuiFileOpen')
GUICtrlSetOnEvent($create_installlist, 'GuiFunctionTooltip')
GUICtrlSetOnEvent($create_notinstalllist, 'GuiFunctionTooltip')
GUICtrlSetOnEvent($create_add, 'GuiFunctionAdd')
GUICtrlSetOnEvent($create_remove, 'GuiFunctionRemove')
GUICtrlSetOnEvent($create_tooltip_s, 'GuiSaveTooltip')
GUICtrlSetOnEvent($create_export, 'GuiExport')
GUICtrlSetOnEvent($install_start, 'Au3Install')
GUICtrlSetOnEvent($Tabs, 'GuiRefreshSammlung')
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$bool_firstrun = IniRead(@ScriptDir & '\settings.ini', 'udfinstaller', 'firstrun', 1)
If $bool_firstrun = 1 Then
If FileExists(@ScriptDir & '\settings.ini') Then FileDelete(@ScriptDir & '\settings.ini')
IniWrite(@ScriptDir & '\settings.ini', 'udfinstaller', 'firstrun', 0)
EndIf
$dir_install = IniRead(@ScriptDir & '\settings.ini', 'autoit', 'isntalldir', "")
If $dir_install = "" Then
If @OSVersion = "WIN_XP" Or @OSVersion = "WIN_VISTA" Then
$dir_install = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir')
Else
$dir_install = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt', 'InstallDir')
EndIf
If @error Or DirGetSize($dir_install) = -1 Then
If (IniRead(@ScriptDir & '\settings.ini', 'autoit', 'isntalldir', '') <> '') And (DirGetSize(IniRead(@ScriptDir & '\settings.ini', 'autoit', 'isntalldir', '')) > -1) Then
$dir_install = IniRead(@ScriptDir & '\settings.ini', 'autoit', 'isntalldir', '')
Else
$dir_install = FileSelectFolder('Bitte AutoIt-Ordner auswählen...', '', 2)
If @error Then GUIInstallError(7)
EndIf
EndIf
If MsgBox(270404, "Bestätigung", "Befindet sich der AutoIt 3 Ordner unter folgendem Pfad: " & $dir_install & "?") = 7 Then
$dir_install = FileSelectFolder('Bitte AutoIt-Ordner auswählen...', '', 2)
If @error Then GUIInstallError(7)
EndIf
IniWrite(@ScriptDir & '\settings.ini', 'autoit', 'isntalldir', $dir_install)
EndIf
$dir_scite = $dir_install & '\SciTE'
If DirGetSize($dir_scite) = -1 Then
GUIInstallError(1)
EndIf
$dir_properties = $dir_scite & '\Properties'
If DirGetSize($dir_properties) = -1 Then
GUIInstallError(2)
EndIf
$dir_api = $dir_scite & '\api'
If DirGetSize($dir_properties) = -1 Then
GUIInstallError(3)
EndIf
$dir_include = $dir_install & '\Include'
If DirGetSize($dir_include) = -1 Then
GUIInstallError(4)
EndIf
$file_api = $dir_api & '\au3.api'
If FileGetSize($file_api) = -1 Then
GUIInstallError(5)
EndIf
$file_keywords = $dir_properties & '\au3.keywords.properties'
If FileGetSize($file_api) = -1 Then
GUIInstallError(6)
EndIf
While 1
Sleep(250)
WEnd
Func UploadUDF()
Local $sFile, $iSocket, $sPost, $sPacket, $sHeader
MsgBox(270384, "Fehler", "Diese Funktion ist in dieser Version noch nicht möglich!")
#cs
$sFile = FileOpenDialog("Bitte suche ein Au3-Script...", "", "AutoIt 3 Script (*.au3)", 3)
If Not @error Then
$sPost = ''
$sPacket = 'POST /udfinstaller/upload.php HTTP/1.1' & @CRLF & _
'Host: blackscreen.bl.funpic.de' & @CRLF & _
'User-Agent: udfinstaller' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & _
'Cookie: cken=1261409604' & @CRLF & _
'Content-Type: multipart/form-data; boundary=---------------------------281452328116827' & @CRLF & _
'Content-Length: ' & StringLen($sPost) & @CRLF & @CRLF & $sPost
TCPStartup()
$iSocket = TCPConnect(TCPNameToIP('http://blackscreen.bl.funpic.de'),80)
TCPSend($iSocket, $sPacket)
Do
$sHeader = TCPRecv($iSocket, 512)
Until $sHeader <> ''
TCPCloseSocket($iSocket)
TCPShutdown()
MsgBox(0,"", $sHeader)
EndIf
#ce
EndFunc ;==>UploadUDF
Func UpdateGetVersion()
If Ping('blackscreen.bl.funpic.de') Then
Local $iSocket, $sPacket, $sHeader, $iLen, $sFile, $sPath, $aPath, $hFile, $sIp, $sHost
$sPacket = 'GET /udfinstaller/update.ini HTTP/1.1' & @CRLF & _
'Host: blackscreen.bl.funpic.de' & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & @CRLF
TCPStartup()
$iSocket = TCPConnect(TCPNameToIP('http://blackscreen.bl.funpic.de'), 80)
If TCPSend($iSocket, $sPacket) Then
Do
$sHeader = TCPRecv($iSocket, 512)
Until $sHeader <> ''
Do
$sHeader &= TCPRecv($iSocket, 512)
Until StringInStr($sHeader, @CRLF & @CRLF)
$sFile = StringTrimLeft($sHeader, StringInStr($sHeader, @CRLF & @CRLF, 1) + 3)
$sHeader = StringLeft($sHeader, StringInStr($sHeader, @CRLF & @CRLF, 1) + 3)
$iLen = _StringBetween($sHeader, 'Content-Length: ', @CRLF, 1)
If Not IsArray($iLen) Then
MsgBox(270384, "Fehler", "Es konnte keine Verbindung zum Updateserver hergestellt werden!")
Return -1
EndIf
Do
$sFile &= TCPRecv($iSocket, 512)
Until StringLen($sFile) >= $iLen[0]
EndIf
TCPCloseSocket($iSocket)
TCPShutdown()
If FileExists(@TempDir & '\udfi_update.ini') Then FileDelete(@TempDir & '\udfi_update.ini')
FileWrite(@TempDir & '\udfi_update.ini', $sFile)
If IniRead(@TempDir & '\udfi_update.ini', 'update', 'build', 1) <> $iBiuld Then
ProgressOff()
ProgressOn("Update", "Downloade Datei...", IniRead(@TempDir & '\udfi_update.ini', 'update', 'version', 1) & " (" & IniRead(@TempDir & '\udfi_update.ini', 'update', 'date', 1) & ")")
If FileExists(@TempDir & '\udf_installer.upd') Then FileDelete(@TempDir & '\udf_installer.upd')
$sPath = IniRead(@TempDir & '\udfi_update.ini', 'update', 'path', "")
$sIp = IniRead(@TempDir & '\udfi_update.ini', 'update', 'ip', "")
$sHost = IniRead(@TempDir & '\udfi_update.ini', 'update', 'host', "")
If ($sPath = "") Or ($sIp = "") Or ($sHost = "") Then GUIInstallError(8)
[/autoit] [autoit][/autoit] [autoit]If StringLower(StringLeft($sPath, 7)) <> 'http://' Then $sPath = 'http://' & $sPath
[/autoit] [autoit][/autoit] [autoit]DirRemove(@TempDir & '\udfinstaller_update', 1)
DirCreate(@TempDir & '\udfinstaller_update')
If FileExists(@TempDir & '\udf_installer.upd') Then FileDelete(@TempDir & '\udf_installer.upd')
_TCPDownload($sIp, $sHost, $sPath, @TempDir & '\udf_installer.upd')
[/autoit] [autoit][/autoit] [autoit]If Not FileExists(@TempDir & '\7z.exe') Then FileInstall("C:\Programme\7-Zip\7z.exe", @TempDir & '\7z.exe')
RunWait('"' & @TempDir & '\7z.exe" e "' & @TempDir & '\udf_installer.upd"', @TempDir & '\udfinstaller_update', @SW_HIDE)
Run(@TempDir & '\udfinstaller_update\setup.exe "' & @ScriptFullPath & '"')
Exit
EndIf
Else
MsgBox(270384, "Fehler", "Es konnte keine Verbindung zum Updateserver hergestellt werden!")
EndIf
EndFunc ;==>UpdateGetVersion
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $iCmd
$iCmd = BitShift($iwParam, 16)
If $ilParam = GUICtrlGetHandle($install_path) Then
If $iCmd = $CBN_EDITCHANGE Then GuiComboAutocomplete($install_path)
ElseIf $ilParam = GUICtrlGetHandle($create_path) Then
If $iCmd = $CBN_EDITCHANGE Then GuiComboAutocomplete($create_path)
EndIf
EndFunc ;==>WM_COMMAND
Func GuiRefreshSammlung()
If GUICtrlRead(@GUI_CtrlId) = 3 Then
Local $hFile, $i, $sLine
For $i = 1 To _GUICtrlListBox_GetCount($sammlung_offline_liste)
_GUICtrlListBox_DeleteString($sammlung_offline_liste, 0)
Next
$hFile = FileFindFirstFile($dir_include & '\*.au3')
_GUICtrlListBox_BeginUpdate($sammlung_offline_liste)
While 1
$sLine = FileFindNextFile($hFile)
If @error Then ExitLoop
_GUICtrlListBox_AddString($sammlung_offline_liste, $sLine)
WEnd
_GUICtrlListBox_EndUpdate($sammlung_offline_liste)
FileClose($hFile)
EndIf
EndFunc ;==>GuiRefreshSammlung
Func GuiComboAutocomplete($iIdent)
_GUICtrlComboBox_AutoComplete($iIdent)
EndFunc ;==>GuiComboAutocomplete
Func GuiFunctionTooltip()
If @GUI_CtrlId = $create_installlist Then
GUICtrlSetData($create_tooltip, $create_Tooltips[_GUICtrlListBox_GetCurSel(@GUI_CtrlId)])
Else
GUICtrlSetData($create_tooltip, $create_nTooltips[_GUICtrlListBox_GetCurSel(@GUI_CtrlId) + 1])
EndIf
$Gui_LastListBox = @GUI_CtrlId
EndFunc ;==>GuiFunctionTooltip
Func GuiFunctionRemove()
Local $iItem
$iItem = _GUICtrlListBox_GetCurSel($create_installlist)
If $iItem <> -1 Then
_ArrayAdd($create_nTooltips, $create_Tooltips[$iItem])
_ArrayDelete($create_Tooltips, $iItem)
_GUICtrlListBox_AddString($create_notinstalllist, _GUICtrlListBox_GetText($create_installlist, $iItem))
_GUICtrlListBox_DeleteString($create_installlist, $iItem)
EndIf
EndFunc ;==>GuiFunctionRemove
Func GuiFunctionAdd()
Local $iItem
$iItem = _GUICtrlListBox_GetCurSel($create_notinstalllist)
If $iItem <> -1 Then
_ArrayAdd($create_Tooltips, $create_nTooltips[$iItem + 1])
_ArrayDelete($create_nTooltips, $iItem + 1)
_GUICtrlListBox_AddString($create_installlist, _GUICtrlListBox_GetText($create_notinstalllist, $iItem))
_GUICtrlListBox_DeleteString($create_notinstalllist, $iItem)
EndIf
EndFunc ;==>GuiFunctionAdd
Func GuiSaveTooltip()
If $Gui_LastListBox = $create_installlist Then
$create_Tooltips[_GUICtrlListBox_GetCurSel($create_installlist)] = GUICtrlRead($create_tooltip)
Else
$create_nTooltips[_GUICtrlListBox_GetCurSel($create_notinstalllist) + 1] = GUICtrlRead($create_tooltip)
EndIf
EndFunc ;==>GuiSaveTooltip
Func GuiExport()
Local $sSaveDialog, $hFile, $sFile, $sInformation
If StringReplace(GUICtrlRead($create_about), " ", "") = "" Then GUICtrlSetData($create_about, 'Keine Angaben')
If StringReplace(GUICtrlRead($create_autor), " ", "") = "" Then GUICtrlSetData($create_autor, 'Keine Angaben')
If StringReplace(GUICtrlRead($create_copyright), " ", "") = "" Then GUICtrlSetData($create_copyright, 'Keine Angaben')
If StringReplace(GUICtrlRead($create_datum), " ", "") = "" Then GUICtrlSetData($create_datum, 'Keine Angaben')
If StringReplace(GUICtrlRead($create_version), " ", "") = "" Then GUICtrlSetData($create_version, 'Keine Angaben')
$sSaveDialog = FileSaveDialog("Speichern unter...", "", "Exportierte UDF (*.au3)", 18, $create_FileName)
If (Not @error) And $sSaveDialog <> "" Then
$sInformation = Au3CreateInformation($create_FilePath)
$hFile = FileOpen($create_FilePath, 0)
$sFile = FileRead($hFile)
FileClose($hFile)
If FileExists($sSaveDialog) Then FileDelete($sSaveDialog)
$hFile = FileOpen($sSaveDialog, 1)
FileWrite($hFile, $sInformation & $sFile)
FileClose($hFile)
MsgBox(270400, "Fertig", "Die UDF wurde erfolgreich exportiert")
EndIf
EndFunc ;==>GuiExport
Func GuiFileOpen()
Local $sPath, $sFileHash, $sFuncList, $sFunctions, $i, $sScriptHash, $iFunctions
If @GUI_CtrlId = $install_searchfile Then
$sPath = FileOpenDialog("Bitte suche ein Au3-Script...", "", "AutoIt 3 Script (*.au3)", 3)
If (Not @error) And ($sPath <> "") Then
ProgressOn("Öffne UDF...", "Bitte warten")
$install_FilePath = $sPath
_GUICtrlComboBox_BeginUpdate($install_path)
If _GUICtrlComboBox_SelectString($install_path, $sPath) <> -1 Then
_GUICtrlComboBox_SetCurSel($install_path, _GUICtrlComboBox_SelectString($install_path, $sPath))
Else
_GUICtrlComboBox_SetCurSel($install_path, _GUICtrlComboBox_AddString($install_path, $sPath))
EndIf
_GUICtrlComboBox_EndUpdate($install_path)
For $i = 1 To _GUICtrlListBox_GetCount($install_functions)
_GUICtrlListBox_DeleteString($install_functions, 0)
Next
If Au3GetInformation($sPath, 'author') <> -1 Then
GUICtrlSetData($install_autor, Au3GetInformation($sPath, 'author'))
GUICtrlSetData($install_version, Au3GetInformation($sPath, 'version'))
GUICtrlSetData($install_datum, Au3GetInformation($sPath, 'date'))
GUICtrlSetData($install_copyright, Au3GetInformation($sPath, 'copyright'))
GUICtrlSetData($install_about, Au3GetInformation($sPath, 'about'))
$iFunctions = Au3GetInformation($sPath, 'functions')
ReDim $install_Funcs[$iFunctions]
ReDim $install_tools[$iFunctions]
_GUICtrlListBox_BeginUpdate($install_functions)
For $i = 1 To $iFunctions
$install_Funcs[$i - 1] = Au3GetInformation($sPath, 'func' & $i)
$install_tools[$i - 1] = Au3GetInformation($sPath, 'tool' & $i)
_GUICtrlListBox_AddString($install_functions, $install_Funcs[$i - 1])
Next
_GUICtrlListBox_EndUpdate($install_functions)
$sFileHash = Au3GetInformation($sPath, 'filehash')
If $sFileHash <> "" Then
$sScriptHash = Au3GetHash($sPath)
If $sScriptHash <> $sFileHash Then
GUICtrlSetData($install_filehash, 'Info Hash: ' & $sFileHash & ' Wirklicher Hash: ' & $sScriptHash)
MsgBox(270352, "Wichtige Warnung", "Achtung: Die ausgewählte Datei wurde nach dem erstellen mit UDF-Installer verändert! Dies kann zufolge haben, dass das Skript nicht mehr den beschriebenen Inhalt enthällt. Er enthällt nöglicherweise schädigende Daten oder ein Script, welches gegen das Urheberrecht vestößt.")
Else
GUICtrlSetData($install_filehash, $sFileHash)
EndIf
Else
GUICtrlSetData($install_filehash, 'Fehlt')
MsgBox(270384, "Warnung", "Achtung: Die ausgewählte Datei besitzt kein SecuredFileHash. Sie ist nicht mit UDF-Installer erstellt worden und enthällt möglicherweise schädigende Daten oder ein Script, welches gegen das Urheberrecht vestößt.")
EndIf
Else
GUICtrlSetData($install_autor, 'Fehlt')
GUICtrlSetData($install_version, 'Fehlt')
GUICtrlSetData($install_datum, 'Fehlt')
GUICtrlSetData($install_copyright, 'Fehlt')
GUICtrlSetData($install_about, 'Fehlt')
GUICtrlSetData($install_filehash, 'Fehlt')
MsgBox(270384, "Warnung", "Achtung: Sie ist nicht mit UDF-Installer erstellt worden und enthällt möglicherweise schädigende Daten oder ein Script, welches gegen das Urheberrecht vestößt.")
EndIf
ProgressOff()
EndIf
Else
$sPath = FileOpenDialog("Bitte suche ein Au3-Script...", "", "AutoIt 3 Script (*.au3)", 3)
If (Not @error) And ($sPath <> "") Then
ProgressOn("Öffne UDF...", "Bitte warten")
$create_FilePath = $sPath
$create_FileName = GetFileName($sPath)
_GUICtrlComboBox_BeginUpdate($create_path)
If _GUICtrlComboBox_SelectString($create_path, $sPath) <> -1 Then
_GUICtrlComboBox_SetCurSel($create_path, _GUICtrlComboBox_SelectString($create_path, $sPath))
Else
_GUICtrlComboBox_SetCurSel($create_path, _GUICtrlComboBox_AddString($create_path, $sPath))
EndIf
_GUICtrlComboBox_EndUpdate($create_path)
GUICtrlSetData($create_autor, Au3GetInformation($sPath, 'author'))
GUICtrlSetData($create_version, Au3GetInformation($sPath, 'version'))
GUICtrlSetData($create_datum, Au3GetInformation($sPath, 'date'))
GUICtrlSetData($create_copyright, Au3GetInformation($sPath, 'copyright'))
GUICtrlSetData($create_about, Au3GetInformation($sPath, 'about'))
For $i = 1 To _GUICtrlListBox_GetCount($create_installlist)
_GUICtrlListBox_DeleteString($create_installlist, 0)
Next
For $i = 1 To _GUICtrlListBox_GetCount($create_notinstalllist)
_GUICtrlListBox_DeleteString($create_notinstalllist, 0)
Next
$sFunctions = Au3GetFunctions($sPath)
If IsArray($sFunctions) Then
ReDim $create_Tooltips[UBound($sFunctions)]
ReDim $create_nTooltips[1]
$create_nTooltips[0] = ""
_GUICtrlListBox_BeginUpdate($create_installlist)
For $i = 0 To UBound($sFunctions) - 1
_GUICtrlListBox_AddString($create_installlist, $sFunctions[$i])
$create_Tooltips[$i] = '(Benötigt die "' & $create_FileName & '")'
Next
_GUICtrlListBox_EndUpdate($create_installlist)
Else
MsgBox(270400, "Hinweis", "Die ausgewählte UDF enthällt keine Funktionen.")
EndIf
ProgressOff()
EndIf
EndIf
EndFunc ;==>GuiFileOpen
Func Au3Install()
Local $hFile, $sLine, $i, $j, $sFile, $iPosUDF, $iPosUDFEND, $sNewFileStart, $sNewFileBetween, $sNewFileEnd, $aSplit, $sLastLine, $aFuncname, $sVersion
If FileExists($install_FilePath) Then
If FileExists($dir_include & '\' & GetFileName($install_FilePath)) Then
$sVersion = Au3GetInformation($dir_include & '\' & GetFileName($install_FilePath), 'version')
If $sVersion = "" Then
If MsgBox(270404, "Bestätigung", "Die UDF existiert bereits, wurde allerdings nicht mit dem UDF-Installer erstellt. Willst du die vorhandenene Datei überschreiben?") = 7 Then Return -1
Else
If MsgBox(270404, "Bestätigung", "Die UDF existiert bereits als Version '" & $sVersion & "'. Du installierst gerade Version '" & GUICtrlRead($install_version) & "'. Willst du die vorhandenene Datei überschreiben?") = 7 Then Return -1
EndIf
FileDelete($dir_include & '\' & GetFileName($install_FilePath))
EndIf
FileCopy($install_FilePath, $dir_include & '\' & GetFileName($install_FilePath))
[/autoit] [autoit][/autoit] [autoit]ProgressOn("Installiere", "Verwerte Dateien...", "Lese API")
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen($file_api, 1)
For $i = 0 To UBound($install_Funcs) - 1
FileWrite($hFile, @CRLF & $install_Funcs[$i] & ' ' & $install_tools[$i])
Next
FileClose($hFile)
ProgressSet(5, "Lese Keywords")
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen($file_keywords, 0)
$sFile = FileRead($hFile)
FileClose($hFile)
ProgressSet(10, "Verwerte Keywords")
[/autoit] [autoit][/autoit] [autoit]$iPosUDF = StringInStr($sFile, 'au3.keywords.udfs=', 1)
$sNewFileStart = StringLeft($sFile, $iPosUDF - 1)
$iPosUDFEND = StringInStr(StringTrimLeft($sFile, $iPosUDF), 'au3.keywords.', 1)
$sNewFileEnd = StringTrimLeft($sFile, $iPosUDF + $iPosUDFEND - 1)
$sNewFileBetween = StringLeft(StringTrimLeft($sFile, $iPosUDF - 1), $iPosUDFEND)
$sNewFileBetween = StringTrimLeft($sNewFileBetween, 18)
$sNewFileBetween = StringReplace($sNewFileBetween, @TAB, "")
$sNewFileBetween = StringReplace($sNewFileBetween, ' \' & @CRLF, " ", 0, 1)
$sNewFileBetween = StringReplace($sNewFileBetween, '\' & @CRLF, "", 0, 1)
While (StringRight($sNewFileBetween, 1) = @CR) Or (StringRight($sNewFileBetween, 1) = @LF) Or (StringRight($sNewFileBetween, 1) = @TAB) Or (StringRight($sNewFileBetween, 1) = ' ')
$sNewFileBetween = StringTrimRight($sNewFileBetween, 1)
WEnd
ProgressSet(15, "Überprüfe vorhandene Keywords", "Installiere...")
[/autoit] [autoit][/autoit] [autoit]$aSplit = StringSplit($sNewFileBetween, ' ', 1)
$j = 1
Do
ProgressSet(15 + ($j / $aSplit[0] * 50), "Überprüfe vorhandene Keywords", "Installiere...")
For $i = 0 To UBound($install_Funcs) - 1
If StringLower(Au3GetFuncName($aSplit[$j])) = StringLower(Au3GetFuncName($install_Funcs[$i])) Then
_ArrayDelete($aSplit, $j)
$j -= 1
$aSplit[0] -= 1
ExitLoop
EndIf
Next
$j += 1
Until $j = $aSplit[0]
For $i = 0 To UBound($install_Funcs) - 1
ProgressSet(65 + (($i + 1) / UBound($install_Funcs) * 10), "Schreibe neue Keywords", "Installiere...")
_ArrayAdd($aSplit, Au3GetFuncName($install_Funcs[$i]))
$aSplit[0] += 1
Next
$sNewFileBetween = 'au3.keywords.udfs='
$j = 1
For $i = 1 To $aSplit[0]
ProgressSet(75 + (($i + 1) / UBound($install_Funcs) * 25), "Speichere Keywords", "Installiere...")
$sNewFileBetween &= $aSplit[$i] & ' '
If $j = 7 Then
$sNewFileBetween &= '\' & @CRLF & @TAB
$j = 1
Else
$j += 1
EndIf
Next
If StringRight($sNewFileBetween, 1) = @TAB Then
$sNewFileBetween = StringTrimRight($sNewFileBetween, 1)
Else
$sNewFileBetween &= @CRLF
EndIf
FileDelete($file_keywords)
[/autoit] [autoit][/autoit] [autoit]$hFile = FileOpen($file_keywords, 1)
FileWrite($hFile, $sNewFileStart & $sNewFileBetween & $sNewFileEnd)
FileClose($hFile)
ProgressOff()
If ProcessExists("SciTE.exe") Then
If MsgBox(270404, "Fertig", "Die UDF wurde erfolgreich installiert." & @CRLF & "Damit du sie sofort verwenden kannst, musst du Scite neustarten." & @CRLF & "Scite jetzt neustarten (Wichtig: Nicht gespeicherte Daten gehen dabei verloren!)?") <> 7 Then
ProcessClose("SciTE.exe")
Run($dir_scite & '\SciTE.exe', $dir_scite)
EndIf
Else
MsgBox(270400, "Fertig", "Die UDF wurde erfolgreich installiert und kann sofort genutzt werden.")
EndIf
Else
MsgBox(270400, "Fehler", "Es ist momentan keine UDF geöffnet. Benutzte den Durchsuchen-Button oben links um eine UDF zu öffnen.")
EndIf
EndFunc ;==>Au3Install
Func Au3GetFunctions($sPath)
Local $iFile, $sFile, $aSplit
$iFile = FileOpen($sPath, 0)
$sFile = FileRead($sPath)
FileClose($iFile)
$aSplit = _StringBetween($sFile, 'Func ', @CRLF)
If @error Then
Return ""
Else
Return $aSplit
EndIf
EndFunc ;==>Au3GetFunctions
Func Au3GetHash($sPath)
Local $iFile, $sFile, $iPosStart, $iPosEnd, $sOriginal, $aSplit
$iFile = FileOpen($sPath, 0)
$sFile = FileRead($sPath)
FileClose($iFile)
$iPosStart = StringInStr($sFile, ';#udfinstaller_auth', 1)
If $iPosStart Then
$sOriginal = StringLeft($sFile, $iPosStart - 1)
$sFile = StringTrimLeft($sFile, $iPosStart - 1)
$iPosEnd = StringInStr($sFile, @CRLF, 1)
If $iPosEnd Then
$sOriginal &= StringTrimLeft($sFile, $iPosEnd + 1)
Return StringLower(MD5Hash($sOriginal, 2, True))
Else
Return False
EndIf
Else
Return False
EndIf
EndFunc ;==>Au3GetHash
Func Au3CreateInformation($sPath)
Local $sInformation, $sPacket, $i
$sPacket = ';#udfinstaller_auth = "'
$sInformation = @LF & 'author' & @LF & GUICtrlRead($create_autor) & @LF & '/author' & @LF & _
@LF & 'version' & @LF & GUICtrlRead($create_version) & @LF & '/version' & @LF & _
@LF & 'date' & @LF & GUICtrlRead($create_datum) & @LF & '/date' & @LF & _
@LF & 'copyright' & @LF & GUICtrlRead($create_copyright) & @LF & '/copyright' & @LF & _
@LF & 'about' & @LF & GUICtrlRead($create_about) & @LF & '/about' & @LF & _
@LF & 'filehash' & @LF & StringLower(MD5Hash($sPath, 1, True)) & @LF & '/filehash' & @LF & _
@LF & 'functions' & @LF & _GUICtrlListBox_GetCount($create_installlist) & @LF & '/functions' & @LF
For $i = 1 To _GUICtrlListBox_GetCount($create_installlist)
$sInformation &= @LF & 'func' & $i & @LF & _GUICtrlListBox_GetText($create_installlist, $i - 1) & @LF & '/func' & $i & @LF
$sInformation &= @LF & 'tool' & $i & @LF & $create_Tooltips[$i - 1] & @LF & '/tool' & $i & @LF
Next
Return $sPacket & StringToBinary($sInformation) & '"' & @CRLF
EndFunc ;==>Au3CreateInformation
Func Au3GetInformation($sPath, $sInformation)
Local $iFile, $sFile, $iPos, $sLine, $aSplit
$iFile = FileOpen($sPath, 0)
$sFile = FileRead($sPath)
FileClose($iFile)
$iPos = StringInStr($sFile, '#udfinstaller_auth')
If $iPos Then
$sLine = StringTrimLeft($sFile, $iPos)
$aSplit = _StringBetween($sLine, '"', '"', 1)
$sLine = BinaryToString($aSplit[0])
$aSplit = _StringBetween($sLine, @LF & $sInformation & @LF, @LF & '/' & $sInformation & @LF, 1)
If @error Then
Return ""
Else
Return $aSplit[0]
EndIf
Else
Return ""
EndIf
EndFunc ;==>Au3GetInformation
Func GetFileName($sPath)
Local $aSplit
$aSplit = StringSplit($sPath, '\')
Return $aSplit[$aSplit[0]]
EndFunc ;==>GetFileName
Func Au3GetFuncName($sString)
Local $aSplit
$sString = StringReplace($sString, ' ', '')
$aSplit = StringSplit($sString, '(')
Return $aSplit[1]
EndFunc ;==>Au3GetFuncName
Func DateGet()
Return @MDAY & "." & @MON & "." & @YEAR
EndFunc ;==>DateGet
Func GuiTerminate()
PluginClose($MD5Plugin)
GUIDelete($Form)
Exit
EndFunc ;==>GuiTerminate
Func GuiSetActiveX($oIE, $iType)
If Ping('http://blackscreen.bl.funpic.de') Then
If $iType = 1 Then
_IENavigate($oIE, 'http://blackscreen.bl.funpic.de/udfinstaller/news.php', 0)
Else
_IENavigate($oIE, 'http://blackscreen.bl.funpic.de/udfinstaller/sammlung.php', 0)
EndIf
Else
If $iType = 1 Then
If FileExists(@TempDir & '\udfi_news.html') Then FileDelete(@TempDir & '\udfi_news.html')
FileWrite(@TempDir & '\udfi_news.html', '<html><body><h1>UDF Installer</h1></body></html>')
_IENavigate($oIE, @TempDir & '\udfi_news.html', 0)
Else
If FileExists(@TempDir & '\udfi_sammlung.html') Then FileDelete(@TempDir & '\udfi_sammlung.html')
FileWrite(@TempDir & '\udfi_news.html', '<html><body><h1>Momentan kein Zugriff</h1></body></html>')
_IENavigate($oIE, @TempDir & '\udfi_sammlung.html', 0)
EndIf
EndIf
EndFunc ;==>GuiSetActiveX
Func GUIInstallError($iID)
Switch $iID
Case 1
MsgBox(270352, "Fataler Fehler", "Scite konnte nicht unter '" & $dir_scite & "' gefunden werden!")
Case 2
MsgBox(270352, "Fataler Fehler", "Scite-Properties konnte nicht unter '" & $dir_scite & "' gefunden werden!")
Case 3
MsgBox(270352, "Fataler Fehler", "Scite-Api konnte nicht unter '" & $dir_scite & "' gefunden werden!")
Case 4
MsgBox(270352, "Fataler Fehler", "Includes konnte nicht unter '" & $dir_include & "' gefunden werden!")
Case 5
MsgBox(270352, "Fataler Fehler", "Scite-Api konnte nicht unter '" & $file_api & "' gefunden werden!")
Case 6
MsgBox(270352, "Fataler Fehler", "Scite-Keywords konnte nicht unter '" & $file_keywords & "' gefunden werden!")
Case 7
MsgBox(270352, "Fataler Fehler", "Du musst den AutoIt-Ordner auswählen!")
Case 8
MsgBox(270352, "Fataler Fehler", "Während des Patchvorgangs ist ein Fehler aufgetreten!")
EndSwitch
Exit
EndFunc ;==>GUIInstallError
Func _TCPDownload($ip, $host, $file, $path)
Local $iSocket, $sPacket, $sHeader, $iLen, $aSplit, $sFile
$sPacket = 'GET /' & $file & ' HTTP/1.1' & @CRLF & _
'Host: ' & $host & @CRLF & _
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)' & @CRLF & _
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF & _
'Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF & _
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7' & @CRLF & _
'Keep-Alive: 300' & @CRLF & _
'Connection: keep-alive' & @CRLF & @CRLF
TCPStartup()
$iSocket = TCPConnect($ip, 80)
If TCPSend($iSocket, $sPacket) Then
Do
$sHeader = TCPRecv($iSocket, 1024)
Until $sHeader <> ''
$sHeader = BinaryToString($sHeader)
$iLen = _StringBetween($sHeader, 'Content-Length: ', @CRLF, 1)
$aSplit = StringSplit($sHeader, @CRLF & @CRLF, 1)
$sFile = $aSplit[2]
Do
$sFile &= BinaryToString(TCPRecv($iSocket, 1024))
ProgressSet(Ceiling(StringLen($sFile) / $iLen[0] * 100))
Until StringLen($sFile) >= $iLen[0]
FileWrite($path, StringToBinary($sFile))
EndIf
TCPCloseSocket($iSocket)
TCPShutdown()
EndFunc ;==>_TCPDownload
Ihr benötigt 1 Bild und eine dll die im Anhang, sowie das script selbst enthalten sind: autoit.de/wcf/attachment/7283/
Feedback gerne gesehen, Verbesserungen und die neusten Updates sind im AutoItBot-Forum zu finden
MfG AMrK