拷屏,到photoshop里修改。
是这样码?

解决方案 »

  1.   

    C# FileInfo vs API SHGetFileInfo
    http://www.dotnet247.com/247reference/msgs/19/97078.aspx
      

  2.   

    图标都在Explorer.exe中,找个抓图标的工具取出来就行了.
      

  3.   

    net_lover和chainet:
        这样只能获取静态图标。但Win98和WinXP中的图标是不同的。
    FindCsdnToDay:
        这个函数是可以获取图标。但是不知如何取得这个函数的第一个Pidl参数。
      

  4.   

    http://www.csdn.net/develop/article/15/15949.shtm
    是一个人写的资源管理器源代码,你可以借鉴.
    关于API函数SHGetFileInfo的用法你可以参照代码里的方式,然后对Explorer.exe取里面的图标即可.
      

  5.   

    chainet:
        虽然他这种方法可以获取图标。但不能获取每个目录下有些什么东西。如桌面目录下有 我的电脑.网上邻居.我的文件夹等。
        本人得知好象要用一个IShellFolder的接口.本人正在研究.
      

  6.   

    取图标的另一种方法(但仍不能获取每个目录下有些什么东西)
    DllImport("shell32.dll")]
    private static extern IntPtr ExtractIcon(IntPtr hInst,string lpszExeFileName,int nIconIndex);
    [DllImport("user32.dll")]
    private static extern long DrawIcon(IntPtr hdc,int x,int y,IntPtr hIcon);
    private void ShowIcon(string file, int num)
    {
        this.Text = filename;
        IntPtr x1 = ExtractIcon(this.Handle,file,num);
        this.Refresh();
        Graphics g = CreateGraphics();
        IntPtr hdc = g.GetHdc();
        long x2 = DrawIcon(hdc,10,10,x1);
        g.ReleaseHdc(hdc);
        g.Dispose();
    }
      

  7.   

    谢谢chainet一直对本问题的关注。
    本人正在研究IShellFolder接口。
    如有结果。将告知大家
      

  8.   

    AngelGavin:
         请问你是怎么遍历的.是通过接口IEnumIDList吗?
      

  9.   

    我是用System.IO.DirectoryInfo取得文件夹,再用递归取得子文件夹,
    然后一个一个输出,挺痛苦的
    应该怎么做才能效率高啊
    IEnumIDList能做什么啊?
      

  10.   

    AngelGavin:
        IEnumIDList能枚举一个目录下的所有子目录(包括网络邻居.我的电脑等)我是用SHGetDesktopFolder获取IShellFolder,然后有IShellFolder.EnumObjects来获取IEnumIDList接口。以上都没问题。但当用IEnumIDList。Next枚举目录时出现"未将对象引用设置到对象实例",本人百思不得其解。还望高手指教。谢谢!
      

  11.   

    不知是否是IEnumIDList接口声明有问题。如果有谁知道有关接口声明的任何资料或有关介绍请告知。本人将不胜感激。先谢了.
      

  12.   

    ms-help://MS.VSCC/MS.MSDNVS.2052/shellcc/platform/Shell/IFaces/IEnumIDList/IEnumIDList.htm
      

  13.   

    用PHOTSHOP做一个,
    然后再调用啊!呵呵~~~~~~~
      

  14.   

    chainet:
      这个我看了几遍了。这是VC++的声明方式。我把它改成了C#的声明方式。不知是否改错了没有。因为上网不方便,我现只把IEnumIDList接口的Next函数声明写出来。请各位看一下有没有错。
       [PreserveSig]int Next(ulong celt,ref IntPtr reglt,ref ulongpcelt)
      

  15.   

    E:\ware\Microsoft Visual Studio .NET\Common7\Graphics\icons
    这个目录下有许多图标
    其中的win95目录中有我的电脑,网上邻居等图标,呵呵
      

  16.   

    研究了很久也不什么原因.百般无赖。只有用C++托管与了一个动态库在C#中可以调用。枚举了桌面上的所有目录和文件。看来只能用C++写了。期待C#代码......