我有一个删除一个文件夹,一切都在它的例程。 删除所有文件后,它的最后一件事是:
if not Windows.RemoveDirectory(pname) then
raise EInOutError.Create(SysErrorMessage(GetLastError));
不幸的是,我倾向于从该得到一个错误,如果我在Windows资源管理器打开的窗口中显示的文件夹。 该错误表示该文件夹不是空的,这是不正确的。 有什么办法来覆盖这一点,或许迫使窗口关闭?
如果它的确与众不同,我在Vista家庭高级版64。
事实上,它甚至比这更普遍。 你永远不能删除任何程序,而不仅仅是浏览器的当前目录。
你可以写的东西追杀Explorer窗口在感兴趣的目录但什么其他程序指点?
下面的代码显示了关窗的一般方法。 这个例子是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这里是在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消息关闭它。