2015-01-12 1 views
0

UPDATE : 그래서(AKA 즐겨 찾기) 폴더 경로 "링크"를 받기

난 그냥이 사용자 폴더의 "링크"폴더 아무거나 이름을 지정할 수 있습니다 보인다 모든 다리 일을에서 발견

예 : "\ 사용자 (사용자 이름) \ 링크 C"

"C:\Users\(username)\Links" 

"C:\Users\(username)\MyNewLinksFolder" 
이름을 변경 당신은 여전히로 이동하여 액세스 할 수 있습니다

enter image description here : 윈도우 7 파일 탐색기 트리에서 "즐겨 찾기"노드가 다음

로 이동하려고은 ...

"C:\Users\(username)\Links" 

(손바닥을 이마)


즐겨 찾기에 대한 경로 (기본값)는 다음과 같습니다 :

enter image description here

이 경로를 C# 코드를 통해 가져올 수 있기를 원합니다. 나는 Environment.SpecialFolder Enum을 사용하기를 바랬지 만 그것은 마치 씻는 것처럼 보인다! 난 항상에 거주 폴더에 의존하지 수

c:\users\[username]\Links 

... 누군가가 그 디렉토리의 이름을 변경할 수 있기 때문에, 그것은 여전히 ​​제대로 작동하고 내 하드 코드 된 경로는 쓸모가있을 것입니다.

그래서! 내 질문에, 어떻게 C# 하드 코드 된 문자열을 사용하지 않고 해당 경로를 반환 할 수 있습니까? 나는 또한 그 아이템 아이콘도 얻을 수 있기를 바랄 것이다.!

감사합니다.

+0

'System.Environment.GetFolderPath (Environment.SpecialFolder.F avorites)'나를 위해 잘 작동합니다. 어떤 점에서 그것은 * 당신을 위해 빨래 * 일 것 같습니까? –

+0

그는 어떤 이유로 왼쪽 메뉴에서'Favorites'라고 불리는'Links' 폴더를 원합니다. 나는 Windows에 대해 결코 이해하지 못했다. – Jonesopolis

+0

'HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell 폴더 '를 확인하라. 'Links'가 키'{BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}'에 저장되어있는 것처럼 보입니다. – Malk

답변

2

내가 생각 해낸 것을 공유하고 싶었습니다. 나는 다른 사람들을 도울 수있는 몇 가지 클래스, 함수 등을 만들었습니다 ...

NOTES : - 다른 네임 스페이스에 있기 때문에 프로젝트에 WinAPI 참조를 추가해야합니다. - 내 경우 SpecialFolders.cs는 "FileFolderWorker"라는 네임 스페이스에 포함되어 있으므로 동일한 네임 스페이스에서 아래의 사용법에 표시된 함수를 호출해야합니다. 그렇지 않으면 아래의 사용 영역에 설명 된대로 using 문이 필요합니다. 잘.

사용

using FileFolderWorker; 
SpecialFolders.DebugShowAllFolders(); 

