1

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

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

不幸的是,如果我在 Windows 资源管理器中有一个显示文件夹的打开窗口,我往往会因此而出错。错误说文件夹不为空,这是不正确的。有什么办法可以覆盖它,也许是强制关闭窗口?

以防万一,我使用的是 Vista Home Premium 64。

4

3 回答 3

2

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

您可以编写一些东西来寻找指向感兴趣目录的资源管理器窗口,但是其他程序呢?

于 2009-07-06T04:08:31.127 回答
1

以下代码显示了关闭窗口的一般方法。此示例适用于 Internet Explorer;您必须针对 Windows Explorer 进行一些调整。

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.
于 2009-07-05T17:16:04.743 回答
1

请参阅此示例:https ://devblogs.microsoft.com/oldnewthing/20040720-00/?p=38393 。这是德尔福中的相同代码: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 消息来关闭它。

于 2009-07-05T18:46:18.327 回答