Hallo, ist es möglich von AutoIT aus die interne Kopierfunktion von Windows zu nutzen, so das beim kopieren das "Kopierfenster" von windows gezeigt wird?
Danke
Hallo, ist es möglich von AutoIT aus die interne Kopierfunktion von Windows zu nutzen, so das beim kopieren das "Kopierfenster" von windows gezeigt wird?
Danke
so das beim kopieren das "Kopierfenster" von windows gezeigt wird?
Ja, über die Shell.Application
$oSh = ObjCreate("Shell.Application")
$oFolder = $oSh.NameSpace("C:\ZIEL\ORDNER")
$oFolder.CopyHere("C:\DIE\ZU\KOPIERENDE\DATEI.xyz", 256) ; Anzeige Status
Aber bei kleinen Dateien (unterer MB-Bereich) poppt das Fenster meist gar nicht erst auf, weil der Kopiervorgang so schnell ist.
Super! Vielen Dank ! Ideal wäre natürlich, wenn man das ganze in eine Funktion packen könnte und gleich ein Flag wie bei FileCopy (Dateien überschreiben oder nicht) setzen könnte. Lieder gibt die Hilfe zu "ObjCreate" nicht soo viel her...
ObjCreate erstellt Dir nur das Objekt. Was Du dann mit dem Objekt anfangen kannst (Properties, Methods) findest Du in der MS Doku.
Für CopyHere guckst Du hier.
Ideal wäre natürlich, wenn man das ganze in eine Funktion packen könnte und gleich ein Flag wie bei FileCopy (Dateien überschreiben oder nicht) setzen könnte.
Den Sinn davon musst du mir erklären.
Das interne Copy-Modul setzt - wie du wolltest - auf Grafikanzeige. Das beinhaltet ebenso die Anfragen, wie mit bereits vorhandenen Zieldateien verfahren werden soll. Aus den 3 Auswahlmöglichkeiten dafür musst du dann manuell wählen. Dieses Fenster kannst du nicht per Option abwählen. Du kannst natürlich probieren dieses Fenster automatisiert anzusteuern. Bischen viel Aufwand, nur um das Windows-Copy-Fenster zu sehen.
EDIT:
Ohne OVERWRITE-Option könnte man das so lösen:
_ShellCopy("C:\DIE\ZU\KOPIERENDE\DATEI.xyz", "C:\ZIEL\ORDNER\NEU", 8)
Func _ShellCopy($_FullSourcePath, $_DestinationFolder, $_vOption=0) ; möglich: $FC_CREATEPATH=8
Local Static $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.NameSpace($_DestinationFolder)
If Not IsObj($oFolder) Then ; Zielordner existiert nicht
If $_vOption = 8 Then
_CreateFolder($oShell, $_DestinationFolder)
$oFolder = $oShell.NameSpace($_DestinationFolder)
Else
Return SetError(1,0,0)
EndIf
EndIf
$oFolder.CopyHere($_FullSourcePath, 256)
Return 1
EndFunc
Func _CreateFolder(ByRef $_oShell, $_Folder)
Local $newDir = '', $pos
Do
$pos = StringInStr($_Folder, '\', 0, -1)
$newDir = StringTrimLeft($_Folder, $pos) & '\' & $newDir
$_Folder = StringLeft($_Folder, $pos-1)
Until IsObj($_oShell.NameSpace($_Folder))
$_oShell.NameSpace($_Folder).NewFolder(StringTrimRight($newDir, 1))
EndFunc
Alles anzeigen
@all
Vielen Dank für Eure Hilfe. Ich wollte tatsächlich nur das Kopierfenster sehen, da Filecopy keine grafische Rückmeldung hat. Gerade bei großen Dateien ist das sehr nützlich um evtl. die restliche Kopierzeit zu sehen. Es ist wohl doch mit einem größeren Aufwand verbunden, als ich gedacht habe...
Anstatt den Dialog zu automatisieren könntest du auch einfach vorher mit Autoit Mitteln prüfen ob die Dateien schon existieren, falls ja löschst du sie ebenfalls mit Autoit Mitteln und startest danach erst den Kopiervorgang via Windows Funktion "copyhere". Ein Dialog wird dann nicht mehr erscheinen, wenn du das Problem schon zuvor gelöst hast.