WinAPI.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace WinAPIs 
{ 
    public class WinAPI 
    { 
     #region Shell32 
     #region Public class constants 
     public const int MAX_PATH = 256; 
     public const uint BIF_RETURNONLYFSDIRS = 0x0001; 
     public const uint BIF_DONTGOBELOWDOMAIN = 0x0002; 
     public const uint BIF_STATUSTEXT = 0x0004; 
     public const uint BIF_RETURNFSANCESTORS = 0x0008; 
     public const uint BIF_EDITBOX = 0x0010; 
     public const uint BIF_VALIDATE = 0x0020; 
     public const uint BIF_NEWDIALOGSTYLE = 0x0040; 
     public const uint BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX); 
     public const uint BIF_BROWSEINCLUDEURLS = 0x0080; 
     public const uint BIF_BROWSEFORCOMPUTER = 0x1000; 
     public const uint BIF_BROWSEFORPRINTER = 0x2000; 
     public const uint BIF_BROWSEINCLUDEFILES = 0x4000; 
     public const uint BIF_SHAREABLE = 0x8000; 
     public const uint SHGFI_ICON = 0x000000100;  // get icon 
     public const uint SHGFI_DISPLAYNAME = 0x000000200;  // get display name 
     public const uint SHGFI_TYPENAME = 0x000000400;  // get type name 
     public const uint SHGFI_ATTRIBUTES = 0x000000800;  // get attributes 
     public const uint SHGFI_ICONLOCATION = 0x000001000;  // get icon location 
     public const uint SHGFI_EXETYPE = 0x000002000;  // return exe type 
     public const uint SHGFI_SYSICONINDEX = 0x000004000;  // get system icon index 
     public const uint SHGFI_LINKOVERLAY = 0x000008000;  // put a link overlay on icon 
     public const uint SHGFI_SELECTED = 0x000010000;  // show icon in selected state 
     public const uint SHGFI_ATTR_SPECIFIED = 0x000020000;  // get only specified attributes 
     public const uint SHGFI_LARGEICON = 0x000000000;  // get large icon 
     public const uint SHGFI_SMALLICON = 0x000000001;  // get small icon 
     public const uint SHGFI_OPENICON = 0x000000002;  // get open icon 
     public const uint SHGFI_SHELLICONSIZE = 0x000000004;  // get shell size icon 
     public const uint SHGFI_PIDL = 0x000000008;  // pszPath is a pidl 
     public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010;  // use passed dwFileAttribute 
     public const uint SHGFI_ADDOVERLAYS = 0x000000020;  // apply the appropriate overlays 
     public const uint SHGFI_OVERLAYINDEX = 0x000000040;  // Get the index of the overlay 
     public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010; 
     public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; 
     #endregion 

     #region Public class externs 
     [DllImport("Shell32.dll")] 
     public static extern IntPtr SHGetFileInfo(
      string pszPath, 
      uint dwFileAttributes, 
      ref SHFILEINFO psfi, 
      uint cbFileInfo, 
      uint uFlags 
     ); 
     [DllImport("shell32.dll")] 
     public static extern int SHGetKnownFolderPath(
      [MarshalAs(UnmanagedType.LPStruct)] Guid rfid, 
      uint dwFlags, 
      IntPtr hToken, 
      out IntPtr pszPath 
     ); 
     #endregion 

     #region Public class structures 
     [StructLayout(LayoutKind.Sequential)] 
     public struct SHITEMID 
     { 
      public ushort cb; 
      [MarshalAs(UnmanagedType.LPArray)] 
      public byte[] abID; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public struct ITEMIDLIST 
     { 
      public SHITEMID mkid; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public struct BROWSEINFO 
     { 
      public IntPtr hwndOwner; 
      public IntPtr pidlRoot; 
      public IntPtr pszDisplayName; 
      [MarshalAs(UnmanagedType.LPTStr)] 
      public string lpszTitle; 
      public uint ulFlags; 
      public IntPtr lpfn; 
      public int lParam; 
      public IntPtr iImage; 
     } 

     [StructLayout(LayoutKind.Sequential)] 
     public struct SHFILEINFO 
     { 
      public const int NAMESIZE = 80; 
      public IntPtr hIcon; 
      public int iIcon; 
      public uint dwAttributes; 
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] 
      public string szDisplayName; 
      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = NAMESIZE)] 
      public string szTypeName; 
     } 
     #endregion 

     #region Public classes 
     public static class KnownFolder 
     { 
      public static readonly Guid AddNewPrograms = new Guid("de61d971-5ebc-4f02-a3a9-6c82895e5c04"); 
      public static readonly Guid AdminTools = new Guid("724EF170-A42D-4FEF-9F26-B60E846FBA4F"); 
      public static readonly Guid AppUpdates = new Guid("a305ce99-f527-492b-8b1a-7e76fa98d6e4"); 
      public static readonly Guid CDBurning = new Guid("9E52AB10-F80D-49DF-ACB8-4330F5687855"); 
      public static readonly Guid ChangeRemovePrograms = new Guid("df7266ac-9274-4867-8d55-3bd661de872d"); 
      public static readonly Guid CommonAdminTools = new Guid("D0384E7D-BAC3-4797-8F14-CBA229B392B5"); 
      public static readonly Guid CommonOEMLinks = new Guid("C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D"); 
      public static readonly Guid CommonPrograms = new Guid("0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8"); 
      public static readonly Guid CommonStartMenu = new Guid("A4115719-D62E-491D-AA7C-E74B8BE3B067"); 
      public static readonly Guid CommonStartup = new Guid("82A5EA35-D9CD-47C5-9629-E15D2F714E6E"); 
      public static readonly Guid CommonTemplates = new Guid("B94237E7-57AC-4347-9151-B08C6C32D1F7"); 
      public static readonly Guid ComputerFolder = new Guid("0AC0837C-BBF8-452A-850D-79D08E667CA7"); 
      public static readonly Guid ConflictFolder = new Guid("4bfefb45-347d-4006-a5be-ac0cb0567192"); 
      public static readonly Guid ConnectionsFolder = new Guid("6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD"); 
      public static readonly Guid Contacts = new Guid("56784854-C6CB-462b-8169-88E350ACB882"); 
      public static readonly Guid ControlPanelFolder = new Guid("82A74AEB-AEB4-465C-A014-D097EE346D63"); 
      public static readonly Guid Cookies = new Guid("2B0F765D-C0E9-4171-908E-08A611B84FF6"); 
      public static readonly Guid Desktop = new Guid("B4BFCC3A-DB2C-424C-B029-7FE99A87C641"); 
      public static readonly Guid Documents = new Guid("FDD39AD0-238F-46AF-ADB4-6C85480369C7"); 
      public static readonly Guid Downloads = new Guid("374DE290-123F-4565-9164-39C4925E467B"); 
      public static readonly Guid Favorites = new Guid("1777F761-68AD-4D8A-87BD-30B759FA33DD"); 
      public static readonly Guid Fonts = new Guid("FD228CB7-AE11-4AE3-864C-16F3910AB8FE"); 
      public static readonly Guid Games = new Guid("CAC52C1A-B53D-4edc-92D7-6B2E8AC19434"); 
      public static readonly Guid GameTasks = new Guid("054FAE61-4DD8-4787-80B6-090220C4B700"); 
      public static readonly Guid History = new Guid("D9DC8A3B-B784-432E-A781-5A1130A75963"); 
      public static readonly Guid InternetCache = new Guid("352481E8-33BE-4251-BA85-6007CAEDCF9D"); 
      public static readonly Guid InternetFolder = new Guid("4D9F7874-4E0C-4904-967B-40B0D20C3E4B"); 
      public static readonly Guid Links = new Guid("bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968"); 
      public static readonly Guid LocalAppData = new Guid("F1B32785-6FBA-4FCF-9D55-7B8E7F157091"); 
      public static readonly Guid LocalAppDataLow = new Guid("A520A1A4-1780-4FF6-BD18-167343C5AF16"); 
      public static readonly Guid LocalizedResourcesDir = new Guid("2A00375E-224C-49DE-B8D1-440DF7EF3DDC"); 
      public static readonly Guid Music = new Guid("4BD8D571-6D19-48D3-BE97-422220080E43"); 
      public static readonly Guid NetHood = new Guid("C5ABBF53-E17F-4121-8900-86626FC2C973"); 
      public static readonly Guid NetworkFolder = new Guid("D20BEEC4-5CA8-4905-AE3B-BF251EA09B53"); 
      public static readonly Guid OriginalImages = new Guid("2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39"); 
      public static readonly Guid PhotoAlbums = new Guid("69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C"); 
      public static readonly Guid Pictures = new Guid("33E28130-4E1E-4676-835A-98395C3BC3BB"); 
      public static readonly Guid Playlists = new Guid("DE92C1C7-837F-4F69-A3BB-86E631204A23"); 
      public static readonly Guid PrintersFolder = new Guid("76FC4E2D-D6AD-4519-A663-37BD56068185"); 
      public static readonly Guid PrintHood = new Guid("9274BD8D-CFD1-41C3-B35E-B13F55A758F4"); 
      public static readonly Guid Profile = new Guid("5E6C858F-0E22-4760-9AFE-EA3317B67173"); 
      public static readonly Guid ProgramData = new Guid("62AB5D82-FDC1-4DC3-A9DD-070D1D495D97"); 
      public static readonly Guid ProgramFiles = new Guid("905e63b6-c1bf-494e-b29c-65b732d3d21a"); 
      public static readonly Guid ProgramFilesX64 = new Guid("6D809377-6AF0-444b-8957-A3773F02200E"); 
      public static readonly Guid ProgramFilesX86 = new Guid("7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E"); 
      public static readonly Guid ProgramFilesCommon = new Guid("F7F1ED05-9F6D-47A2-AAAE-29D317C6F066"); 
      public static readonly Guid ProgramFilesCommonX64 = new Guid("6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D"); 
      public static readonly Guid ProgramFilesCommonX86 = new Guid("DE974D24-D9C6-4D3E-BF91-F4455120B917"); 
      public static readonly Guid Programs = new Guid("A77F5D77-2E2B-44C3-A6A2-ABA601054A51"); 
      public static readonly Guid Public = new Guid("DFDF76A2-C82A-4D63-906A-5644AC457385"); 
      public static readonly Guid PublicDesktop = new Guid("C4AA340D-F20F-4863-AFEF-F87EF2E6BA25"); 
      public static readonly Guid PublicDocuments = new Guid("ED4824AF-DCE4-45A8-81E2-FC7965083634"); 
      public static readonly Guid PublicDownloads = new Guid("3D644C9B-1FB8-4f30-9B45-F670235F79C0"); 
      public static readonly Guid PublicGameTasks = new Guid("DEBF2536-E1A8-4c59-B6A2-414586476AEA"); 
      public static readonly Guid PublicMusic = new Guid("3214FAB5-9757-4298-BB61-92A9DEAA44FF"); 
      public static readonly Guid PublicPictures = new Guid("B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5"); 
      public static readonly Guid PublicVideos = new Guid("2400183A-6185-49FB-A2D8-4A392A602BA3"); 
      public static readonly Guid QuickLaunch = new Guid("52a4f021-7b75-48a9-9f6b-4b87a210bc8f"); 
      public static readonly Guid Recent = new Guid("AE50C081-EBD2-438A-8655-8A092E34987A"); 
      public static readonly Guid RecycleBinFolder = new Guid("B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC"); 
      public static readonly Guid ResourceDir = new Guid("8AD10C31-2ADB-4296-A8F7-E47C972"); 
      public static readonly Guid RoamingAppData = new Guid("3EB685DB-65F9-4CF6-A03A-E3EF65729F3D"); 
      public static readonly Guid SampleMusic = new Guid("B250C668-F57D-4EE1-A63C-290EE7D1AA1F"); 
      public static readonly Guid SamplePictures = new Guid("C4900540-2379-4C75-844B-64E6FAF8716B"); 
      public static readonly Guid SamplePlaylists = new Guid("15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5"); 
      public static readonly Guid SampleVideos = new Guid("859EAD94-2E85-48AD-A71A-0969CB56A6CD"); 
      public static readonly Guid SavedGames = new Guid("4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4"); 
      public static readonly Guid SavedSearches = new Guid("7d1d3a04-debb-4115-95cf-2f29da2920da"); 
      public static readonly Guid SEARCH_CSC = new Guid("ee32e446-31ca-4aba-814f-a5ebd2fd6d5e"); 
      public static readonly Guid SEARCH_MAPI = new Guid("98ec0e18-2098-4d44-8644-66979315a281"); 
      public static readonly Guid SearchHome = new Guid("190337d1-b8ca-4121-a639-6d472d16972a"); 
      public static readonly Guid SendTo = new Guid("8983036C-27C0-404B-8F08-102D10DCFD74"); 
      public static readonly Guid SidebarDefaultParts = new Guid("7B396E54-9EC5-4300-BE0A-2482EBAE1A26"); 
      public static readonly Guid SidebarParts = new Guid("A75D362E-50FC-4fb7-AC2C-A8BEAA314493"); 
      public static readonly Guid StartMenu = new Guid("625B53C3-AB48-4EC1-BA1F-A1EF4146FC19"); 
      public static readonly Guid Startup = new Guid("B97D20BB-F46A-4C97-BA10-5E3608430854"); 
      public static readonly Guid SyncManagerFolder = new Guid("43668BF8-C14E-49B2-97C9-747784D784B7"); 
      public static readonly Guid SyncResultsFolder = new Guid("289a9a43-be44-4057-a41b-587a76d7e7f9"); 
      public static readonly Guid SyncSetupFolder = new Guid("0F214138-B1D3-4a90-BBA9-27CBC0C5389A"); 
      public static readonly Guid System = new Guid("1AC14E77-02E7-4E5D-B744-2EB1AE5198B7"); 
      public static readonly Guid SystemX86 = new Guid("D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27"); 
      public static readonly Guid Templates = new Guid("A63293E8-664E-48DB-A079-DF759E0509F7"); 
      public static readonly Guid TreeProperties = new Guid("5b3749ad-b49f-49c1-83eb-15370fbd4882"); 
      public static readonly Guid UserProfiles = new Guid("0762D272-C50A-4BB0-A382-697DCD729B80"); 
      public static readonly Guid UsersFiles = new Guid("f3ce0f7c-4901-4acc-8648-d5d44b04ef8f"); 
      public static readonly Guid Videos = new Guid("18989B1D-99B5-455B-841C-AB7C74E4DDFC"); 
      public static readonly Guid Windows = new Guid("F38BF404-1D43-42F2-9305-67DE0B28FC23"); 
     } 
     #endregion 
     #endregion 

     #region User32 
     #region Public class externs 
     [DllImport("User32.dll")] 
     public static extern int DestroyIcon(IntPtr hIcon); 
     #endregion 
     #endregion 
    } 
} 

SpecialFolders.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 
using System.Diagnostics; 
using WinAPIs; 

namespace FileFolderWorker 
{ 
    #region Classes used as return values 
    public class FolderProperties 
    { 
     #region Private class variables 
     private string m_sPath = ""; 
     private Icon m_oIcon = null; 
     #endregion 

     #region Public class properties 
     public string Path 
     { 
      get 
      { 
       return m_sPath; 
      } 
      set 
      { 
       m_sPath = value; 
      } 
     } 

     public Icon Icon 
     { 
      get 
      { 
       return m_oIcon; 
      } 
      set 
      { 
       m_oIcon = value; 
      } 
     } 
     #endregion 
    } 
    #endregion 

    public static class SpecialFolders 
    { 
     #region Enums 
     public enum FolderList 
     { 
      None, 
      AdminTools, 
      ApplicationData, 
      CDBurning, 
      CommonAdminTools, 
      CommonApplicationData, 
      CommonDesktopDirectory, 
      CommonDocuments, 
      CommonMusic, 
      CommonOemLinks, 
      CommonPictures, 
      CommonProgramFiles, 
      CommonProgramFilesX86, 
      CommonPrograms, 
      CommonStartMenu, 
      CommonStartup, 
      CommonTemplates, 
      CommonVideos, 
      Cookies, 
      Desktop, 
      DesktopDirectory, 
      Favorites, 
      Fonts, 
      History, 
      InternetCache, 
      LocalApplicationData, 
      LocalizedResources, 
      MyComputer, 
      MyDocuments, 
      MyMusic, 
      MyPictures, 
      MyVideos, 
      NetworkShortcuts, 
      Personal, 
      PrinterShortcuts, 
      ProgramFiles, 
      ProgramFilesX86, 
      Programs, 
      Recent, 
      Resources, 
      SendTo, 
      StartMenu, 
      Startup, 
      System, 
      SystemX86, 
      Templates, 
      UserProfile, 
      Windows, 
      Links, 
     } 

