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

时间:2009-07-05 16:48:17

标签: windows delphi directory windows-explorer

我有一个删除文件夹及其中所有内容的例程。删除所有文件后,它做的最后一件事是:

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

不幸的是,如果我在Windows资源管理器中打开一个显示该文件夹的打开窗口,我往往会收到错误。错误说该文件夹不为空,这不是真的。有没有办法覆盖这个,可能会迫使窗口关闭?

如果它有所作为,我会使用Vista Home Premium 64。

3 个答案:

答案 0 :(得分:2)

实际上,它比这更普遍。您永远不能删除 ANY 程序的当前目录,而不仅仅是资源管理器。

你可以写一些东西,搜索指向感兴趣的目录的浏览器窗口,但其他程序呢?

答案 1 :(得分: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.

答案 2 :(得分: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消息来关闭它。