UDF Installer

  • Hallo.
    Ich möchte euch meinen UDF Installer vorstellen.
    Er liest aus einer ausgewählten UDF(.au3) die Funktionen aus. Danach wählt man die Funktionen aus die übernommen werden sollen und drückt auf "Funktionen übernehmen". Nun werden die Funktionen in die "au3.user.calltips.api" geschrieben.
    Die UDF MUSS diese 2 Punkte besitzen:

    Beispiel
    [autoit]

    ; Description ...: Starts up BASS functions.
    ; Syntax.........: _BASS_Startup($sBassDLL)

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Ich weiß das das Script noch sehr fehleranfällig ist, darum hoffe ich das ihr mir Verbesserungsvorschläge geben könnt.

    @32-Bit Benutzer. Der Registry Pfad ist nur geraten und darum bitte verbessern, wenn er falsch ist.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <String.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $GUI = GUICreate("UDF Installer by Higggiii", 546, 418, 262, 379)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $List1 = GUICtrlCreateList("", 8, 32, 241, 344)
    GUICtrlCreateLabel("Verfügbare Funktionen:", 8, 8, 115, 17)
    $List2 = GUICtrlCreateList("", 296, 32, 241, 344)
    $Button1Right = GUICtrlCreateIcon(@ScriptDir & "\Icons\1right.ico", 0, 256, 32, 33, 33)
    GUICtrlSetOnEvent(-1, "_1ToRight")
    $Button1Left = GUICtrlCreateIcon(@ScriptDir & "\Icons\1left.ico", 0, 256, 112, 33, 33)
    GUICtrlSetOnEvent(-1, "_1ToLeft")
    $ButtonAllRight = GUICtrlCreateIcon(@ScriptDir & "\Icons\allright.ico", 0, 256, 72, 33, 33)
    GUICtrlSetOnEvent(-1, "_AllToRight")
    $ButtonAllLeft = GUICtrlCreateIcon(@ScriptDir & "\Icons\allleft.ico", 0, 256, 152, 33, 33)
    GUICtrlSetOnEvent(-1, "_AllToLeft")
    GUICtrlCreateLabel("Funktionen die übernommen werden sollen:", 296, 8, 209, 17)
    $ButtonWriteToAPI = GUICtrlCreateButton("Funktionen übernehmen", 408, 384, 131, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_WriteToAPI")
    $ButtonOpenUDF = GUICtrlCreateButton("UDF öffnen", 8, 384, 131, 25, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "_OpenUDF")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("_ToolTip", 50)
    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _ToolTip()
    $GUIGerCursorInfo = GUIGetCursorInfo($GUI)
    Switch $GUIGerCursorInfo[4]
    Case $Button1Right
    ToolTip("Ausgewählte Funktion nach rechts.")
    Case $Button1Left
    ToolTip("Ausgewählte Funktion nach links.")
    Case $ButtonAllLeft
    ToolTip("Alle Funktionen nach links.")
    Case $ButtonAllRight
    ToolTip("Alle Funktionen nach rechts.")
    Case $ButtonWriteToAPI
    ToolTip("Schreibt alle ausgewählten Funktionen in die au3.user.calltips.api.")
    Case $ButtonOpenUDF
    ToolTip("Öffnet eine UDF zum Einlesen der Funktionen.")
    Case Else
    ToolTip("")
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _OpenUDF()
    $UDF = FileOpenDialog("UDF auswählen", "", "UDF Datei(*.au3)", 1)
    If @error Then
    MyMsg(1)
    Return
    EndIf
    $Open = FileOpen($UDF, 0)
    If @error Then
    MyMsg(2)
    Return
    EndIf
    $Read = FileRead($Open)
    $Functions = _StringBetween($Read, '; Syntax.........: ', ';')
    $Description = _StringBetween($Read, '; Description ...: ', ';')
    For $i = 1 To UBound($Functions) - 1
    If StringInStr($Functions[$i], "(") And StringLeft($Functions[$i], 1) = "_" Or " _" Then
    _GUICtrlListBox_AddString($List1, $Functions[$i])
    EndIf
    Next
    For $i = 1 To UBound($Description) - 1
    _GUICtrlListBox_ReplaceString($List1, $i, _GUICtrlListBox_GetText($List1, $i) & " " & $Description[$i])
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _1ToRight()
    $Function = _GUICtrlListBox_GetText($List1, _GUICtrlListBox_GetCurSel($List1))
    _GUICtrlListBox_AddString($List2, $Function)
    _GUICtrlListBox_DeleteString($List1, _GUICtrlListBox_GetCurSel($List1))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _AllToRight()
    $Count = _GUICtrlListBox_GetCount($List1)
    For $i = 0 To $Count
    _GUICtrlListBox_AddString($List2, _GUICtrlListBox_GetText($List1, $i))
    Next
    For $i = 0 To $Count
    _GUICtrlListBox_DeleteString($List1, _GUICtrlListBox_GetTopIndex($List1))
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _1ToLeft()
    $Function = _GUICtrlListBox_GetText($List2, _GUICtrlListBox_GetCurSel($List2))
    _GUICtrlListBox_AddString($List1, $Function)
    _GUICtrlListBox_DeleteString($List2, _GUICtrlListBox_GetCurSel($List2))
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _AllToLeft()
    $Count = _GUICtrlListBox_GetCount($List2)
    For $i = 0 To $Count
    _GUICtrlListBox_AddString($List1, _GUICtrlListBox_GetText($List2, $i))
    Next
    For $i = 0 To $Count
    _GUICtrlListBox_DeleteString($List2, _GUICtrlListBox_GetTopIndex($List2))
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WriteToAPI()
    $ToWrite = _ListBoxToArray()
    $iIndex = $ToWrite[0]
    Local $ToWriteSplit[$iIndex+1]
    If @OSArch = "x64" Then
    $pAutoIt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir")
    ElseIf @OSArch = "x86" Then
    $pAutoIt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir")
    Else
    MyMsg(3)
    Return
    EndIf
    $OpenToWrite = FileOpen($pAutoIt & "\SciTE\api\au3.user.calltips.api", 1)
    If @error Then
    MyMsg(4)
    Return
    EndIf
    For $i = 1 To $ToWrite[0]
    $ToWriteSplit[$i] = StringReplace($ToWrite[$i], @CRLF, "")
    Next
    FileWrite($OpenToWrite, @CRLF)
    For $i = 1 To $ToWrite[0]
    FileWrite($OpenToWrite, $ToWriteSplit[$i] & @CRLF)
    Next
    FileClose($OpenToWrite)
    MyMsg(5)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ListBoxToArray()
    Local $Count
    $Count = _GUICtrlListbox_GetCount($List2)
    Local $Write[$Count]
    _ArrayInsert($Write, 0, $Count)
    For $i = 1 To $Write[0]
    $Write[$i] = _GUICtrlListBox_GetText($List2, $i-1)
    Next
    Return $Write
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func MyMsg($Mode)
    Switch $Mode
    Case 1
    Return MsgBox(4096, "", "Es wurde keine Datei ausgewählt")
    Case 2
    Return MsgBox(4096, "", "Die UDF konnte nicht geöffnet werden")
    Case 3
    Return MsgBox(4096, "", "Ihr Betriebssystem wird nicht unterstützt")
    Case 4
    Return MsgBox(4096, "", "Die API konnte nicht geöffnet werden")
    Case 5
    Return MsgBox(64,"","Das übernehmen ist erfolgreich gewesen." & @CRLF & "Bitte starten sie SciTE neu, damit die Tooltips für die Funktionen" & @CRLF & "der UDF angezeigt werden können.")
    EndSwitch
    EndFunc

    [/autoit]

    [MSIE_newline_end ]

  • Hab's jetzt nicht getestet, nur kurz überflogen.
    Wenn jemand das .zip-Paket verwendet dann wird dein Skript den Installationspfad von Autoit warscheinlich nicht in der Registry finden.
    Den Pfad zu Autoit bekommst du auch mit @AutoItExe. Ich vermute mal das funktioniert auch bei der non-install-Version.