     public enum FolderType 
     { 
      None, 
      System, 
      Custom, 
     } 
     #endregion 

     #region Public static class methods 
     public static FolderProperties GetPath(string sFolderKey) 
     { 
      //Overloaded 
      FolderList FolderKey = FolderList.None; 
      //Determine the folder type 
      switch (sFolderKey) 
      { 
       #region System's Environment.SpecialFolder elements 
       //There was more code here but had to 
       //remove due to SO's character limit 
       //Full code: http://pastebin.com/dE0Y6tFB 
       case "System": 
        FolderKey = FolderList.System; 
        break; 
       case "SystemX86": 
        FolderKey = FolderList.SystemX86; 
        break; 
       case "Templates": 
        FolderKey = FolderList.Templates; 
        break; 
       case "UserProfile": 
        FolderKey = FolderList.UserProfile; 
        break; 
       case "Windows": 
        FolderKey = FolderList.Windows; 
        break; 
       #endregion 

       #region Custom elements 
       case "Links": 
        FolderKey = FolderList.Links; 
        break; 
       #endregion 
      } 

      return GetPath(FolderKey); 
     } 
     public static FolderProperties GetPath(FolderList FolderKey) 
     { 
      FolderProperties fp = new FolderProperties(); 
      FolderType sfType = FolderType.None; 
      Environment.SpecialFolder sf = Environment.SpecialFolder.AdminTools; 

      //Determine the folder type 
      switch (FolderKey) 
      { 
       #region System's Environment.SpecialFolder elements 
       //There was more code here but had to 
       //remove due to SO's character limit 
       //Full code: http://pastebin.com/dE0Y6tFB 
       case FolderList.System: 
        sfType = FolderType.System; 
        sf = Environment.SpecialFolder.System; 
        break; 
       case FolderList.SystemX86: 
        sfType = FolderType.System; 
        sf = Environment.SpecialFolder.SystemX86; 
        break; 
       case FolderList.Templates: 
        sfType = FolderType.System; 
        sf = Environment.SpecialFolder.Templates; 
        break; 
       case FolderList.UserProfile: 
        sfType = FolderType.System; 
        sf = Environment.SpecialFolder.UserProfile; 
        break; 
       case FolderList.Windows: 
        sfType = FolderType.System; 
        sf = Environment.SpecialFolder.Windows; 
        break; 
       #endregion 

       #region Custom elements 
       case FolderList.Links: 
        sfType = FolderType.Custom; 
        break; 
       #endregion 
      } 

      //Build the folder object's path 
      switch (sfType) 
      { 
       case FolderType.System: 
        fp.Path = Environment.GetFolderPath(sf); 
        break; 
       case FolderType.Custom: 
        fp.Path = "LINKS"; 
        fp.Path = GetSpecialFolderPath(WinAPI.KnownFolder.Links); 
        break; 
      } 

      //Build the folder object's icon 
      //more to be done here... 

      return fp; 
     } 

