Q&A

  • win2000 workgroup알아내기
윈도우2000에 설정된 내컴의 윈도우즈 워크그룹을 알고 싶슴다.

2000 / 98 모두

1  COMMENTS
  • Profile
    최용일 2001.12.29 00:25
    안녕하세요. 최용일입니다.



    델파이 팁모아에 강민주님의 팁이 있네요...



    http://www.delphi.co.kr/cgi-bin/cwb/CrazyWWWBoard.cgi?mode=read&num=1113&db=tips&fval=네트워크&backdepth=1



    그중에서



    if Buffer[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then

    List.Add(Buffer[i].lpRemoteName);



    ===>

    if Buffer[i].dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN then

    List.Add(Buffer[i].lpRemoteName);



    위 한줄만 고치면 되는데 아마도 NT/2000계열에서만 될겁니다...



    아래와 같이 하시면 95/98/ME/2000/NT에서도 될겁니다....



    procedure StrRetToString(Pidl: PItemIDList; StrRet: TStrRet; var StrBuf: PChar);

    begin

    case StrRet.uType of

    STRRET_WSTR: WideCharToMultiByte(CP_ACP, 0, StrRet.pOleStr, -1, StrBuf, Max_Path, nil, nil);

    STRRET_OFFSET: LStrCpy(StrBuf, PChar(Integer(Pidl) + StrRet.uOffset));

    STRRET_CSTR: LStrCpy(StrBuf, StrRet.cStr);

    end;

    end;



    function SearchPidl(ShellFolder: IShellFolder; EnumIDList: IEnumIDList;

    FolderName: string): PItemIDList;

    const

    EnumFlags = SHCONTF_FOLDERS + SHCONTF_NONFOLDERS + SHCONTF_INCLUDEHIDDEN;

    var

    ErrorCode: Integer;

    Fetched: LongWord;

    Item: PItemIDList;

    ItemStr: PChar;

    ItemStrRet: TStrRet;

    begin

    Result := nil;

    Fetched := 1;

    GetMem(ItemStr, 255);

    try



    ErrorCode := EnumIDList.Next(Fetched, Item, Fetched);

    while ErrorCode = NOERROR do

    begin

    ShellFolder.GetDisplayNameOf(Item, EnumFlags, ItemStrRet);

    StrRetToString(Item, ItemStrRet, ItemStr);

    if CompareText(ItemStr, FolderName) = 0 then

    begin

    Result := Item;

    Break;

    end;

    ErrorCode := EnumIDList.Next(Fetched, Item, Fetched);

    end;



    finally

    FreeMem(ItemStr, 255);

    end;

    end;



    procedure GetWorkGroup(ItemList: TStrings);

    const

    EnumFlags = SHCONTF_FOLDERS + SHCONTF_NONFOLDERS + SHCONTF_INCLUDEHIDDEN;

    var

    EnumIDList: IEnumIDList;

    ErrorCode: Integer;

    Fetched: LongWord;

    FolderItem: PItemIDList;

    Item: PItemIDList;

    ItemStrRet: TStrRet;

    ItemStr: PChar;

    DeskTopFolder: IShellFolder; // 바탕화면 폴더

    NetWorkConfigFolder: IShellFolder; // 네트워크환경 폴더

    AllNetWorkFolder: IShellFolder; // 전체 네트워크 폴더

    WorkGroupFolder: IShellFolder; // Work Group

    begin

    SHGetDesktopFolder(DeskTopFolder);

    SHGetSpecialFolderLocation(0, CSIDL_NETWORK, FolderItem);



    DeskTopFolder.BindToObject(FolderItem, nil, IID_IShellFolder, NetWorkConfigFolder);

    NetWorkConfigFolder.EnumObjects(0, EnumFlags, EnumIDList);

    FolderItem := SearchPidl(NetWorkConfigFolder, EnumIDList, '전체 네트워크');

    // if FolderItem = nil then show error...



    NetWorkConfigFolder.BindToObject(FolderItem, nil, IID_IShellFolder, AllNetWorkFolder);

    AllNetWorkFolder.EnumObjects(0, EnumFlags, EnumIDList);

    FolderItem := SearchPidl(AllNetWorkFolder, EnumIDList, 'Microsoft Windows 네트워크');



    // if FolderItem = nil then show error...

    if FolderItem <> nil then

    begin

    AllNetWorkFolder.BindToObject(FolderItem, nil, IID_IShellFolder, WorkGroupFolder);

    end

    else

    WorkGroupFolder := AllNetWorkFolder;



    // Display...

    Fetched := 1;

    WorkGroupFolder.EnumObjects(0, EnumFlags, EnumIDList);

    GetMem(ItemStr, 255);

    try

    ErrorCode := EnumIDList.Next(Fetched, Item, Fetched);

    while ErrorCode = NOERROR do

    begin

    WorkGroupFolder.GetDisplayNameOf(Item, EnumFlags, ItemStrRet);

    StrRetToString(Item, ItemStrRet, ItemStr);

    ItemList.Add(ItemStr);

    ErrorCode := EnumIDList.Next(Fetched, Item, Fetched);

    end;

    finally

    FreeMem(ItemStr, 255);

    end;

    end;



    // Button1's OnClick Event...

    procedure TForm1.Button1Click(Sender: TObject);

    begin

    GetWorkGroup(ListBox1.Items);

    end;



    ^^ 항상 즐코하세요...



    궁금이 wrote:

    > 윈도우2000에 설정된 내컴의 윈도우즈 워크그룹을 알고 싶슴다.

    > 2000 / 98 모두