在我的 shell 扩展中,我想模仿资源管理器的行为并显示“此文件夹为空”消息,而实际上我的文件夹为空:
但是,我无法完成它。
使用 API Monitor,我看到当资源管理器刷新空文件夹时,IEnumIDList::Next()
返回以下内容:
意思是,返回的“下一个”项目为NULL
,项目数量为0
,结果为S_FALSE
。
如上所述,我尝试模仿返回值,实际上没有为该文件夹加载任何项目,但也没有出现消息。
那么什么 API 会触发此消息?
最佳答案
您的 IEnumIDList 实现必须实现 IObjectWithSite。实现示例:
var
ServiceProvider: IServiceProvider;
ShellBrowser: IShellBrowser;
ShellView: IShellView;
FolderView2: IFolderView2;
begin
if not Assigned(ASite) then Exit;
OleCheck(ASite.QueryInterface(IServiceProvider, ServiceProvider));
try
OleCheck(ServiceProvider.QueryService(SID_STopLevelBrowser, IShellBrowser, ShellBrowser));
try
OleCheck(ShellBrowser.QueryActiveShellView(ShellView));
try
OleCheck(ShellView.QueryInterface(IFolderView2, FolderView2));
try
FolderView2.SetText(FVST_EMPTYTEXT, 'The message you want to see');
finally
FolderView2 := nil;
end;
finally
ShellView := nil;
end;
finally
ShellBrowser := nil;
end;
finally
ServiceProvider := nil;
end;
end;
结果:
您也可以在 IShellFolder 实现中使用相同的代码。
关于winapi - 当我的 shell 扩展文件夹为空时显示 'This folder is empty' 背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983132/