Deutsch
Quelltexte/ Codesnippets

Shfileoperation

 

Beschreibung:

Mit der API SHFileOperation kann man ganze Ordner oder einzelne Dateien mit Forschrittsanzeige kopieren, löschen (auch Papierkorb), verschieben oder umbenenen.


Deklaration:

Def @SHFileOperation(1) !SHELL32,SHFileOperationA


Parameter:

1.Parameter: Structur oder 30 Byte große Bereichsvariable =>
-Byte 0-3 = Handle des Fensters, auf dem der Fortschrittsdialog erscheinen soll.
-Byte 4-7 = Flag für die durchzuführende Aktion => $1 = verschieben; $2=kopieren; $2=löschen; $4=umbenenen
-Byte 8-11 = Adresse einer Bereichvariablen, die die zu modifizierende(n) Datei(en) oder Ordner enthält. Diese Bereichvariable muß als Abschluß zwei Nullbytes enthalten. Einzelne Dateien oder Ordner werden mit einem Nullbyte getrennt.
-Byte 12-15 = Adresse einer Bereichvariablen, die die Ziel-datei(en) oder -ordner enthält. Diese Bereichvariable muß als Abschluß zwei Nullbytes enthalten. Einzelne Dateien oder Ordner werden mit einem Nullbyte getrennt.
-Byte 16-17 = Flag für die weitere Optionen der durchzuführenden Aktion =>
$40 = Wenn möglich werden Undoinformationen gespeichert.
$80 = Wenn Wildcards (*.*) verwendet werden, nur Dateien berücksichtigen.
$1 = Es gibt mehrere Zielordner.
$10 = Keine Einzelbestätigung.
$200 = Das Erstellen eines Ordners muß nicht bestätigt werden.
$2000 = Verbundene Files nicht als Gruppe verschieben.
$800 = Es werden keine Security Attribute kopiert (NT/2000/XP)
$400 = Es wird kein Userinterface bei einem Fehler ausgegeben.
$1000 = Es werden keine Unterverzeichnisse berücksichtigt (nur aktuelles Verzeichnis).
$8 = Wenn Filename schon vorhanden ist, anderen Namen geben!
$4 = Es wird kein Fortschrittsdialog angezeigt.
$100 = Nur Fortschrittsdialog, keinen Dateinamen anzeigen!
$20 = Es wird ein Mapping Objekt mit den alten und neuen Dateinamen erzeugt, wenn $8 spezifiziert wurde und Files umbenannt wurden.
-Byte 18-21 = Rückgabeflag. Wenn der User eine Aktion abgebrochen hat, steht hier 1.
-Byte 22-25 = Hier steht als Rückgabe das Handle des Mapping Objektes, wenn $20 spezifiziert wurde.
-Byte 26-29 = Die Adresse eines Textstrings als Überschrift für den Fortschrittsdialog, wenn $100 spezifiziert wurde.


Rückgabewert:

0 bei Erfolg, 1 bei Fehler.

Beispiele:

KompilierenMarkierenSeparieren
Def @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:TEMP,,1,1
 
07.03.2005  
 




J.
Strahl
Hallölle,

schöne Funktion die ich benutze die Userprofile auf einen Stick zu kopieren.

Leider gibt es in dem Ordner %userprofile%Lokale EinstellungenAnwendungsdatenMicrosoftWindows die Datei UsrClass.dat welche in Benutzung ist.
Beimm kopieren bekomme ich die Fehlermeldung Datei kann nicht kopieren werden da sie in Benutzung ist

Gibt es eine Möglichkeit solche Dateien zu überspringen oder die die Fehlermeldung zu umgehen ? - Nach der Fehlermeldung bricht das Programm ab und der Rest wird nicht mehr kopiert.

 
Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD
22.06.2008  
 



Schau mal, hier stehen Flags  [...]  , z.B. FOF_NOCONFIRMATION oder FOF_NOERRORUI.
 
22.06.2008  
 




