2009-07-05 39 views
1

我有一個例程,刪除一個文件夾和其中的一切。刪除所有文件後,它的最後一件事是:如何防止Windows資源管理器干擾刪除文件夾?

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

不幸的是,我傾向於從該得到一個錯誤,如果我在Windows資源管理器打開的窗口中顯示的文件夾。錯誤說該文件夾不是空的,這是不正確的。有什麼方法可以覆蓋這個,也許迫使窗戶關閉?

如果它的確與衆不同,我在Vista家庭高級版64

+0

我認爲這是Windows鎖定文件夾的問題。 – 2009-07-05 16:59:28

回答

1

下面的代碼顯示了關窗的一般方法。這個例子適用於Internet Explorer;你將不得不調整它有點對Windows資源管理器..

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

見這個例子:http://blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx 這裏是在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=

您可以通過使用這個例子中枚舉所有窗口並找到資源管理器的窗口,該窗口在您的文件夾中打開。然後你可以通過發送WM_CLOSE消息來關閉它。

+0

呃!那個德爾福翻譯只是一點點文字。所有這些嵌套的嘗試塊... *不寒而慄* 但我想我得到的基本想法。 – 2009-07-06 13:06:53

+0

那麼,因爲它只是翻譯到另一種語言(英語 - >俄語,C - >德爾福),那麼,實際上,代碼幾乎是1比1;) – Alex 2009-07-06 16:55:09

2

其實,它比這更一般。您永遠不能刪除任何程序的當前目錄,而不僅僅是資源管理器。

你可以編寫一些搜索窗口指向感興趣的目錄,但其他程序呢?

相關問題