在C#中列举“Godmode”
发布时间:2020-12-15 22:50:12 所属栏目:百科 来源:网络整理
导读:对于搜索应用程序,我目前正在尝试索引 Windows包含的“Godmode”特殊文件夹以用于其自己的搜索功能. 使用伟大的Vanara.Windows.Shell库我目前能够索引我的桌面,但是一旦我尝试索引Godmode文件夹,枚举就不会产生任何项目.我尝试以管理员用户身份运行IDE,但是
对于搜索应用程序,我目前正在尝试索引
Windows包含的“Godmode”特殊文件夹以用于其自己的搜索功能.
使用伟大的Vanara.Windows.Shell库我目前能够索引我的桌面,但是一旦我尝试索引Godmode文件夹,枚举就不会产生任何项目.我尝试以管理员用户身份运行IDE,但是没有修复它. 这是我目前正在使用的代码: void Main() { Shell32.IShellFolder desktopShellFolder; Shell32.SHGetDesktopFolder(out desktopShellFolder); Shell32.PIDL ppidl; Shell32.SFGAO psfgaoOut; Shell32.SHParseDisplayName("shell:::{ED7BA470-8E54-465E-825C-99712043E01C}",IntPtr.Zero,out ppidl,(Shell32.SFGAO)0,out psfgaoOut); var godmodeShellFolder = (Shell32.IShellFolder)desktopShellFolder.BindToObject(ppidl,null,new Guid("000214E6-0000-0000-C000-000000000046")); CollectSearchItems(godmodeShellFolder,ppidl); } void CollectSearchItems(Shell32.IShellFolder shellFolder,Shell32.PIDL pidl) { var itemEnum = shellFolder.EnumObjects(IntPtr.Zero,Shell32.SHCONTF.SHCONTF_NONFOLDERS | Shell32.SHCONTF.SHCONTF_FOLDERS); IntPtr itemId; uint fetched; while (itemEnum.Next(1,out itemId,out fetched) == HRESULT.S_OK) { Shell32.SFGAO sfgao = Shell32.SFGAO.SFGAO_FOLDER | Shell32.SFGAO.SFGAO_STREAM | Shell32.SFGAO.SFGAO_LINK; shellFolder.GetAttributesOf(1,new IntPtr[] { itemId },ref sfgao); if ((sfgao & Shell32.SFGAO.SFGAO_FOLDER) == 0) { var childPidl = new Shell32.PIDL(itemId); var itemName = shellFolder.GetDisplayNameOf(childPidl,Shell32.SHGDNF.SHGDN_INFOLDER | Shell32.SHGDNF.SHGDN_NORMAL); } } } 如果我更换 为什么枚举Godmode文件夹不起作用,我该如何解决这个问题? 解决方法
我找到了两个解决方案
>以x64 / AnyCPU模式而不是x86运行我的应用程序,现在枚举器实际上找到了元素,我可以查询它们的名称.这给了我期待的结果.>来自@SimonMourier的解决方案.这段代码更简单,效果很好! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |