C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[18456] Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시
이기주 [] 1885 읽음    2002-05-14 10:50
답변 감사합니다.

답변해주신 내용으로 폴더의 패스를 알아낼 수 있는건가요?

예를 들면 내가 C:\Temp폴더를 공유해놓았다면,

스트링에 "C:\Temp"라는 풀패스를 알아올 수 있느냐 하는 겁니다.

아니면 내 HDD 폴더 "C:\Temp" 가 현재 공유중인지 아닌지 알 수 있는 지요.




유영인 [Chris] 님이 쓰신 글 :
: Share 아이콘도 똑같은 방법으로 얻어오실 수 있습니다. 이미지 리스트의 0 번 아이템이 Share 아이콘 입니다.
:
: Share 된 디렉토리를 알아내는 방법은, 두가지 방법이 있습니다. 하나는 커맨드 명령, 다른 한가지는 API를 이용하는 방법입니다.
:
:
: 1. 커맨드 명령
: 도스에서 "Net Share" 를 치면, 등록된, 네트워크를 보여줍니다. WinExec("Net Share > LIST.TXT", SW_HIDE); 이렇게 실행시키신 다음, LIST.TXT가 생기면 그 텍스트 파일을 분석하여 처리하시면 됩니다.
:
:
: 2. API를 이용
:
: 아래는 API를 이용하여 공유된 디렉토리를 뽑아오는 예제입니다,
:
: Basically, you can use the WNetEnumResource() function in conjonction
: with WNetOpenEnum() and WNetCloseEnum(). The following example is an
: adaptation of code I found at the MSDN site:
:
:   bool TForm1::EnumerateFunc(LPNETRESOURCE lpnr)
:   {
:      DWORD dwResult, dwResultEnum;
:      HANDLE hEnum;
:      DWORD cbBuffer = 16384; // 16K is a good size
:      DWORD cEntries = -1; // enumerate all possible entries
:      LPNETRESOURCE lpnrLocal; // pointer to enumerated structures
:      DWORD I;
:
:      dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network
:                                                  // resources
:                              RESOURCETYPE_ANY, // all resources
:                              0, // enumerate all resources
:                              lpnr, // NULL first time the
:                                        // function is called
:                              &hEnum); // handle to the resource
:
:      if (dwResult != NO_ERROR)
:      {
:         Memo1->Lines->Add(" > Error in WNetOpenEnum");
:         return FALSE;
:      }
:      lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
:
:      do
:      {
:         ZeroMemory(lpnrLocal, cbBuffer);
:         dwResultEnum = WNetEnumResource(hEnum, // resource handle
:                                         &cEntries, // defined as -1
:                                         lpnrLocal, // LPNETRESOURCE
:                                         &cbBuffer); // buffer size
:         if (dwResultEnum == NO_ERROR)
:         {
:            for(I = 0; I < cEntries; I++)
:            {
:               Memo1->Lines->Add(Format("%s (Provider: %s)", ARRAYOFCONST
:               ((lpnrLocal[I].lpRemoteName, lpnrLocal[I].lpProvider))));
:
:               if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[I].dwUsage
:                                          & RESOURCEUSAGE_CONTAINER))
:                  EnumerateFunc(&lpnrLocal[I]);
:            }
:         }
:         else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
:         {
:            Memo1->Lines->Add(" > Error in WNetEnumResource");
:            break;
:         }
:      }
:      while(dwResultEnum != ERROR_NO_MORE_ITEMS);
:
:      GlobalFree((HGLOBAL)lpnrLocal);
:      dwResult = WNetCloseEnum(hEnum);
:
:      if(dwResult != NO_ERROR)
:      {
:         Memo1->Lines->Add(" > Error in WNetCloseEnum");
:         return FALSE;
:      }
:
:      return TRUE;
:   }
:
: And then to call this function:
:
:   void __fastcall TForm1::Button1Click(TObject *Sender)
:   {
:       EnumerateFunc(NULL);
:   }
:
: Note that this code lists resources on the entire network. To limit
: your search to the local computer:
:
:   void __fastcall TForm1::Button1Click(TObject *Sender)
:   {
:      NETRESOURCE nr;
:      ZeroMemory(&nr, sizeof(nr));
:
:      String RemoteName;
:      ULONG Length = MAX_COMPUTERNAME_LENGTH;
:      RemoteName.SetLength(Length + 1);
:      GetComputerNameEx(ComputerNameNetBIOS, RemoteName.
:         c_str(), &Length);
:      RemoteName.SetLength(Length);
:      RemoteName = "\\\\" + RemoteName;
:
:      nr.lpRemoteName = RemoteName.c_str();
:      nr.dwUsage = RESOURCEUSAGE_CONTAINER;
:      nr.dwDisplayType = RESOURCEDISPLAYTYPE_SERVER;
:      nr.dwType = RESOURCETYPE_DISK;
:      nr.dwScope = RESOURCE_GLOBALNET;
:      EnumerateFunc(&nr);
:   }
:
: Finally, you can modify the WNetOpenEnum() parameters to list only a
: specific type of resources.
:
: --
: Yoto Yotov
:
:
:
: 이기주 님이 쓰신 글 :
: : ListView나 TreeView에서
: :
: : 공유폴더의 손모양Icon을 Overlay Icon으로 표시하려고 합니다.
: :
: : 바로가기 아이콘은 SHGetFileInfo에서 SHGFI_LINKOVERLAY flag를 설정해주면 얻어올 수 있습니다.
: :
: : 하지만 손모양의 공유폴더 아이콘은 어떻게 얻어오는지 모르겠군요..
: :
: : 그리고 해당 폴더가 공유중인지 아닌지 알아내야 내는 방법도 알고 싶습니다.
: :

+ -

관련 글 리스트
18420 [질문] 공유폴더의 손모양 Overlay Icon 표시 이기주 2060 2002/05/13
18448     Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 유영인 [Chris] 1743 2002/05/14
18456         Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 이기주 1885 2002/05/14
18457             Re:Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 유영인 [Chris] 1418 2002/05/14
18458                 Re:Re:Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 이기주 1291 2002/05/14
18465                     Re:Re:Re:Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 유영인 [Chris] 1191 2002/05/14
18524                         Re:Re:Re:Re:Re:Re:[질문] 공유폴더의 손모양 Overlay Icon 표시 이기주 1773 2002/05/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.