728x90
SHGetSpecialFolderPath는 Windows운영체제의 여러가지 지정된 특수Folder의 경로를 조회하는 함수입니다.
<DllImport("shell32.dll")> _
Private Shared Function SHGetSpecialFolderPath(ByVal hwndOwner As IntPtr, <Out()> ByVal lpszPath As StringBuilder, ByVal nFolder As Integer, ByVal fCreate As Boolean) As Boolean
End Function
- VB.NET 선언
[DllImport("shell32.dll")]
static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out] StringBuilder lpszPath, int nFolder, bool fCreate);
- C# 선언
SHGetSpecialFolderPath 함수의 첫번째 인수는 Pointer관련 형식으로 단순조회시에는 별다른 값을 필요로 하지 않으므로 Zero를 지정합니다.
두번째 인수는 찾고자 하는 Path를 문자열 형식으로 반환받을 변수를 지정하며 세번째 인수에 Windows의 어떠한 System Foler를 반환받을지 Type을 설정하도록 합니다. 세번째 인수로 지정할 수 있는 값은 다음과 같은것이 있으니 참고하시기 바랍니다. 이 인수들을 잘 활용하면 System의 거의 모든 특수Folder를 가져올 수 있으면 부분적으로나마 System정보도 가져올 수 있게 됩니다.
VB.NET | C# | Path |
&H0 | 0x0000; | DESKTOP |
&H1 | 0x0001; | INTERNET |
&H2 | 0x0002; | PROGRAMS |
&H3 | 0x0003; | CONTROLS |
&H4 | 0x0004; | PRINTERS |
&H5 | 0x0005; | PERSONAL |
&H6 | 0x0006; | FAVORITES |
&H7 | 0x0007; | STARTUP |
&H8 | 0x0008; | RECENT |
&H9 | 0x0009; | SENDTO |
&Ha | 0x000a; | BITBUCKET |
&Hb | 0x000b; | STARTMENU |
&Hd | 0x000d; | MYMUSIC |
&He | 0x000e; | MYVIDEO |
&H10 | 0x0010; | DESKTOPDIRECTORY |
&H11 | 0x0011; | DRIVES |
&H12 | 0x0012; | NETWORK |
&H13 | 0x0013; | NETHOOD |
&H14 | 0x0014; | FONTS |
&H15 | 0x0015; | TEMPLATES |
&H16 | 0x0016; | COMMON STARTMENU |
&H17 | 0x0017; | COMMON PROGRAMS |
&H18 | 0x0018; | COMMON STARTUP |
&H19 | 0x0019; | COMMON DESKTOPDIRECTORY |
&H1a | 0x001a; | APPDATA |
&H1b | 0x001b; | PRINTHOOD |
&H1c | 0x001c; | LOCAL APPDATA |
&H1d | 0x001d; | ALTSTARTUP |
&H1e | 0x001e; | COMMON ALTSTARTUP |
&H1f | 0x001f; | COMMON FAVORITES |
&H20 | 0x0020; | INTERNET CACHE |
&H21 | 0x0021; | COOKIES |
&H22 | 0x0022; | HISTORY |
&H23 | 0x0023; | COMMON APPDATA |
&H24 | 0x0024; | WINDOWS |
&H25 | 0x0025; | SYSTEM |
&H26 | 0x0026; | PROGRAM FILES |
&H27 | 0x0027; | MYPICTURES |
&H28 | 0x0028; | PROFILE |
&H29 | 0x0029; | SYSTEMX86 |
&H2a | 0x002a; | PROGRAM FILESX86 |
&H2b | 0x002b; | PROGRAM FILES COMMON |
&H2c | 0x002c; | PROGRAM FILES |
&H2d | 0x002d; | COMMON TEMPLATES |
&H2e | 0x002e; | COMMON DOCUMENTS |
&H2f | 0x002f; | COMMON ADMINTOOLS |
&H30 | 0x0030; | ADMINTOOLS |
&H31 | 0x0031; | CONNECTIONS |
&H35 | 0x0035; | COMMON MUSIC |
&H36 | 0x0036; | COMMON PICTURES |
&H37 | 0x0037; | COMMON VIDEO |
&H38 | 0x0038; | RESOURCES |
&H39 | 0x0039; | RESOURCES LOCALIZED |
&H3a | 0x003a; | COMMON OEM LINKS |
&H3b | 0x003b; | CDBURN AREA |
&H3d | 0x003d; | COMPUTERSNEARME |
&H8000 | 0x8000; | FLAG CREATE |
&H4000 | 0x4000; | FLAG DONT VERIFY |
&H2000 | 0x2000; | FLAG DONT UNEXPAND |
&H1000 | 0x1000; | FLAG NO ALIAS |
&H0800 | 0x0800; | CSIDL FLAG PER USER INIT |
마지막 네번째 인수는 해당 Path를 조회할때 실제 Path가 존재하지 않으면 생성할지를 지정하는 부분입니다. 생성하고자 하면 True를 아니면 False로 값을 정합니다.
위 인수를 토대로 해당 Windows의 즐겨찾기가 저장된 Folder를 찾으려면 다음과 같이 할 수 있습니다.
Dim path As New StringBuilder(260)
SHGetSpecialFolderPath(IntPtr.Zero, path, &H6, False)
MessageBox.Show(path.ToString())
- VB.NET 호출
StringBuilder path = new StringBuilder(260);
SHGetSpecialFolderPath(IntPtr.Zero, path, 0x6, false);
MessageBox.Show(path.ToString());
- C# 호출
728x90
'.NET > Windows API for .NET' 카테고리의 다른 글
SetVolumeLabel - Volume의 이름설정 (0) | 2019.08.05 |
---|---|
DestoryWindow - Window화면 닫기 (0) | 2019.08.05 |
GetClassName - Window의 Class이름 구하기 (0) | 2019.08.05 |
GlobalMemoryStatus - 현재 Memory상태 구하기 (0) | 2019.08.05 |
GetSystemTime - 현재 System의 날짜및 시간구하기 (0) | 2019.08.05 |