Michael
Dell
Hallo,

Du könntest den Ordner Zippen die geschützten Dateien blieben dann ausen vor.

Oder Du startest den PC mit nem zweiten Betriebsystem oder ner Live-CD/DVD und kopierst den Ordner komplett.

Mit einer DOS-Startdiskette kannst Du das auch wenn Du lfn4dos und eff. ntsf4dos verwendest!

Die letzte Möglichkeit wäre die SFP (SystemFileProtection) abzuschalten, davon ist allerdings dringend abzuraten, denn das hieße direkte manipulation des Systems!
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
22.06.2008  
 



Ich glaube SystemFileProtection abschalten würde ihm hier nicht viel nutzen.

Wenn es ihm um das Auslesen der Datei geht hilft vlt. ein FileMode auf nur Lesen zu setzen.

Übrigens habe ich die Datei UsrClass.Dat nicht. (xphomesp3)
 
22.06.2008  
 




J.
Strahl
ja, suppa - die Sache mit den Flags gefällt mir schonmal. Wichtig ist das weiterkopiert wird. Allerdings habe ich jetzt keinerlei Plan wo und wie ich jetzt irgendwo ein Flag setze.

` FOF_NOERRORUI -- Do not display a dialog to the user if an error occurs.`

Soweit klar aber den source entsprechend abändern. No Plan.. Jemand von euch ?
 
Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD
22.06.2008  
 



Vom Code oben:
KompilierenMarkierenSeparieren
Word opstruct#,16=FOF_Flag% | ~FOF_NOERRORUI
 
22.06.2008  
 




J.
Strahl
oha, sorry - blutigen Anfänger.......

Case noconfirm% : Let noconfirm%=16
CaseNot norecycle% : Let norecycle%=64
Let FOF_Flag% = @or(noconfirm%,norecycle%)

Ich leite mal davon ab das dem FOF_Flag% noch was einschieben muß. Aber was ?

 
Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD
22.06.2008  
 



Probiers!
 
22.06.2008  
 



ich habe den oben stehenden Code in meinen NC-Clone schon vor zwei Jahren eingebaut. Die Parameter können über die zum Programm gehörende INI-Datei verstellt werden und das Ganze funktioniert perfekt
 
22.06.2008  
 




J.
Strahl


ne ne ne, ich weiß nicht was ich ihm geben soll. Ich habe jetzt alles gehabt, direkter Abbruch ohne Meldung. Kopieren ohne Anzeige was kopiert wird. Aber das der Fehler einfach übersprungen wird, klappt nicht. Ich weiß da nicht weiter, gehe aber davon aus das ich das eh nicht schnalle.

Ich habe in der Zeile :

Let FOF_Flag% = @or(noconfirm%,norecycle%)

einfach mal ein + 32 und verchiedene andere Möglichkeiten ausprobiert. Ich komme aber nicht auf das gewünschte Ergebniß. Ich weiß einfach nicht und habe es auch nicht finden können welcher Wert zusätzlich da rein muß.

@ Horst : Ich habe mal nach dem NC-Clone gesucht ob ich da etwas finden kann - leider konnte ich des auch nicht finden. höhö

 
Windows 7 Ultimate 64 * 12 GB Ram * XProfan 11.2a * PRFellow * PRFPAD
22.06.2008  
 




Ich habe mal nach dem NC-Clone gesucht ob ich da etwas finden kann - leider konnte ich des auch nicht finden. höhö


Wo willst Du denn da suchen ? - Dann müsstest Du schon Zugang zu meiner Festplatte haben - außer Jörg hätte noch den Code vom Beta-Test und das glaube ich nicht.
So wie im Bild sieht er aus und hat den Code intregiert

213 kB
Hochgeladen:22.06.2008
Ladeanzahl200
Herunterladen
 
22.06.2008  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.701 Betrachtungen

Unbenanntvor 0 min.
Andre Rohland31.05.2019
supernova04.12.2013
Christian Hahn05.07.2013

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie