Hilfe zu FileSaveDialog

  • Warum gibt es im FileSaveDialog Dateifilter wie z. B. "Alle (*.*)" oder "Textdateien (*.txt)" oder Multifiltergruppen wie z. B."Alle (*.*)|Textdateien (*.txt)"
    wenn dieser jedoch nicht verwendet wird.
    Beispiel: ich speichere eine Datei mit dem Namen CSS-Datei und vergesse .css anzuhängen, der Dateifilter zeigt auf *.css und die Datei wird unter dem Namen CSS-Datei gespeichert und nicht als CSS-Datei.css

    Gibt es eine Möglichkeit die Erweiterung anzuhängen? mein Versuch geht noch nicht etwas fehlt hier.

    [autoit]

    If GUICtrlRead($radio_datei) = 1 Then
    $Filedir = FileSaveDialog( "Bitte einen Namen angeben.", @ScriptDir, "css Datei (*.css)|Javascript Datei (*.js)", 2)
    Switch @extended
    Case 1
    If Not StringRight($Filedir,4) = ".css" then $Filedir&= ".css"
    Case 2
    If Not StringRight($Filedir,3) = ".js" then $Filedir &= ".js"
    Endswitch

    [/autoit]

    MfG

    Einmal editiert, zuletzt von gabischatz (13. August 2010 um 23:31)

  • Vielleicht irgendwie so?

    [autoit]


    If GUICtrlRead($radio_datei) = 1 Then
    $Filedir = FileSaveDialog( "Bitte einen Namen angeben.", @ScriptDir, "css Datei (*.css)|Javascript Datei (*.js)", 2)
    If not StringInStr($FileDir,".") Then $filedir &= ".css")

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • was passiert aber wenn der Zeiger auf *.js steht
    dann habe ich die falsche Endung für die Datei
    hatte ich auch schon

  • Spoiler anzeigen
    [autoit]

    ; *******************************************************;; *******************************************************;#include #include #Include #include #include #include $hWnd = WinGetHandle("")
    #AutoIt3Wrapper_icon="ico.ico"#AutoIt3Wrapper_outfile="CSS-Button-Designer.exe"
    HotKeySet("{ESC}", "Terminate")Func Terminate() ExitEndFunc
    _IEErrorHandlerRegister ()
    $oIE = _IECreateEmbedded ()GUICreate("CSS Button Designer", 746, 545, (@DesktopWidth - 746) / 2, (@DesktopHeight - 545) / 2, _BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_GROUP,$WS_CLIPSIBLINGS));GUISetBkColor(0xf7f5e8)$GUI_Button_Home = GUICtrlCreateButton("Home", 18, 465, 80, 25)$GUI_Button_Back = GUICtrlCreateButton("Back", 100, 465, 80, 25)$GUI_Button_Forward = GUICtrlCreateButton("Forward", 182, 465, 80, 25)$GUI_Button_Head = GUICtrlCreateButton("Head", 340, 465, 80, 25)$GUI_Button_Body = GUICtrlCreateButton("Body", 340, 492, 80, 25)$GUI_Button_Stop = GUICtrlCreateButton("Exit", 640, 492, 80, 25)$GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 740, 460)$radio_datei = GUICtrlCreateRadio("Ergebniss in Datei erstellen.", 422, 460, 153, 25)$radio_scriptly = GUICtrlCreateRadio("Ergebniss in Scriptly kopieren.", 422, 478, 153, 25)$radio_clip = GUICtrlCreateRadio("Ergebniss in Zwischenlage kopieren.", 422, 496, 201, 25)GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT);GUISetState() ;Show GUIGUISetState(@SW_SHOW)
    _IENavigate ($oIE, "http://localhost/CSS_Button/index.html")
    ; Waiting for user to close the windowWhile 1$msg = GUIGetMsg()SelectCase $msg = $GUI_EVENT_CLOSEExitLoopCase $msg = $GUI_Button_Home_IENavigate ($oIE, "http://localhost/CSS_Button/index.html")Case $msg = $GUI_Button_Back_IEAction ($oIE, "back")Case $msg = $GUI_Button_Forward_IEAction ($oIE, "forward")Case $msg = $GUI_Button_Head$oForm = _IEFormGetObjByName ( $oIE, "code_form" )$oText1 = _IEFormElementGetObjByName ( $oForm, "headcode" )MsgBox(0, "Formularelement Wert",_IEFormElementGetValue ($oText1) )$Button = _IEFormElementGetValue ($oText1)

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

    If GUICtrlRead($radio_datei) = 1 Then;$Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd)
    ;$Filedir = FileSaveDialog( "Bitte einen Namen angeben.", @ScriptDir, "css Datei (*.css)|Javascript Datei (*.js)", "New Datei", 2);Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0)
    $sFilter = "css Datei (*.css)|Javascript Datei (*.js)|*.au3|All (*.*)|*.*"If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended))
    $Filedir = _FileSaveDialog( "Bitte einen Namen angeben.", @ScriptDir, $sFilter, 0, "New Datei", 2, 1) Switch @extendedCase 1If Not StringRight($Filedir,4) = ".css" then $Filedir&= ".css"Case 2If Not StringRight($Filedir,3) = ".js" then $Filedir &= ".js"Endswitch

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

    If @error Then MsgBox(4096,"","Speichern abgebrochen.")Else$Button_xyz = _Main()

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

    $file = FileOpen($Filedir, 1)
    If StringRight($Filedir, 3) = "css" ThenFileWrite($file, $Button_xyz[0])ElseFileWrite($file, $Button_xyz[2])EndIfFileClose($file)EndIfEndIfif GUICtrlRead($radio_scriptly) = 1 thenClipPut($Button)MsgBox(0,"Zwischenablage","Die Struktur wurde in die Zwischenablage kopiert!")EndIfif GUICtrlRead($radio_clip) = 1 thenClipPut($Button)MsgBox(0,"Zwischenablage","Die Struktur wurde in die Zwischenablage kopiert!")EndIf
    ;_WinWaitActivate("Webocton - Scriptly - [C:\Program Files\EasyPHP-5.3.2i\www\CSS_Button\index.html]","");MouseClick("left",417,537,1);Send("{CTRLDOWN}v{CTRLUP}")Case $msg = $GUI_Button_Body$oForm = _IEFormGetObjByName ( $oIE, "code_form" )$oText2 = _IEFormElementGetObjByName ( $oForm, "buttoncode" )MsgBox(0, "Formularelement Wert", _IEFormElementGetValue ($oText2))Case $msg = $GUI_Button_Stop_IEAction ($oIE, "stop")_IEQuit($oIE)GUIDelete()ExitEndSelectWEnd
    GUIDelete()
    Func _Get_DesignerValue()_IENavigate($oIE,"javascript:select();")ReturnEndFunc
    Func _GetDesignerValue() $oForm = _IEFormGetObjByName ( $oIE, "code_form" )
    $oText = _IEFormElementGetObjByName ( $oForm, "headcode" ) ; _IEFormSubmit ($oForm)
    $JavaDatum = _IEFormElementGetValue($oText)
    Return $JavaDatumEndFuncFunc _GetCountdownValue() $oIE = _IECreate ( "http://localhost/CSS_Button/index.html",0,0) $oForm = _IEFormGetObjByName ( $oIE, "countdownform" )
    $oText = _IEFormElementGetObjByName ( $oForm, "countdowninput" )
    $JavaDatum = _IEFormElementGetValue($oText)
    _IEQuit($oIE)
    Return $JavaDatumEndFunc
    Func _Main()Local $aArray1 = _StringBetween($Button, '>', '<')_ArrayDisplay($aArray1, 'Default Search')Return $aArray1EndFunc ;==>_Main
    $hWnd = WinGetHandle("")$sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*"
    $Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd)
    If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended))
    Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0) Local $iFileLen = 65536 ; Max chars in returned string
    ; API flags prepare Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))
    ; Filter string to array convertion If Not StringInStr($sFilter, '|') Then $sFilter &= '|*.*' $sFilter = StringRegExpReplace($sFilter, '|+', '|')
    Local $asFLines = StringSplit($sFilter, '|') Local $i, $suFilter = ''
    For $i = 1 To $asFLines[0] Step 2 If $i < $asFLines[0] Then _ $suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i + 1]) + 1 & '];' Next
    ; Create API structures Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _ ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword') Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']') Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']') Local $usFilter = DllStructCreate($suFilter & 'byte') Local $usFile = DllStructCreate('char[' & $iFileLen & ']') Local $usExtn = DllStructCreate('char[1]')
    For $i = 1 To $asFLines[0] DllStructSetData($usFilter, $i, $asFLines[$i]) Next
    ; Set Data of API structures DllStructSetData($usTitle, 1, $sTitle) DllStructSetData($usInitDir, 1, $sInitDir) DllStructSetData($usFile, 1, $sDefFile) DllStructSetData($usExtn, 1, "") DllStructSetData($uOFN, 1, DllStructGetSize($uOFN)) DllStructSetData($uOFN, 2, $hWnd) DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter)) DllStructSetData($uOFN, 7, $iDefFilter) DllStructSetData($uOFN, 8, DllStructGetPtr($usFile)) DllStructSetData($uOFN, 9, $iFileLen) DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir)) DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle)) DllStructSetData($uOFN, 14, $iFlag) DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn)) DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))
    ;Set Timer to check FileName Input for file extension Local $hCallBack = DllCallbackRegister("_Check_FSD_Input", "none", "hwnd;int;int;dword") Local $ahTimer = DllCall("user32.dll", "int", "SetTimer", "hwnd", 0, _ "int", TimerInit(), "int", 100, "ptr", DllCallbackGetPtr($hCallBack))
    ; Call API function Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))
    ;Free CallBack and kill the timer DllCallBackFree($hCallBack) DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer)
    If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "")
    ;Return Results Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3) Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filterEndFunc ;==>_FileSaveDialog
    Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam) Local $sSaveAs_hWnd = _WinGetHandleEx(@AutoItPID, "#32770", "", "FolderView")
    If ControlGetFocus($sSaveAs_hWnd) = "Edit1" Then Return
    Local $sEdit_Data = ControlGetText($sSaveAs_hWnd, "", "Edit1") Local $sFilter_Ext = ControlCommand($sSaveAs_hWnd, "", "ComboBox3", "GetCurrentSelection") $sFilter_Ext = StringRegExpReplace($sFilter_Ext, ".*\(\*(.*?)\)$", "\1")
    If $sFilter_Ext = ".*" Then $sFilter_Ext = "" ElseIf Not StringInStr($sFilter_Ext, ".") Then Return EndIf
    Local $sEdit_Ext = StringRegExpReplace($sEdit_Data, "^.*\.", ".")
    If $sEdit_Ext <> $sFilter_Ext And ($sEdit_Ext <> $sEdit_Data Or $sFilter_Ext <> "") Then $sEdit_Data = StringRegExpReplace($sEdit_Data, "\.[^.]*$", "") ControlSetText($sSaveAs_hWnd, "", "Edit1", $sEdit_Data & $sFilter_Ext) EndIfEndFunc ;==>_Check_FSD_Input
    Func _WinGetHandleEx($iPID, $sClassNN="", $sPartTitle="", $sText="", $iVisibleOnly=1) If IsString($iPID) Then $iPID = ProcessExists($iPID)
    Local $aWList = WinList("[CLASS:" & $sClassNN & ";REGEXPTITLE:(?i).*" & $sPartTitle & ".*]", $sText) If @error Then Return SetError(1, 0, "")
    For $i = 1 To $aWList[0][0] If WinGetProcess($aWList[$i][1]) = $iPID And (Not $iVisibleOnly Or _ ($iVisibleOnly And BitAND(WinGetState($aWList[$i][1]), 2))) Then Return $aWList[$i][1] Next
    Return SetError(2, 0, "")EndFunc ;==>_WinGetHandleEx
    Func _FileSaveDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0) ;amel27's custom FileSaveDialog, because the regular one does not suffix the file with a extension based on the filter. Local $iFileLen = 65536 ; Max chars in returned string ; API flags prepare Local $iFlag = BitOR (BitShift (BitAND ($iOpt, 2),-10), BitShift (BitAND ($iOpt,16), 3 )) ; Filter string to array convertion Local $asFLines = StringSplit ( $sFilter, '|'), $asFilter [$asFLines [0] *2+1] Local $i, $iStart, $iFinal, $suFilter = '' $asFilter [0] = $asFLines [0] *2 For $i=1 To $asFLines [0] $iStart = StringInStr ($asFLines [$i], '(', 0, 1) $iFinal = StringInStr ($asFLines [$i], ')', 0,-1) $asFilter [$i*2-1] = StringStripWS (StringLeft ($asFLines [$i], $iStart-1), 3) $asFilter [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($asFLines [$i], $iStart), StringLen ($asFLines [$i]) -$iFinal+1), 3) $suFilter = $suFilter & 'byte[' & StringLen ($asFilter [$i*2-1])+1 & '];byte[' & StringLen ($asFilter [$i*2])+1 & '];' Next ; Create API structures Local $uOFN = DllStructCreate ('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _ ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword' ) Local $usTitle = DllStructCreate ('byte[' & StringLen ($sTitle) +1 & ']') Local $usInitDir= DllStructCreate ('byte[' & StringLen ($sInitDir) +1 & ']') Local $usFilter = DllStructCreate ($suFilter & 'byte') Local $usFile = DllStructCreate ('byte[' & $iFileLen & ']') Local $usExtn = DllStructCreate ('byte[' & StringLen ($sDefaultExt) +1 & ']') For $i=1 To $asFilter [0] DllStructSetData ($usFilter, $i, $asFilter [$i]) Next ; Set Data of API structures DllStructSetData ($usTitle, 1, $sTitle) DllStructSetData ($usInitDir, 1, $sInitDir) DllStructSetData ($usFile, 1, $sDefaultFile) DllStructSetData ($usExtn, 1, $sDefaultExt) DllStructSetData ($uOFN, 1, DllStructGetSize($uOFN)) DllStructSetData ($uOFN, 2, $mainGUI) DllStructSetData ($uOFN, 4, DllStructGetPtr ($usFilter)) DllStructSetData ($uOFN, 7, 1) DllStructSetData ($uOFN, 8, DllStructGetPtr ($usFile)) DllStructSetData ($uOFN, 9, $iFileLen) DllStructSetData ($uOFN, 12, DllStructGetPtr ($usInitDir)) DllStructSetData ($uOFN, 13, DllStructGetPtr ($usTitle)) DllStructSetData ($uOFN, 14, $iFlag) DllStructSetData ($uOFN, 17, DllStructGetPtr ($usExtn)) DllStructSetData ($uOFN, 23, BitShift (BitAND ($iOpt, 32), 5)) ; Call API function $ret = DllCall ('comdlg32.dll', 'int', 'GetSaveFileName', _ 'ptr', DllStructGetPtr ($uOFN) ) If $ret [0] Then Return StringStripWS(DllStructGetData ($usFile, 1),3) Else SetError (1) Return "" EndIfEndFunc
    Exit

    [/autoit]


    SEuBo Bekomme immer eine Fehlerrmeldung

    IECreateEmbedded.au3(75,104) : WARNING: $Ret: possibly used before declaration.
    If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    IECreateEmbedded.au3(325,250) : ERROR: _FileSaveDialog() already defined.
    Func _FileSaveDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0) ;amel27's custom FileSaveDialog, because the regular one does not suffix the file with a extension based on the filter.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    IECreateEmbedded.au3 - 1 error(s), 1 warning(s)
    !>19:09:59 AU3Check ended.rc:2
    +>19:11:07 AutoIt3Wrapper Finished
    >Exit code: 0 Time: 69.222

    Einmal editiert, zuletzt von gabischatz (12. August 2010 um 19:28)

    • Offizieller Beitrag

    Es gibt auch noch einen Trick, indem man die _Timer-UDF verwendet. Die Timer-Funktion wird auch bei den Datei-Requestern weiterhin aufgerufen, sodass man dort die Endung auslesen kann.
    Das hier funktioniert zumindest unter Win7 (könnte sein, dass das unter XP eine andere CLASS ist):

    Spoiler anzeigen
    [autoit]


    #include <Timers.au3>
    Global $sExt = ''
    $hGui = GUICreate('test')
    _Timer_SetTimer($hGui, 250, '_GetExtension')
    $Filedir = FileSaveDialog("Bitte einen Namen angeben.", @ScriptDir, "css Datei (*.css)|Javascript Datei (*.js)", 2)
    _Timer_KillTimer($hGui, '_GetExtension')
    MsgBox(0,0,$sExt)

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

    Func _GetExtension($hWnd, $Msg, $iIDTimer, $dwTime)
    $sExt = ControlGetText("Bitte einen Namen angeben.", '', '[CLASS:ComboBox; INSTANCE:2]')
    EndFunc

    [/autoit]
  • Hi Oscar, unter Vista wird der Wert immer überschrieben denke ich

    Das hier funktioniert zumindest unter Win7 (könnte sein, dass das unter XP eine andere CLASS ist):


    So sieht es jetzt aus!

    Spoiler anzeigen
    [autoit]


    ; *******************************************************
    ;
    ; *******************************************************
    ;
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <string.au3>
    #include <File.au3>
    #include <IE.au3>
    #include <Array.au3>
    #include <Timers.au3>
    Global $sExt = ''

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

    #AutoIt3Wrapper_icon="ico.ico"
    #AutoIt3Wrapper_outfile="CSS-Button-Designer.exe"

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

    HotKeySet("{ESC}", "Terminate")
    Func Terminate()
    Exit
    EndFunc

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

    _IEErrorHandlerRegister ()

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

    $oIE = _IECreateEmbedded ()
    GUICreate("CSS Button Designer", 746, 545, (@DesktopWidth - 746) / 2, (@DesktopHeight - 545) / 2, _
    BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_GROUP,$WS_CLIPSIBLINGS))
    ;GUISetBkColor(0xf7f5e8)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 18, 465, 80, 25)
    $GUI_Button_Back = GUICtrlCreateButton("Back", 100, 465, 80, 25)
    $GUI_Button_Forward = GUICtrlCreateButton("Forward", 182, 465, 80, 25)
    $GUI_Button_Head = GUICtrlCreateButton("Head", 340, 465, 80, 25)
    $GUI_Button_Body = GUICtrlCreateButton("Body", 340, 492, 80, 25)
    $GUI_Button_Stop = GUICtrlCreateButton("Exit", 640, 492, 80, 25)
    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 740, 460)
    $radio_datei = GUICtrlCreateRadio("Ergebniss in Datei erstellen.", 422, 460, 153, 25)
    $radio_scriptly = GUICtrlCreateRadio("Ergebniss in Scriptly kopieren.", 422, 478, 153, 25)
    $radio_clip = GUICtrlCreateRadio("Ergebniss in Zwischenlage kopieren.", 422, 496, 201, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)

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

    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    ;GUISetState() ;Show GUI
    GUISetState(@SW_SHOW)

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

    _IENavigate ($oIE, "http://localhost/CSS_Button/index.html")

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

    ; Waiting for user to close the window
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $GUI_Button_Home
    _IENavigate ($oIE, "http://localhost/CSS_Button/index.html")
    Case $msg = $GUI_Button_Back
    _IEAction ($oIE, "back")
    Case $msg = $GUI_Button_Forward
    _IEAction ($oIE, "forward")
    Case $msg = $GUI_Button_Head
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )
    $oText1 = _IEFormElementGetObjByName ( $oForm, "headcode" )
    MsgBox(0, "Formularelement Wert",_IEFormElementGetValue ($oText1) )
    $Button = _IEFormElementGetValue ($oText1)

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

    If GUICtrlRead($radio_datei) = 1 Then

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

    $hGui = GUICreate('test')

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

    _Timer_SetTimer($hGui, 550, '_GetExtension')
    $Filedir = FileSaveDialog("Bitte einen Namen angeben.", @ScriptDir, "css Datei (*.css)|Javascript Datei (*.js)", 2)
    _Timer_KillTimer($hGui, '_GetExtension')
    GUIDelete('test')
    $speicher=$sExt
    If StringRight($Filedir,4) = ".css" Then
    MsgBox(0,"Erweiterung CSS",$speicher)
    Elseif StringRight($Filedir,3) = ".js" Then
    MsgBox(0,"Erweiterung js",$sExt )
    Else
    $Filedir = $Filedir + $speicher
    MsgBox(0,"Keine Erweiterung",$speicher )
    EndIf

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

    If @error Then
    MsgBox(4096,"","Speichern abgebrochen.")

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

    Else
    $Button_xyz = _Main()

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

    $file = FileOpen($Filedir, 1)

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

    If StringRight($Filedir, 3) = "css" Then
    FileWrite($file, $Button_xyz[0])
    Else
    FileWrite($file, $Button_xyz[2])
    EndIf

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

    FileClose($file)
    EndIf
    EndIf
    if GUICtrlRead($radio_scriptly) = 1 then

    ;MsgBox(0,"Hilfe","Hier brauche ich noch Hilfe")
    EndIf
    if GUICtrlRead($radio_clip) = 1 then
    ClipPut($Button)
    MsgBox(0,"Zwischenablage","Die Struktur wurde in die Zwischenablage kopiert!")
    EndIf
    Case $msg = $GUI_Button_Body
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )
    $oText2 = _IEFormElementGetObjByName ( $oForm, "buttoncode" )
    MsgBox(0, "Formularelement Wert", _IEFormElementGetValue ($oText2))
    Case $msg = $GUI_Button_Stop
    _IEAction ($oIE, "stop")
    _IEQuit($oIE)
    GUIDelete()
    Exit
    EndSelect
    WEnd

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

    GUIDelete()

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

    Func _Get_DesignerValue()
    _IENavigate($oIE,"javascript:select();")
    Return
    EndFunc
    Func _GetDesignerValue()
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )

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

    $oText = _IEFormElementGetObjByName ( $oForm, "headcode" )
    ; _IEFormSubmit ($oForm)

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

    $JavaDatum = _IEFormElementGetValue($oText)

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

    Return $JavaDatum
    EndFunc
    Func _GetCountdownValue()
    $oIE = _IECreate ( "http://localhost/CSS_Button/index.html",0,0)
    $oForm = _IEFormGetObjByName ( $oIE, "countdownform" )

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

    $oText = _IEFormElementGetObjByName ( $oForm, "countdowninput" )

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

    $JavaDatum = _IEFormElementGetValue($oText)

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

    _IEQuit($oIE)

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

    Return $JavaDatum
    EndFunc
    Func _Main()
    Local $aArray1 = _StringBetween($Button, '>', '<')
    _ArrayDisplay($aArray1, 'Default Search')
    Return $aArray1
    EndFunc ;==>_Main
    Func _GetExtension($hWnd, $Msg, $iIDTimer, $dwTime)
    $sExt = ControlGetText("Bitte einen Namen angeben.", '', '[CLASS:ComboBox; INSTANCE:2]')
    EndFunc
    Exit

    [/autoit]


    SEuBo habe die Fehler berichtigt geht aber auch nicht, habe err Fehlermeldung

    Spoiler anzeigen
    [autoit]


    ; *******************************************************
    ;
    ; *******************************************************
    ;
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <string.au3>
    #include <File.au3>
    #include <IE.au3>
    #include <Array.au3>
    $hWnd = WinGetHandle("")

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

    #AutoIt3Wrapper_icon="ico.ico"
    #AutoIt3Wrapper_outfile="CSS-Button-Designer.exe"

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

    HotKeySet("{ESC}", "Terminate")
    Func Terminate()
    Exit
    EndFunc

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

    _IEErrorHandlerRegister ()

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

    $oIE = _IECreateEmbedded ()
    GUICreate("CSS Button Designer", 746, 545, (@DesktopWidth - 746) / 2, (@DesktopHeight - 545) / 2, _
    BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_GROUP,$WS_CLIPSIBLINGS))
    ;GUISetBkColor(0xf7f5e8)
    $GUI_Button_Home = GUICtrlCreateButton("Home", 18, 465, 80, 25)
    $GUI_Button_Back = GUICtrlCreateButton("Back", 100, 465, 80, 25)
    $GUI_Button_Forward = GUICtrlCreateButton("Forward", 182, 465, 80, 25)
    $GUI_Button_Head = GUICtrlCreateButton("Head", 340, 465, 80, 25)
    $GUI_Button_Body = GUICtrlCreateButton("Body", 340, 492, 80, 25)
    $GUI_Button_Stop = GUICtrlCreateButton("Exit", 640, 492, 80, 25)
    $GUIActiveX = GUICtrlCreateObj($oIE, 0, 0, 740, 460)
    $radio_datei = GUICtrlCreateRadio("Ergebniss in Datei erstellen.", 422, 460, 153, 25)
    $radio_scriptly = GUICtrlCreateRadio("Ergebniss in Scriptly kopieren.", 422, 478, 153, 25)
    $radio_clip = GUICtrlCreateRadio("Ergebniss in Zwischenlage kopieren.", 422, 496, 201, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)

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

    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    ;GUISetState() ;Show GUI
    GUISetState(@SW_SHOW)

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

    _IENavigate ($oIE, "http://localhost/CSS_Button/index.html")

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

    ; Waiting for user to close the window
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $GUI_Button_Home
    _IENavigate ($oIE, "http://localhost/CSS_Button/index.html")
    Case $msg = $GUI_Button_Back
    _IEAction ($oIE, "back")
    Case $msg = $GUI_Button_Forward
    _IEAction ($oIE, "forward")
    Case $msg = $GUI_Button_Head
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )
    $oText1 = _IEFormElementGetObjByName ( $oForm, "headcode" )
    ;MsgBox(0, "Formularelement Wert",_IEFormElementGetValue ($oText1) )
    $Button = _IEFormElementGetValue ($oText1)

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

    If GUICtrlRead($radio_datei) = 1 Then
    $hWnd = WinGetHandle("")
    ;$sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*"

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

    ;$Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd)

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

    ;If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended))

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

    $sFilter = "css Datei (*.css)|Javascript Datei (*.js)|*.au3|All (*.*)|*.*"

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

    $Filedir = _DateiSaveDialog( "Bitte einen Namen angeben.", @ScriptDir, $sFilter, 18, "New Datei", 2, 1)

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

    Switch @extended
    Case 1
    If Not StringRight($Filedir,4) = ".css" then $Filedir&= ".css"
    Case 2
    If Not StringRight($Filedir,3) = ".js" then $Filedir &= ".js"
    Endswitch

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

    If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $sFilter , @extended))

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

    If @error Then
    MsgBox(4096,"","Speichern abgebrochen.")

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

    Else
    $Button_xyz = _Main()

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

    $file = FileOpen($Filedir, 1)

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

    If StringRight($Filedir, 3) = "css" Then
    FileWrite($file, $Button_xyz[0])
    Else
    FileWrite($file, $Button_xyz[2])
    EndIf

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

    FileClose($file)
    EndIf
    EndIf
    if GUICtrlRead($radio_scriptly) = 1 then
    ClipPut($Button)
    MsgBox(0,"Zwischenablage","Die Struktur wurde in die Zwischenablage kopiert!")
    EndIf
    if GUICtrlRead($radio_clip) = 1 then
    ClipPut($Button)
    MsgBox(0,"Zwischenablage","Die Struktur wurde in die Zwischenablage kopiert!")
    EndIf
    Case $msg = $GUI_Button_Body
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )
    $oText2 = _IEFormElementGetObjByName ( $oForm, "buttoncode" )
    MsgBox(0, "Formularelement Wert", _IEFormElementGetValue ($oText2))
    Case $msg = $GUI_Button_Stop
    _IEAction ($oIE, "stop")
    _IEQuit($oIE)
    GUIDelete()
    Exit
    EndSelect
    WEnd

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

    GUIDelete()

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

    Func _Get_DesignerValue()
    _IENavigate($oIE,"javascript:select();")
    Return
    EndFunc

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

    Func _GetDesignerValue()
    $oForm = _IEFormGetObjByName ( $oIE, "code_form" )

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

    $oText = _IEFormElementGetObjByName ( $oForm, "headcode" )
    ; _IEFormSubmit ($oForm)

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

    $JavaDatum = _IEFormElementGetValue($oText)

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

    Return $JavaDatum
    EndFunc
    Func _GetCountdownValue()
    $oIE = _IECreate ( "http://localhost/CSS_Button/index.html",0,0)
    $oForm = _IEFormGetObjByName ( $oIE, "countdownform" )

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

    $oText = _IEFormElementGetObjByName ( $oForm, "countdowninput" )

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

    $JavaDatum = _IEFormElementGetValue($oText)

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

    _IEQuit($oIE)

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

    Return $JavaDatum
    EndFunc

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

    Func _Main()
    Local $aArray1 = _StringBetween($Button, '>', '<')
    _ArrayDisplay($aArray1, 'Default Search')
    Return $aArray1
    EndFunc ;==>_Main

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

    Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0)
    Local $iFileLen = 65536 ; Max chars in returned string

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

    ; API flags prepare
    Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))

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

    ; Filter string to array convertion
    If Not StringInStr($sFilter, '|') Then $sFilter &= '|*.*'
    $sFilter = StringRegExpReplace($sFilter, '|+', '|')

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

    Local $asFLines = StringSplit($sFilter, '|')
    Local $i, $suFilter = ''

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

    For $i = 1 To $asFLines[0] Step 2
    If $i < $asFLines[0] Then _
    $suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i + 1]) + 1 & '];'
    Next

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

    ; Create API structures
    Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
    ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
    Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
    Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
    Local $usFilter = DllStructCreate($suFilter & 'byte')
    Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
    Local $usExtn = DllStructCreate('char[1]')

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

    For $i = 1 To $asFLines[0]
    DllStructSetData($usFilter, $i, $asFLines[$i])
    Next

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

    ; Set Data of API structures
    DllStructSetData($usTitle, 1, $sTitle)
    DllStructSetData($usInitDir, 1, $sInitDir)
    DllStructSetData($usFile, 1, $sDefFile)
    DllStructSetData($usExtn, 1, "")
    DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
    DllStructSetData($uOFN, 2, $hWnd)
    DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
    DllStructSetData($uOFN, 7, $iDefFilter)
    DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
    DllStructSetData($uOFN, 9, $iFileLen)
    DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
    DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
    DllStructSetData($uOFN, 14, $iFlag)
    DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
    DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))

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

    ;Set Timer to check FileName Input for file extension
    Local $hCallBack = DllCallbackRegister("_Check_FSD_Input", "none", "hwnd;int;int;dword")
    Local $ahTimer = DllCall("user32.dll", "int", "SetTimer", "hwnd", 0, _
    "int", TimerInit(), "int", 100, "ptr", DllCallbackGetPtr($hCallBack))

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

    ; Call API function
    Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))

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

    ;Free CallBack and kill the timer
    DllCallBackFree($hCallBack)
    DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer)

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

    If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "")

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

    ;Return Results
    Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3)
    Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filter
    EndFunc ;==>_FileSaveDialog

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

    Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam)
    Local $sSaveAs_hWnd = _WinGetHandleEx(@AutoItPID, "#32770", "", "FolderView")

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

    If ControlGetFocus($sSaveAs_hWnd) = "Edit1" Then Return

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

    Local $sEdit_Data = ControlGetText($sSaveAs_hWnd, "", "Edit1")
    Local $sFilter_Ext = ControlCommand($sSaveAs_hWnd, "", "ComboBox3", "GetCurrentSelection")
    $sFilter_Ext = StringRegExpReplace($sFilter_Ext, ".*\(\*(.*?)\)$", "\1")

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

    If $sFilter_Ext = ".*" Then
    $sFilter_Ext = ""
    ElseIf Not StringInStr($sFilter_Ext, ".") Then
    Return
    EndIf

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

    Local $sEdit_Ext = StringRegExpReplace($sEdit_Data, "^.*\.", ".")

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

    If $sEdit_Ext <> $sFilter_Ext And ($sEdit_Ext <> $sEdit_Data Or $sFilter_Ext <> "") Then
    $sEdit_Data = StringRegExpReplace($sEdit_Data, "\.[^.]*$", "")
    ControlSetText($sSaveAs_hWnd, "", "Edit1", $sEdit_Data & $sFilter_Ext)
    EndIf
    EndFunc ;==>_Check_FSD_Input

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

    Func _WinGetHandleEx($iPID, $sClassNN="", $sPartTitle="", $sText="", $iVisibleOnly=1)
    If IsString($iPID) Then $iPID = ProcessExists($iPID)

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

    Local $aWList = WinList("[CLASS:" & $sClassNN & ";REGEXPTITLE:(?i).*" & $sPartTitle & ".*]", $sText)
    If @error Then Return SetError(1, 0, "")

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

    For $i = 1 To $aWList[0][0]
    If WinGetProcess($aWList[$i][1]) = $iPID And (Not $iVisibleOnly Or _
    ($iVisibleOnly And BitAND(WinGetState($aWList[$i][1]), 2))) Then Return $aWList[$i][1]
    Next

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

    Return SetError(2, 0, "")
    EndFunc ;==>_WinGetHandleEx

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

    Func _DateiSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0)
    ;amel27's custom FileSaveDialog, because the regular one does not suffix the file with a extension based on the filter.
    Local $iFileLen = 65536 ; Max chars in returned string
    ; API flags prepare
    Local $iFlag = BitOR (BitShift (BitAND ($iOpt, 2),-10), BitShift (BitAND ($iOpt,16), 3 ))
    ; Filter string to array convertion
    Local $asFLines = StringSplit ( $sFilter, '|'), $asFilter [$asFLines [0] *2+1]
    Local $i, $iStart, $iFinal, $suFilter = ''
    $asFilter [0] = $asFLines [0] *2
    For $i=1 To $asFLines [0]
    $iStart = StringInStr ($asFLines [$i], '(', 0, 1)
    $iFinal = StringInStr ($asFLines [$i], ')', 0,-1)
    $asFilter [$i*2-1] = StringStripWS (StringLeft ($asFLines [$i], $iStart-1), 3)
    $asFilter [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($asFLines [$i], $iStart), StringLen ($asFLines [$i]) -$iFinal+1), 3)
    $suFilter = $suFilter & 'byte[' & StringLen ($asFilter [$i*2-1])+1 & '];byte[' & StringLen ($asFilter [$i*2])+1 & '];'
    Next
    ; Create API structures
    Local $uOFN = DllStructCreate ('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
    ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword' )
    Local $usTitle = DllStructCreate ('byte[' & StringLen ($sTitle) +1 & ']')
    Local $usInitDir= DllStructCreate ('byte[' & StringLen ($sInitDir) +1 & ']')
    Local $usFilter = DllStructCreate ($suFilter & 'byte')
    Local $usFile = DllStructCreate ('byte[' & $iFileLen & ']')
    Local $usExtn = DllStructCreate ('byte[' & StringLen ($sDefaultExt) +1 & ']')
    For $i=1 To $asFilter [0]
    DllStructSetData ($usFilter, $i, $asFilter [$i])
    Next
    ; Set Data of API structures
    DllStructSetData ($usTitle, 1, $sTitle)
    DllStructSetData ($usInitDir, 1, $sInitDir)
    DllStructSetData ($usFile, 1, $sDefaultFile)
    DllStructSetData ($usExtn, 1, $sDefaultExt)
    DllStructSetData ($uOFN, 1, DllStructGetSize($uOFN))
    DllStructSetData ($uOFN, 2, $mainGUI)
    DllStructSetData ($uOFN, 4, DllStructGetPtr ($usFilter))
    DllStructSetData ($uOFN, 7, 1)
    DllStructSetData ($uOFN, 8, DllStructGetPtr ($usFile))
    DllStructSetData ($uOFN, 9, $iFileLen)
    DllStructSetData ($uOFN, 12, DllStructGetPtr ($usInitDir))
    DllStructSetData ($uOFN, 13, DllStructGetPtr ($usTitle))
    DllStructSetData ($uOFN, 14, $iFlag)
    DllStructSetData ($uOFN, 17, DllStructGetPtr ($usExtn))
    DllStructSetData ($uOFN, 23, BitShift (BitAND ($iOpt, 32), 5))
    ; Call API function
    $ret = DllCall ('comdlg32.dll', 'int', 'GetSaveFileName', _
    'ptr', DllStructGetPtr ($uOFN) )
    If $ret [0] Then
    Return StringStripWS(DllStructGetData ($usFile, 1),3)
    Else
    SetError (1)
    Return ""
    EndIf
    EndFunc
    Exit

    [/autoit]