我有一个删除文件夹及其中所有内容的例程。删除所有文件后,它做的最后一件事是:
if not Windows.RemoveDirectory(pname) then
raise EInOutError.Create(SysErrorMessage(GetLastError));
不幸的是,如果我在Windows资源管理器中打开一个显示该文件夹的打开窗口,我往往会收到错误。错误说该文件夹不为空,这不是真的。有没有办法覆盖这个,可能会迫使窗口关闭?
如果它有所作为,我会使用Vista Home Premium 64。
答案 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消息来关闭它。