| |
|
|
- Página 1 - |
|
| Descripción:
Mit el API SHFileOperation puede ser todo Ordner oder einzelne Archivos con Forschrittsanzeige kopieren, löschen (auch Papierkorb), mover oder umbenenen.
Deklaration:
Def @SHFileOperation(1) !SHELL32,SHFileOperationA
Parámetro:
1.Parámetro: Structur oder 30 Byte große Bereichsvariable => -Byte 0-3 = Handle la ventana, en el el Fortschrittsdialog erscheinen se. -Byte 4-7 = Flag para el durchzuführende Aktion => $1 = verschieben; $2=kopieren; $2=löschen; $4=umbenenen -Byte 8-11 = Adresse uno Bereichvariablen, el el a modifizierende(n) Expediente(en) oder Ordner enthält. Diese Bereichvariable muß como Abschluß zwei Nullbytes enthalten. Einzelne Archivos oder Ordner voluntad con un Nullbyte getrennt. -Byte 12-15 = Adresse uno Bereichvariablen, el el Ziel-datei(en) oder -ordner enthält. Diese Bereichvariable muß como Abschluß zwei Nullbytes enthalten. Einzelne Archivos oder Ordner voluntad con un Nullbyte getrennt. -Byte 16-17 = Flag para el weitere Optionen el durchzuführenden Aktion => $40 = Wenn posible voluntad Undoinformationen gespeichert. $80 = Wenn Wildcards (*.*) verwendet voluntad, sólo Archivos berücksichtigen. $1 = Lo son mehrere Zielordner. $10 = Keine Einzelbestätigung. $200 = Das Erstellen uno Ordners muß no bestätigt voluntad. $2000 = Verbundene Files no como Gruppe mover. $800 = Lo voluntad no Security Atributos kopiert (NT/2000/XP) $400 = Lo se kein Userinterface en una Fehler ausgegeben. $1000 = Lo voluntad no Unterverzeichnisse berücksichtigt (sólo aktuelles Directorio). $8 = Wenn Filename ya disponible es, otro Namen geben! $4 = Lo se kein Fortschrittsdialog adecuado. $100 = Nur Fortschrittsdialog, no Dateinamen Mostrar! $20 = Lo se una Mapping Objeto con el alten y neuen Dateinamen producido, si $8 spezifiziert wurde y Files umbenannt fueron. -Byte 18-21 = Rückgabeflag. Wenn el User una Aktion abgebrochen ha, es hier 1. -Byte 22-25 = Hier es como Rückgabe el Handle des Mapping Objektes, si $20 spezifiziert wurde. -Byte 26-29 = El Adresse uno Textstrings como Überschrift para el Fortschrittsdialog, si $100 spezifiziert wurde.
Rückgabewert:
0 en Erfolg, 1 en Fehler.
Beispiele:
KompilierenMarcaSeparaciónDef @SHFileOperation(1) !SHELL32,SHFileOperationA
Proc Fileaction
Parameters Action$,File$,File2$,noconfirm%,norecycle%
Parameter 1: Auszuführende Aktion=COPY, DELETE, RENAME, MOVE
Parameter 2: Quelldatei
Parameter 3: Zielldatei
Parameter 4: 0 = User erst fragen, 1= ohne Nachfrage löschen
Parameter 5: 0 = In Papierkorb verschieben, 1= endgültig löschen
Declare FOF_Flag%,Action&,DO%,Fehler&
Declare opstruct#,file#,file2#
LET DO%=0
IF @upper$(Action$)=RENAME
Let Action&=4
elseIF @upper$(Action$)=COPY
Let Action&=2
elseIF @upper$(Action$)=MOVE
Let Action&=1
elseIF @upper$(Action$)=DELETE
Let Action&=3
else
@messagebox(Diese Funktion ist nicht bekannt!,Aktion wird nicht ausgeführt!,64)
LEt DO%=1
endif
IF DO%=0
Case noconfirm% : Let noconfirm%=16
CaseNot norecycle% : Let norecycle%=64
Let FOF_Flag% = @or(noconfirm%,norecycle%)
Dim opstruct#,30
Dim file#,Add(Len(file$),2)
Dim file2#,Add(Len(file2$),2)
String file#,0=@Add$(file$,@Chr$(0))
String file2#,0=@Add$(file2$,@Chr$(0))
Long opstruct#,0=%hwnd Handle des aufrufenden Fensters
Long opstruct#,4=Action&
Long opstruct#,8=file# pfrom : hier der zu löschende Ordner
Long opstruct#,12=file2# pto (muß 0 oder eine Bereichvar. mit Zieldateinamen z.B. bei Umbenennung sein
Word opstruct#,16=FOF_Flag%
Long opstruct#,18=0 Hier steht nach dem Aufruf 1, wenn User abgebrochen hat
Long opstruct#,22=0 Unbedingt immer auf Null setzen!
Long opstruct#,26=0 Zeiger(Bereich) auf Überschrift des Fortschrittsdialogs
LET FEHLER&=@ShFileOperation(opstruct#)
IF @equ(@long(opstruct#,18),1)
@MessageBox(Die Dateioperation wurde abgebrochen!,Operation abgebrochen!,64)
ELSEIF @neq(Fehler&,0)
@MessageBox(Es ist ein Fehler aufgetreten,ShFileOperation +@str$(Fehler&),16)
EndIf
Dispose file#
Dispose file2#
Dispose opstruct#
endif
EndProc
REM Beispiel
Fileaction COPY,C:WINDOWS,E:TEMP,0,0
Fileaction DELETE,E:../../funktionsreferenzen/XProfan/temp/'>TEMP,,1,1
|
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
| Er costumbre una Code, kein Bild |
|
|
| |
|
|
|
Dieter Zornow | Yo denke esta Expediente kann no kopiert voluntad. Tuve lo con verschiedenen bekannten Commandern intenta, keiner podría ellos kopieren y Unlocker gelang lo auch no ellos freizugeben. Yo denke él debería el Archivos einzeln kopieren y si una Fehler auftritt el nächste kopieren. |
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 23.06.2008 ▲ |
|
|
|
|
J. Strahl | [
Er costumbre una Code, kein Bild
GENAU
El Expediente kann y muß no kopiert voluntad. Aunque bricht el kopieren a el Punto de y kopiert el Rest en el Ordner no mehr más. Como en el Laufe el Tiempo hay siempre mehr Archivos abgelegt voluntad kann Yo auch no simplemente Unterordner kopieren. Deshalb sería Me gusta el Función sagen ¡Hola, no Fehlermeldung si du qué no kopieren kannst, aber kopiere más
Und nu weiß Yo no Yo el FOF_Flag% el einverleiben kann si überhaupt va. Weiß el uno ? |
|
|
| Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD | 23.06.2008 ▲ |
|
|
|
|
| ...Yo tener el ahora veces así gemacht - Tal vez hilft Usted el Anfang - Yo bin kein API-Progi - aber así el Expediente übersprungen beim Kopieren: KompilierenMarcaSeparación |
|
|
| |
|
|
|
| Yo schrieb doch oben ya IF
Einfach Word opstruct#,16=FOF_Flag% | ~FOF_NOERRORUI hier weitere anhängen | blub | brab |solali
FOF_Flag% kannst Usted unangefasst dejar. |
|
|
| |
|
|
|
J. Strahl | Definition en el Encabezamiento fehlt
si yo el así eingebe:
Word opstruct#,16=FOF_Flag% | ~FOF_NOERRORUI
äh, como oben beschrieben blutiger Principiante. Yo hoffe Yo nerv euch no a stark.
Yo vermute veces IF el du Sachen vorraussetzt el Yo ( todavía ) no saber muhaha -
Sollte ~FOF_NOERRORUI no una Zahlenwert haben ? |
|
|
| Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD | 23.06.2008 ▲ |
|
|
|
|
| Für algo como Tuve Konstantinopel programmiert: [...] El Helferrubrik [...] birgt algunos Schätze! Übrigens, XPSE ha esta Konstanten intus - como braucht uno no solchen Encabezamiento mehr y kein ~-Signo. |
|
|
| |
|
|
|
J. Strahl | OK OK - entonces bin Yo sí doch no así unbeholfen.
Den Valor el Yo brauche is 1024 el zusätzlich a Werten noconfirm% y norecycle% zuaddiert voluntad.
sprich :
Word opstruct#,16=FOF_Flag% + 1024
Richtig ?
Des ham wa ya getestet. Leider, desafortunadamente muß Yo sagen el entonces el Kopiervorgang abgebrochen se. Und el se muß weitergehen.
Noch weitere Ideen ? |
|
|
| Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD | 23.06.2008 ▲ |
|
|
|
|
| Besser no addieren pero con binärem or verknüpfen, also word ops....,16=fof_flag% | 1024 | blub | japp |
|
|
| |
|
|
|
J. Strahl | Erst ma una dicken danke schön a todos que hier el Finger wund geschrieben haben ( IF ) - Bin nun a folgendem Ergebniß gekommen.
Word opstruct#,16=FOF_Flag% | 1024
ersetzt y desafortunadamente sólo una Programmabbruch. Gibt lo vieleicht todavía otro Möglichkeiten ? Ohne el @SHFileOperation(1) !SHELL32,SHFileOperationA Función a nutzen ?
|
|
|
| Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD | 23.06.2008 ▲ |
|
|
|
|
Dieter Zornow | Versuchs veces así, el Code es getestet. Lo se alles kopiert qué va sin Programmabbruch KompilierenMarcaSeparaciónDef GetFullPathName(4) ! Kernel32,GetFullPathNameA
Def @SHFileOperation(1) !SHELL32,SHFileOperationA
Proc GetFullName
Parameters name$
Declare buf1#,buf2#
Dim buf1#,560 +1
Dim buf2#,560 +1
GetFullPathName(Addr(name$),511,buf1#,buf2#)
Name$=String$(buf1#,0)
Dispose buf1#
Dispose buf2#
Return name$
EndProc
Proc Fileaction
Parameters Action$,File$,File2$,noconfirm%,norecycle%
Parameter 1: Auszuführende Aktion=COPY, DELETE, RENAME, MOVE
Parameter 2: Quelldatei
Parameter 3: Zielldatei
Parameter 4: 0 = User erst fragen, 1= ohne Nachfrage löschen
Parameter 5: 0 = In Papierkorb verschieben, 1= endgültig löschen
Declare FOF_Flag%,Action&,DO%,Fehler&
Declare opstruct#,file#,file2#
LET DO%=0
IF @upper$(Action$)=RENAME
Let Action&=4
elseIF @upper$(Action$)=COPY
Let Action&=2
elseIF @upper$(Action$)=MOVE
Let Action&=1
elseIF @upper$(Action$)=DELETE
Let Action&=3
else
@messagebox(Diese Funktion ist nicht bekannt!,Aktion wird nicht ausgeführt!,64)
LEt DO%=1
endif
IF DO%=0
Case noconfirm% : noconfirm%=16
CaseNot norecycle% : norecycle%=64
Let FOF_Flag% = (noconfirm% | norecycle% | 1024)
Dim opstruct#,30
Dim file#,(Len(file$) + 2)
Dim file2#,(Len(file2$) + 2)
String file#,0= (file$ + Chr$(0))
String file2#,0=(file2$ + Chr$(0))
Long opstruct#,0=%hwnd Handle des aufrufenden Fensters
Long opstruct#,4=Action&
Long opstruct#,8=file# pfrom : hier der zu löschende Ordner
Long opstruct#,12=file2# pto (muß 0 oder eine Bereichvar. mit Zieldateinamen z.B. bei Umbenennung sein
Word opstruct#,16=FOF_Flag%
Long opstruct#,18=0 Hier steht nach dem Aufruf 1, wenn User abgebrochen hat
Long opstruct#,22=0 Unbedingt immer auf Null setzen!
Long opstruct#,26=0 Zeiger(Bereich) auf Überschrift des Fortschrittsdialogs
LET FEHLER&=@ShFileOperation(opstruct#)
IF long(opstruct#,18) = 1
Print long(opstruct#,18)
ELSEIF (Fehler& <> 0)
Print Fehler
EndIf
Dispose file#
Dispose file2#
Dispose opstruct#
endif
EndProc
REM Beispiel
cls
Declare name$
chdir c:Dokumente und Einstellungen\%userprofile%Lokale EinstellungenAnwendungsdatenMicrosoftWindows
clearlist
addfiles *.*
whileloop 0, %getcount
name$ = Getfullname(ListBoxItem$(&loop))
Fileaction COPY,name$+chr$(0),C:TEMP,0,0
endwhile
waitinput
end
|
|
|
| Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 23.06.2008 ▲ |
|
|
|
|
J. Strahl | Gracias Dieter. Das funktioniert, allerdings sólo innerhalb des Ordners. Desde que el Oberordner aber kopieren voluntad, el se en el Laufe el Tiempo sí siempre mehr füllt y yo vorher no weiß welche neuen Ordner hinzukommen, komme Yo como así auch no más. Aber net así schlimm, aufgrund el vorhandenen Informationen y deiner Yo el problema en el Griff bekommen. Lo va sí hauptsächlich en esta 2 Archivos el während des Betriebes no kopiert voluntad puede y el Función dadurch abbricht sin el Rest más a kopieren. Yo habe el 2 Archivos nun simplemente rausgeschnitten. KompilierenMarcaSeparaciónchdir @ADD$(Pfad$,Lokale EinstellungenAnwendungsdaten)
clearlist
addfiles *.*
whileloop 0, %getcount
if ListBoxItem$(&loop)=[.]
elseif ListBoxItem$(&loop)=[..]
elseif ListBoxItem$(&loop)=[Microsoft]
else
ifnot @Left$(ListBoxItem$(&loop),1)=[
else
dat$=@Left$(ListBoxItem$(&loop),LEN(ListBoxItem$(&loop))-1)
dat$=@Right$(dat$,LEN(dat$)-1)
Fileaction COPY,@ADD$(@ADD$(Pfad$,Lokale EinstellungenAnwendungsdaten),dat$),@ADD$(@ADD$($ProgDir,BackupLokale EinstellungenAnwendungsdaten),dat$),1,1
endif
endif
endwhile
chdir @ADD$(Pfad$,Lokale EinstellungenAnwendungsdatenMicrosoft)
clearlist
addfiles *.*
whileloop 0, %getcount
if ListBoxItem$(&loop)=[.]
elseif ListBoxItem$(&loop)=[..]
elseif ListBoxItem$(&loop)=[Windows]
else
ifnot @Left$(ListBoxItem$(&loop),1)=[
else
dat$=@Left$(ListBoxItem$(&loop),LEN(ListBoxItem$(&loop))-1)
dat$=@Right$(dat$,LEN(dat$)-1)
Fileaction COPY,@ADD$(@ADD$(Pfad$,Lokale EinstellungenAnwendungsdatenMicrosoft),dat$),@ADD$(@ADD$($ProgDir,BackupLokale EinstellungenAnwendungsdatenMicrosoft),dat$),1,1
endif
endif
endwhile
'./../../funktionsreferenzen/XProfan/end/'>end
Für el el lo interessiert. Und many thanks para eure Ayuda....... |
|
|
| Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD | 24.06.2008 ▲ |
|
|
|