首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell32.dll .NET接口依赖于操作系统

Shell32.dll .NET接口依赖于操作系统
EN

Stack Overflow用户
提问于 2011-01-12 04:04:21
回答 1查看 1.9K关注 0票数 0

我想找到用户程序菜单中列出的每个应用程序。我使用以下例程:

代码语言:javascript
复制
private static void ProcessDirectoryLnkFiles(string path, bool recurse,
    UpdateProcessFromLnkDelegate sProcFile)
{
    try 
    {
        string[] sPrograms = Directory.GetFiles(path, "*.lnk",
            SearchOption.TopDirectoryOnly);

        string[] sSubdirs = Directory.GetDirectories(path);
        Shell32.Shell shell = new Shell32.Shell();

        foreach (string p in sPrograms) {
            Shell32.Folder sLinkFolder;
            Shell32.FolderItem sLinkFolderItem;
            Shell32.ShellLinkObject sLinkObject;
            string sLinkFullpath;

            // Get link full path
            sLinkFullpath = Path.GetFullPath(p);
            // Get link folder
            sLinkFolder = shell.NameSpace(
                Path.GetDirectoryName(sLinkFullpath));
            // Get link item
            sLinkFolderItem = sLinkFolder.Items().
                Item(Path.GetFileName(sLinkFullpath));
            // Get link object
            sLinkObject = (Shell32.ShellLinkObject)
                sLinkFolderItem.GetLink;

            if (sLinkObject.Target.IsFolder == false)
                sProcFile(sLinkObject);
        }

        if (recurse == true)
            foreach (string dir in sSubdirs) 
                ProcessDirectoryLnkFiles(dir, true, sProcFile);
    } 
    catch (UnauthorizedAccessException eUnauthorizedAccessException) {
        sLog.Warn("Unable to iterate on directory {0} ({1}).", 
            path, eUnauthorizedAccessException.Message); 
    } 
    catch (IOException eIOException) {
        sLog.Warn("Unable to iterate on directory {0} ({1}).", 
            path, eIOException.Message);
    } 
    catch (COMException eCOMException) {                
    } 
    catch {
        throw;
    }
 }

这在Windows7 x64上运行得很好。但不幸的是,在Windows XP x86上,Shell32.Shell对象没有声明Shell32.Shell.Target属性。如何使此代码在Windows XP上运行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-12 05:32:53

使用Path属性,该属性提供指向目标的路径。然后,System.IO.Directory.Exists()可以告诉您它是否是目录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4662041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档