2009-07-05 9 views
1

Ich habe eine Routine, die einen Ordner und alles darin löscht. Nach dem Löschen aller Dateien, es ist das letzte, was tut, ist:Wie verhindere ich, dass Windows Explorer beim Löschen eines Ordners stört?

if not Windows.RemoveDirectory(pname) then 
    raise EInOutError.Create(SysErrorMessage(GetLastError)); 

Leider neige ich daraus einen Fehler zu erhalten, wenn ich ein offenes Fenster in Windows Explorer haben Sie den Ordner anzeigen. Der Fehler besagt, dass der Ordner nicht leer ist, was nicht der Fall ist. Gibt es eine Möglichkeit, dies zu überschreiben und das Schließen des Fensters zu erzwingen?

Im Fall macht es einen Unterschied, ich bin auf Vista Home Premium 64

+0

Ich denke, es ist ein Problem mit Windows den Ordner zu sperren. –

Antwort

1

Der folgende Code zum Schließen Fenster den allgemeinen Ansatz zeigt. Dieses Beispiel gilt für den Internet Explorer. Sie werden es ein bisschen für den Windows Explorer zu optimieren haben ..

program Sample; 

function CloseIEs(Wnd : HWnd; Form : TForm1) : Boolean; export; stdcall; 
var 
    sCap : array [0..255] of char; 
begin 
    GetWindowText (Wnd, sCap, sizeof(sCap)); 
    if pos ('Microsoft Internet Explorer', sCap) > 0 then 
    begin 
    PostMessage (Wnd, WM_CLOSE, 0, 0); 
    end 
    else 
    begin 
    // check by class name! 
    GetClassName (Wnd, sCap, sizeof(sCap)); 
    if sCap = 'IEFrame' then 
     PostMessage (Wnd, WM_CLOSE, 0, 0); 
    end; 

    CloseIEs := true; { next window, please } 
end; 

begin 
    // close all hidden instances 
    EnumWindows(@CloseIEs, 0); 
end. 
1

dieses Beispiel Siehe: http://blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx Und hier ist der gleiche Code in Delphi: http://translate.google.com/translate?prev=hp&hl=ru&js=n&u=http://transl-gunsmoker.blogspot.com/2009/05/blog-post_7575.html&sl=ru&tl=en&history_state0=

Sie alle Fenster, indem Sie dieses Beispiel aufzählen und finde das Explorer-Fenster, das in deinem Ordner geöffnet ist. Dann können Sie es schließen, indem Sie WM_CLOSE Nachricht senden.

+0

Ugh! Diese Delphi-Übersetzung ist nur ein bisschen zu wörtlich. All diese verschachtelten try Blöcke ... * schaudern * Aber ich denke, ich bekomme die Grundidee. –

+0

Nun, da es nur eine Übersetzung in eine andere Sprache ist (Englisch -> Russisch, C -> Delphi), dann ist Code in der Tat fast 1 zu 1;) – Alex

+0

Ja, aber ich würde ein paar sehr seltsame Blicke bekommen, wenn Ich sollte zu jemandem in Südamerika gehen und sie fragen "¿Que está arriba?" : P –

2

Eigentlich ist es noch allgemeiner. Sie können nie das aktuelle Verzeichnis von ANY Programm löschen, nicht nur Explorer.

Sie könnten etwas schreiben, das Explorer-Fenster auf das Verzeichnis von Interesse gejagt, aber was ist mit anderen Programmen?

+0

Zutreffend, aber für diesen speziellen Fall ist es einfach zu wissen, wie man damit umgeht: Schließen Sie das Fenster. Für allgemeinere Fälle wird es ein bisschen schwieriger ... –