如何防止Windows资源pipe理器干扰删除文件夹?

我有一个例程,删除一个文件夹和其中的一切。 删除所有文件后,最后一件事是:

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

不幸的是,如果在显示文件夹的Windows资源pipe理器中有一个打开的窗口,我倾向于从这里得到一个错误。 错误说该文件夹不是空的,这是不正确的。 有什么办法可以覆盖这个,也许迫使窗户closures?

如果它有所作为,我在Vista家庭高级版64。

Solutions Collecting From Web of "如何防止Windows资源pipe理器干扰删除文件夹?"

其实比这更一般 永远不能删除任何程序的当前目录,不只是资源管理器。

你可以写一些东西,追捕资源管理器窗口指向感兴趣的目录,但其他程序呢?

以下代码显示了关闭窗口的一般方法。 这个例子适用于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. 

看到这个例子: http : //blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx这里是在德尔福相同的代码: 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消息来关闭它。