Microsoft MVP성태의 닷넷 이야기
오류 유형: 4.1. NET BCL 에서 제공되는 FolderBrowserDialog [링크 복사], [링크+제목 복사],
조회: 18375
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기


짐작할 수 있겠지만, System.Windows.Forms.FolderBrowserDialog 는 P/Invoke 를 통해서 Win32 에서 제공되는 SHBrowserForFolder 를 이용하고 있습니다.

Reflector 등을 통해서 보면, 아래와 같은 API 를 Import 하고 있습니다.

[SuppressUnmanagedCodeSecurity, ComVisible(false)]
internal class Shell32
{
      // Methods
      public Shell32();
      [DllImport("shell32.dll", CharSet=CharSet.Auto)]
      public static extern IntPtr SHBrowseForFolder([In] UnsafeNativeMethods.BROWSEINFO lpbi);
      [DllImport("shell32.dll")]
      public static extern int SHGetMalloc([Out, MarshalAs(UnmanagedType.LPArray)] UnsafeNativeMethods.IMalloc[] ppMalloc);
      [DllImport("shell32.dll", CharSet=CharSet.Auto)]
      public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath);
      [DllImport("shell32.dll")]
      public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl);
}

보시면 아시겠지만, SHParseDisplayName 함수가 빠져 있습니다. Windows 2000 에서는 안된다고 하는 문서 명시를 하기 보다는 아예 폴더 자체를 지정할 수 없도록 선택을 한 것입니다. 물론, FolderBrowserDialog 에는 다음과 같은 속성을 통해서 루트 경로를 지정할 수 있는 기능은 제공합니다.

public Environment.SpecialFolder RootFolder {get; set;}

여기서의 SpecialFolder 타입은 enum 입니다. 실제로 이 Enum 값은 Win32 에서 제공되는 함수에 제한을 받습니다. 위의 dllimport 목록에서 볼 수 있는 SHGetSpecialFolderLocation 함수인데, 구체적인 선언은 다음과 같습니다.

HRESULT SHGetSpecialFolderLocation( HWND hwndOwner,
    int nFolder,
    LPITEMIDLIST *ppidl
);

인자의 nFolder 값에 해당하는 Shell 개체에 대한 PIDL 값을 ppidl 로 반환해 주는 함수입니다. 다행히도 이 함수의 최소 지원 운영체제는 Windows NT 4.0 및 Windows 95 입니다.

결국, Windows 2000 에서의 문제를 피하기 위해 nFolder 에 허용하는 값을 제외한 직접적인 폴더 경로를 지정하는 것은 가능하지 않습니다.






[최초 등록일: ]
[최종 수정일: 6/2/2006]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2007-01-13 12시18분
[그러면] 결국 2000 에서는 구현이 안된다는 것인가요?
[guest]
2007-01-13 07시16분
SHParseDisplayName 함수가 Windows 2000에서 제공이 안될 뿐입니다. SHBrowserForFolder 함수 자체는 정상적으로 기능을 합니다.
kevin25

... 166  167  168  169  170  171  172  173  174  175  176  [177]  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
608정성태10/23/200822876오류 유형: 61. TFS 연결 오류: TF31003, TF30331 오류
607정성태10/18/200821027Windows: 32. 자동 실행 경로에 ".." 가 포함된 경우
606정성태10/18/200822987.NET Framework: 106. WCF - 다중 서비스 호스트파일 다운로드1
605정성태10/18/200826514.NET Framework: 105. WPF - 닫기 버튼을 없애려면.
604정성태10/18/200827008오류 유형: 60. System.Management.ManagementException - Generic failure [1]
602정성태10/15/200829060오류 유형: 59. WPF - XAML 로딩 시 Visual Studio 비정상 종료 [1]
600정성태10/9/200833777디버깅 기술: 18. TFS Team Build + Source Server = 소스 코드 디버깅 [3]
603정성태10/15/200825652    답변글 디버깅 기술: 18.1. 소스 서버 구성, 그 외의 이야기
599정성태10/5/200831286디버깅 기술: 17. TFS Team Build + Symbol Server [1]
598정성태10/3/200821419VS.NET IDE: 57. VS.NET 2008 - 다중 프로젝트에서 단일 SNK를 사용하는 방법
597정성태10/2/200820138Team Foundation Server: 25. VSTS 2008의 Build Explorer
596정성태10/2/200826877오류 유형: 58. WPF : 드롭다운 유형의 ComboBox가 펼쳐지지 않는 문제
595정성태10/1/200834530디버깅 기술: 16. Watson Bucket 정보를 이용한 CLR 응용 프로그램 예외 분석 [2]
594정성태9/22/200822418.NET Framework: 104. Win32Exception 클래스 소개
591정성태7/24/200819070오류 유형: 57. VS.NET 2008 TFC - 체크인 시에 비프 음과 함께 정지되는 현상
592정성태7/28/200819034    답변글 오류 유형: 57.1. VS.NET 2008 TFC - 체크인 시에 비프 음과 함께 정지되는 현상 [1]
590정성태7/20/200824954.NET Framework: 103. WPF - ControlTemplate을 코드에서 다뤄보기 [1]
589정성태6/17/200821572.NET Framework: 102. COM 개체의 이벤트를 구독하는 코드 제작 [1]
588정성태6/13/200823513VC++: 35. COM 이벤트에서 반환값을 가진 콜백 정의
587정성태6/10/200828201VS.NET IDE: 56. C#에서 아쉬운 __DATE__, __TIME__ 매크로 [2]
586정성태6/4/200825849오류 유형: 56. WPF 디자이너 - The string was not recognized as a valid DateTime [2]
585정성태6/4/200834013.NET Framework: 101. WPF - ActiveX 컨트롤 호스팅하는 방법 [2]
582정성태5/16/200825850오류 유형: 55. Windowless ActiveX controls are not supported
580정성태4/24/200824937VC++: 34. 64비트 윈도우즈에서의 이벤트 후킹
579정성태4/24/200824771VC++: 33. 변환 후의 RGS 파일 내용을 얻는 방법
577정성태4/16/200825750.NET Framework: 100. XML Serializer를 이용한 값 복사 [5]
... 166  167  168  169  170  171  172  173  174  175  176  [177]  178  179  180  ...