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
; Description ...: Starts up BASS functions.
; Syntax.........: _BASS_Startup($sBassDLL)
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
#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 ###
AdlibRegister("_ToolTip", 50)
While 1
Sleep(100)
WEnd
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
Func _Exit()
Exit
EndFunc
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
Func _1ToRight()
$Function = _GUICtrlListBox_GetText($List1, _GUICtrlListBox_GetCurSel($List1))
_GUICtrlListBox_AddString($List2, $Function)
_GUICtrlListBox_DeleteString($List1, _GUICtrlListBox_GetCurSel($List1))
EndFunc
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
Func _1ToLeft()
$Function = _GUICtrlListBox_GetText($List2, _GUICtrlListBox_GetCurSel($List2))
_GUICtrlListBox_AddString($List1, $Function)
_GUICtrlListBox_DeleteString($List2, _GUICtrlListBox_GetCurSel($List2))
EndFunc
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
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
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
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
[MSIE_newline_end ]