     public static void DebugShowAllFolders() 
     { 
      foreach (SpecialFolders.FolderList sf in (SpecialFolders.FolderList[])Enum.GetValues(typeof(SpecialFolders.FolderList))) 
      { 
       Debug.WriteLine("SpecialFolder: " + sf + "\n Path: " + SpecialFolders.GetPath(sf.ToString()).Path + "\n"); 
      } 
     } 

     public static string GetSpecialFolderPath(Guid kFolderID) 
     { 
      string sRet = ""; 

      IntPtr pPath; 
      if (WinAPI.SHGetKnownFolderPath(kFolderID, 0, IntPtr.Zero, out pPath) == 0) 
      { 
       sRet = System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath); 
       System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pPath); 
      } 

      return sRet; 
     } 
     #endregion 
    } 
} 
+0

위대한 코드! 감사! – Lin

2

만 적용 환경 변수는 것 % USERPROFILE % 경로에있는 링크 하위 폴더를 제외하고 모두 대체하는 :

%userprofile%\Links 

나는 당신이 그것을 읽으려면 전체 경로를 포함하는 레지스트리 키가 있다고 생각 또한 주변을 둘러보고 내가 어디에 있는지 기억할 수 있는지 알아 봅니다.

편집

(나는 아직 언급 할 수 있지만) 내가 전체 경로를 레지스트리 키 HKCU \ 소프트웨어 \ 마이크로 소프트 \ 윈도우에 저장됩니다 Malk의 코멘트 @ 확인할 수 있습니다 \ CurrentVersion을 탐색기 \ \ 쉘 폴더 {BFB9D5E0-C6A9-404C-B2B2-AE6DB6AF4968}

1

은 실제로 SHGetFolderPath을 호출합니다. SpecialFolder 열거 형에는 사용자 프로필 폴더 아래에 여러 폴더가 있지만 링크 폴더는 포함되어 있지 않습니다. Links 폴더를 얻으려면 SHGetKnownFolderPath이라는 새 API를 사용해야합니다.다음은 MSDN의 링크입니다. http://msdn.microsoft.com/en-us/library/windows/desktop/bb776911(v=vs.85).aspx

링크 폴더의 GUID는 {bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968}입니다. 여기에서 찾을 수 있습니다 : http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx

그러나 SHGetKnownFolderPath은 내장 된 .net 클래스 라이브러리에서 사용할 수없는 것 같습니다. P/호출해야합니다.

편집 : 아이콘을 가져 오려면 폴더에서 desktop.ini 파일을 찾으십시오. 여기에는 DLL의 아이콘과 자원 아이디가 폴더의 아이콘으로 사용됩니다.

관련 문제