$sTestfile = @ScriptDir & '\test.txt' $hFile = FileOpen($sTestfile, 2) If $hFile <> -1 Then FileWrite($hFile, 'abc') FileClose($hFile) EndIf TraySetState(2) $hGui = GUICreate('Hauptfenster', 640, 480) GUISetState(@SW_SHOW, $hGui) $sNewFilename = _FileRenameBox('test.txt', Default, $hGui) ConsoleWrite('error: ' & @error & @CR & 'Neuer Dateiname: "' & $sNewFilename & '"' & @CR) While True Switch GUIGetMsg() Case -3 Exit EndSwitch WEnd ;=============================================================================== ; Function Name: _FileRenameBox($sOldFilename[, $sTitle = Default][, $hParent = 0]) ; Description: Hiermit kann man eine Datei umbenennen (mit Anwender-Interaktion) ; Parameter(s): $sOldFilename = die Datei, die umbenannt werden soll (muss existieren) ; $sTitle = Ein Text, der als Titelzeile für das Fenster verwendet wird (optional) ; $hParent = das Handle zum Parent-Fenster (optional) ; Requirement(s): - ; Return Value(s): Im Erfolgsfall wird der neue Dateiname zurückgegeben. ; ansonsten: wird ein Leerstring zurückgegeben und ; @error = 1 -> FileMove schlug fehl (z.B. Rechteproblem) ; @error = 2 -> Der Anwender hat das umbenennen abgebrochen ; @error = 3 -> Die Datei existiert nicht ; Author(s): oscar (www.autoit.de) ;=============================================================================== Func _FileRenameBox($sOldFilename, $sTitle = Default, $hParent = 0) $sOldFilename = FileGetLongName($sOldFilename, 1) ; evtl. vorhandenen relativen Pfad umwandeln If Not FileExists($sOldFilename) Then Return SetError(3, 0, '') ; wenn die Datei nicht existiert, dann Funktion abbrechen If $sTitle = Default Or $sTitle = '' Then $sTitle = 'Datei umbenennen...' Local $sPath = StringRegExpReplace($sOldFilename, '(.+\\).+', '$1') ; nur der Pfad vom alten Dateinamen Local $sFilename = StringRegExpReplace($sOldFilename, '.+\\(.+)', '$1') ; nur der Dateiname Local $iError = 0 ; Variable zur Fehlerbehandlung ; nachfolgend ein paar lokale Konstanten deklarieren, falls diese im Hauptscript nicht deklariert wurden If Not IsDeclared('GUI_EVENT_CLOSE') Then Local Const $GUI_EVENT_CLOSE = -3 If Not IsDeclared('WS_SYSMENU') Then Local Const $WS_SYSMENU = 0x00080000 If Not IsDeclared('WS_CAPTION') Then Local Const $WS_CAPTION = 0x00C00000 If Not IsDeclared('ES_READONLY') Then Local Const $ES_READONLY = 0x0800 If Not IsDeclared('ES_AUTOHSCROLL') Then Local Const $ES_AUTOHSCROLL = 0x0080 If Not IsDeclared('GUI_DISABLE') Then Local Const $GUI_DISABLE = 0x80 If Not IsDeclared('GUI_ENABLE') Then Local Const $GUI_ENABLE = 0x40 If Not IsDeclared('GUI_FOCUS') Then Local Const $GUI_FOCUS = 0x100 If Not IsDeclared('WS_EX_STATICEDGE') Then Local Const $WS_EX_STATICEDGE = 0x00020000 Local $sNewFilename = $sFilename, $fFileExists = False Local $iWidth = 480, $iHeight = 260, $iLeft = -1, $iTop = -1 If IsHWnd($hParent) Then ; wenn ein Parent-Fenster vorhanden ist, dann... Local $aPos = WinGetPos($hParent) ; die Position des Fensters holen If $aPos[0] <> -32000 Then ; wenn das Fenster nicht minimiert ist, dann... $iLeft = $aPos[0] + $aPos[2] / 2 - $iWidth / 2 ; die Box relativ zu diesem ausrichten $iTop = $aPos[1] + $aPos[3] / 2 - $iHeight / 2 EndIf GUISetState(@SW_DISABLE, $hParent) ; das Parent-Fenster deaktivieren Else TraySetState(2) ; wenn kein Parent-Fenster vorhanden, dann das Tray-Icon ausblenden EndIf Local $iOldOpt = Opt('GUIOnEventMode', 0) ; auf MessageLoop-Modus schalten und alten Zustand merken Local $hGui = GUICreate($sTitle, $iWidth, $iHeight, $iLeft, $iTop, BitOR($WS_SYSMENU, $WS_CAPTION), Default, $hParent) GUISetFont(9, 400, 0, 'Tahoma', $hGui, 5) GUISetBkColor(0xE0E0E0, $hGui) GUISetIcon('shell32.dll', -24, $hGui) GUICtrlCreateGroup('Pfad:', 10, 10, 460, 52) GUICtrlCreateInput($sPath, 20, 30, 440, 23, BitOR($ES_READONLY, $ES_AUTOHSCROLL)) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma', 5) GUICtrlSetBkColor(-1, 0xFFFFD0) GUICtrlCreateGroup('', -99, -99, 1, 1) GUICtrlCreateGroup('Dateiname (alt):', 10, 70, 460, 52) GUICtrlCreateLabel('"' & $sFilename & '"', 20, 92, 440, 24) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma', 5) GUICtrlCreateGroup('', -99, -99, 1, 1) GUICtrlCreateGroup('Dateiname (neu):', 10, 130, 460, 56) Local $idNewFilename = GUICtrlCreateInput($sNewFilename, 20, 152, 440, 24) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma', 5) GUICtrlCreateGroup('', -99, -99, 1, 1) Local $idRename = GUICtrlCreateButton('Umbenennen', 240, 200, 120, 25) Local $idCancel = GUICtrlCreateButton('Abbrechen', 370, 200, 100, 25) Local $idStatus = GUICtrlCreateLabel(' Bitte den neuen Dateinamen eingeben...', -2, 240, 484, 20, -1, $WS_EX_STATICEDGE) GUICtrlSetFont(-1, 10, 400, 0, 'Tahoma', 5) GUICtrlSetState($idNewFilename, $GUI_FOCUS) GUISetState(@SW_SHOW, $hGui) While True Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idCancel $iError = 2 ExitLoop Case $idRename $sNewFilename = StringRegExpReplace(GUICtrlRead($idNewFilename), '.*\\(.+)', '$1') ; evtl. eingegebenen Pfad abtrennen If Not FileExists($sPath & $sNewFilename) Then ; nur umbenennen, wenn bisher keine Datei mit dem neuen Namen existiert $iError = FileMove($sOldFilename, $sPath & $sNewFilename) = 0 ; $iError bekommt hier den Wert "1", wenn das umbenennen nicht geklappt hat ExitLoop ; While-Schleife verlassen EndIf EndSwitch $sNewFilename = GUICtrlRead($idNewFilename) If $sNewFilename <> StringRegExpReplace($sNewFilename, '.*\\(.+)', '$1') Then GUICtrlSetData($idNewFilename, StringRegExpReplace($sNewFilename, '.*\\(.+)', '$1')) If $sNewFilename <> '' And $sPath & $sNewFilename <> $sOldFilename Then ; wenn ein neuer Dateiname eingegeben wurde, dann... If BitAND(GUICtrlGetState($idRename), $GUI_DISABLE) Then If FileExists($sPath & $sNewFilename) Then If Not $fFileExists Then GUICtrlSetData($idStatus, ' Achtung! Es existiert bereits eine Datei mit diesem Namen!') $fFileExists = True Else GUICtrlSetState($idRename, $GUI_ENABLE) ; den "Umbenennen"-Button aktivieren GUICtrlSetData($idStatus, ' Bitte den neuen Dateinamen eingeben...') $fFileExists = False EndIf EndIf Else If $fFileExists Then GUICtrlSetData($idStatus, ' Bitte den neuen Dateinamen eingeben...') $fFileExists = False If BitAND(GUICtrlGetState($idRename), $GUI_ENABLE) Then GUICtrlSetState($idRename, $GUI_DISABLE) ; sonst deaktivieren GUICtrlSetData($idStatus, ' Bitte den neuen Dateinamen eingeben...') EndIf EndIf WEnd If IsHWnd($hParent) Then GUISetState(@SW_ENABLE, $hParent) ; das Parent-Fenster wieder aktivieren GUIDelete($hGui) ; das Eingabefenster löschen Opt('GUIOnEventMode', $iOldOpt) ; und den alten Zustand wiederherstellen If $iError Then Return SetError($iError, 0, '') Return SetError(0, 0, $sPath & $sNewFilename) EndFunc