¡¡¡¡ÒÔÒ»¸ö£Í£É£Ä£Á£ÓÈý²ãÊý¾Ý¿âÓ¦ÓóÌÐòΪÀý×Ó£¬ÎÒÃÇ¿ÉÒÔÓãģţ̣УȣÉÖÆ×÷Ò»¸ö¿Í»§¶ËÓ¦ÓóÌÐòºÍÒ»¸öÖмä²ãÒµÎñ´¦Àí³ÌÐò£¬ÓÉÖмä²ãÒµÎñ´¦Àí³ÌÐòÏòÊý¾Ý¿â´æÈ¡Êý¾Ý£¬ÔÙ½«½á¹û·´À¡µ½¿Í»§¶Ë¡£µ±¿Í»§¶ËÓ¦ÓóÌÐòÓëÖмä²ã³ÌÐòºÍÊý¾Ý¿â·þÎñ³ÌÐò²»ÔÚһ̨»úÆ÷ÉÏʱ£¬ÐèÒªÖ¸¶¨Öмä²ã³ÌÐòºÍÊý¾Ý¿â·þÎñ³ÌÐòËùÔڵķþÎñÆ÷µÄÃû³Æ¡£
¡¡¡¡Ôڣģţ̣УȣɳÌÐòÖУ¬ÎÒÃÇ¿ÉÒÔͨ¹ý£×£É£Î¡¡£Á£Ð£ÉÀ´ÁоپÖÓòÍøÂçÖеķþÎñÆ÷Ãû³Æ¡¢Óû§¼ÆËã»úÃû³Æ¡¢Óû§¹²ÏíĿ¼ºÍÎļþ¡¢¹²Ïí´òÓ¡»úµÈ×ÊÔ´£¬ÕâЩ£Á£Ð£ÉÓÉÎļþ£Í£Ð£Ò£®£Ä£Ì£ÌÌṩ¡£
¡¡¡¡ÏÂÃæÒԣףɣΣ¹£ØµÄ¶ÔµÈÍøÂçΪÀý×Ó£¬Áо١°ÍøÂçÁÚ¾Ó¡±ÖеŤ×÷×éÃû³Æ¡¢Óû§¼ÆËã»úÃû³Æ¡¢¹²ÏíĿ¼ºÍÎļþ¡¢¹²Ïí´òÓ¡»úµÈ×ÊÔ´¡£
¡¡¡¡Ò»¡¢Áо١°ÍøÂçÁÚ¾Ó¡±ÖеŤ×÷×éÃû³Æ
¡¡¡¡ÔÚ¡°ÍøÂçÁÚ¾Ó¡±ÖУ¬´ò¿ª¡°Õû¸öÍøÂ硱£¬¿ÉÒÔ¿´µ½ÍøÂçÖеÄËùÓй¤×÷×éµÄÃû³Æ¡£Ôڣģţ̣УȣɳÌÐòÖУ¬¿ÉÒÔÓãÁ£Ð£Éº¯ÊýWNetOpenEnumºÍWNetEnumResourceÀ´Áо١°ÍøÂçÁÚ¾Ó¡±ÖеŤ×÷×éÃû³Æ¡£
¡¡¡¡ÏÂÃæÊÇÁ½¸ö£Á£Ð£Éº¯ÊýµÄ¼ò½é£¬¾ßÌåÇë²Î¼û£Ä£Å£Ì£Ð£È£É°ïÖúÎļþ¡£
¡¡¡¡//WNetOpenEnumÓÃÓÚ»ñȡһ¸öÍøÂç×ÊÔ´¾ä±ú£¬×÷ΪWNetEnumResourceÁоÙÍøÂç×ÊÔ´µÄÒÀ¾Ý£¬Æäº¯ÊýÔÐÍÈçÏ£º
¡¡¡¡function WNetOpenEnum(
¡¡¡¡dwScope,//ÍøÂ緶Χ,RESOURCE_CONNECTED(ÒÑÁ¬½Ó»úÆ÷),RESOURCE_GLOBALNET(ËùÓлúÆ÷),
¡¡¡¡RESOURCE_REMEMBERED(ÒѼÇÒäµÄ»úÆ÷)
¡¡¡¡dwType,//×ÊÔ´ÀàÐÍ,RESOURCETYPE_ANY(ËùÓÐ×ÊÔ´),RESOURCETYPE_DISK(Îļþ×ÊÔ´),
¡¡¡¡RESOURCETYPE_PRINT(´òÓ¡×ÊÔ´)
¡¡¡¡dwUsage//×ÊÔ´ÓÃ;,0(ËùÓÐ×ÊÔ´),RESOURCEUSAGE_CONNECTABLE(ËùÓпÉÁ¬½Ó×ÊÔ´),
¡¡¡¡RESOURCEUSAGE_CONTAINER(ËùÓÐcontainer×ÊÔ´)½öÔÚdwScopeΪRESOURCE_GLOBALNETÊÇÓÐЧ: DWORD;
¡¡¡¡lpNetResource: PNetResource;//NetResourceÀàÐÍÖ¸Õ룬ÆäÄÚ´æ±íÊ¾ÍøÂç×ÊÔ´µÄ²ã´Î,ΪNILʱ
¡¡¡¡±íʾ×îÉϲ㣬½öÔÚdwScopeΪRESOURCE_GLOBALNETʱÓÐЧ,ÆäËüÇé¿öʱӦΪNIL
¡¡¡¡var lphEnum: THandle//·µ»ØÍøÂç×ÊÔ´¾ä±ú£¬ÊÇWNetEnumResource½øÒ»²½ÁоÙÍø ÊÔ´µÄÒÀ¾Ý
¡¡¡¡): DWORD; stdcall;·µ»ØÖµNO_ERROR±íʾִÐгɹ¦£¬·ñÔòÓ¦ÓÃGetLastError»ñÈ¡´íÎóÐÅÏ¢
¡¡¡¡//WNetEnumResourceÓÃÓÚÁгöµ±Ç°ÍøÂçÖпÉÓõÄ×ÊÔ´£¬°üÀ¨Îļþ×ÊÔ´ºÍ´òÓ¡×ÊÔ´£¬Æäº¯ÊýÔÐÍÈçÏ£º
¡¡¡¡function WNetEnumResource(hEnum: THandle;//WNetEnumResource½øÒ»²½ÁоÙÍøÂç×ÊÔ´µÄÒÀ¾Ý,ͨ³£ÓÉWNetOpenEnumÈ¡µÃvar lpcCount: DWORD;//ҪȡµÃ×ÊÔ´µÄÊýÄ¿£¬$FFFFFFFF±íʾÁгöËùÓÐ×ÊÔ´£¬·µ»ØÖµÎªÊµ¼Ê×ÊÔ´ÊýÄ¿lpBuffer: Pointer;//½ÓÊÕ½á¹ûµÄ»º³åÇøµÄÖ¸Õ룬һ°ãÊÇNetResourceÀàÐ͵ÄÊý×évar lpBufferSize: DWORD//½ÓÊÕ½á¹ûµÄ»º³åÇø´óС(Byte)): DWORD; stdcall;·µ»ØÖµÎªNO_ERROR(Ö´Ðгɹ¦)»òERROR_NO_MORE_ITEMS(×ÊÔ´ÁоÙÍê±Ï)£¬·ñÔòÓ¦ÓÃGetLastError»ñÈ¡´íÎóÐÅÏ¢¡£
¡¡¡¡
¡¡¡¡ÒªÁоÙÍøÂçÖеŤ×÷×éÐÅÏ¢£¬Ê×ÏÈÒª»ñÈ¡ÍøÂçÖеÄÍøÂçÀàÐÍ£¬ÔÙ»ñȡÿһÖÖÀàÐÍÍøÂçÖаüº¬µÄ¹¤×÷×éµÄÃû³Æ¡£
¡¡¡¡£±¡¢»ñÈ¡ÍøÂçÀàÐÍÐÅÏ¢
¡¡¡¡¾ÖÓòÍøÖпÉÒÔÊÇÓɶàÖÖÀàÐ͵ÄÍøÂç×é³É£¬ÈçÓÉMicrosoft¡¢NovellµÈÀàÐ͵ÄÍøÂç×é³É¡£ÓãÁ£Ð£É
¡¡¡¡º¯ÊýWNetOpenEnumºÍWNetEnumResource¿ÉÒÔ»ñÈ¡ÍøÂçÀàÐÍÐÅÏ¢¡£
¡¡¡¡£¨£±£©ÓÃWNetOpenEnumº¯Êý·µ»ØÒ»¸ö¾ä±ú£¬×÷ΪWNetEnumResourceÁоÙÍøÂç×ÊÔ´µÄÒÀ¾Ý¡£ÎÒÃǵÄÄ¿
¡¡¡¡±êÊÇÁо١°Õû¸öÍøÂ硱µÄ¹¤×÷×éÃû³Æ£¬Òò¶øÍøÂ緶ΧΪRESOURCE_GLOBALNET(ËùÓлúÆ÷)¡¢×ÊÔ´Àà
¡¡¡¡ÐÍΪRESOURCETYPE_DISK(Îļþ×ÊÔ´)¡¢×ÊÔ´ÓÃ;ΪRESOURCEUSAGE_CONTAINER(ËùÓÐcontainer×ÊÔ´)¡¢
¡¡¡¡ÍøÂç²ã´ÎΪ×î¸ß²ã(NIL)£¬ÕâÑù¿ÉÒԵõ½Ò»¸ö¾ä±ú£¬ÒÔ±ã½øÒ»²½ÁоÙÍøÂç×ÊÔ´¡£¾ßÌåµÄ³ÌÐò¶ÎÈçÏ£º
¡¡¡¡{ Res : DWORD; lphEnum : THandle; }
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;//Ö´ÐÐʧ°Ü
¡¡¡¡£¨£²£©ÓãÁ£Ð£Éº¯ÊýWNetEnumResource¿ÉÒÔ»ñÈ¡ÍøÂçÀàÐÍÐÅÏ¢£¬´ËʱҪÓõ½ÉÏÃæ»ñÈ¡µÄ¾ä±úlphEnum£¬
¡¡¡¡¿ÉÒÔ»ñȡһ¸öNetResourceÀàÐ͵ÄÊý×飬ÿ¸öNetResourceÔªËØ¼´ÎªÒ»ÖÖÍøÂçÀàÐÍÐÅÏ¢¡£
¡¡¡¡¾ßÌåµÄÇë²Î¼ûÒÔϳÌÐò¶Î¼°×¢ÊÍÐÅÏ¢¡£
¡¡¡¡type
¡¡¡¡TNetResourceArray
= ^TNetResource;//ÍøÂçÀàÐ͵ÄÊý×é
Var
¡¡¡¡NetResource : TNetResource;
¡¡¡¡Buf : Pointer;
¡¡¡¡Count,BufSize,Res : DWORD;
¡¡¡¡lphEnum : THandle;
¡¡¡¡p : TNetResourceArray;
¡¡¡¡i,j : SmallInt;
¡¡¡¡NetworkTypeList : TList;begin
¡¡¡¡......
¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);//»ñÈ¡ÍøÂçÀàÐÍÐÅÏ¢
¡¡¡¡If ( Res = ERROR_NO_MORE_ITEMS )//×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡¡¡or (Res $#@60;$#@62; NO_ERROR )//Ö´ÐÐʧ°Ü
¡¡¡¡Then Exit;
¡¡¡¡¡¡P := TNetResourceArray(Buf);
¡¡¡¡¡¡For I := 0 To Count - 1 Do//¼Ç¼¸÷¸öÍøÂçÀàÐ͵ÄÐÅÏ¢
¡¡¡¡Begin
¡¡¡¡¡¡NetworkTypeList.Add(p);
¡¡¡¡¡¡Inc(P);
¡¡¡¡End;
¡¡¡¡......end;
¡¡¡¡£²¡¢»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡ÔÚ»ñÈ¡ÍøÂçÀàÐÍÐÅÏ¢ºó£¬¿ÉÒÔ¸ù¾Ý´ËÐÅÏ¢»ñÈ¡´ËÀàÐÍÍøÂçÖеķþÎñÆ÷£¨¹¤×÷×飩ÐÅÏ¢¡£
¡¡¡¡ÔÚWNetOpenEnumº¯ÊýÖУ¬½«²ÎÊýlpNetResourceÖ¸¶¨ÎªÒ»ÖÖÍøÂçÀàÐÍÐÅÏ¢£¬¿ÉÒÔ»ñȡһ¸ö¾ä±ú£¬ÔÚWNetEnumResourceÖÐÀûÓÃÕâ¸ö¾ä±ú£¬¿ÉÒÔ»ñȡһ¸öNetResourceÀàÐ͵ÄÊý×飬ÿ¸öNetResourceÔªËØµÄlpRemoteName²¿·Ö¼´ÎªÒ»¸ö¹¤×÷×éÃû³Æ£¨Èç¡°MyWorkGroup¡±£©¡£
¡¡¡¡¾ßÌåµÄÇë²Î¼ûÒÔϳÌÐò¶Î¼°×¢ÊÍÐÅÏ¢¡£
¡¡¡¡//ÁгöÒ»¸öÍøÂçÀàÐÍÖеÄËùÓй¤×÷×éÃû³Æ
¡¡¡¡NetResource := TNetResource(NetworkTypeList.Items[J]^);//ÍøÂçÀàÐÍÐÅÏ¢//»ñȡij¸öÍøÂçÀàÐ͵ÄÎļþ×ÊÔ´µÄ¾ä±ú£¬NetResourceÎªÍøÂçÀàÐÍÐÅÏ¢£¬lphEnumΪ·µ»Ø¾ä±ú
¡¡¡¡Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then break;//Ö´ÐÐʧ°Ü
¡¡¡¡While true Do//ÁоÙÒ»¸öÍøÂçÀàÐ͵ÄËùÓй¤×÷×éµÄÐÅÏ¢
¡¡¡¡Begin
¡¡¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡¡¡//»ñȡһ¸öÍøÂçÀàÐ͵ÄÎļþ×ÊÔ´ÐÅÏ¢£¬
¡¡¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
¡¡¡¡If ( Res = ERROR_NO_MORE_ITEMS ) //×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡or (Res $#@60;$#@62; NO_ERROR) //Ö´ÐÐʧ°Ü
¡¡¡¡then break;
¡¡¡¡¡¡P := TNetResourceArray(Buf);
¡¡¡¡¡¡For I := 0 To Count - 1 Do//Áоٸ÷¸ö¹¤×÷×éµÄÐÅÏ¢
¡¡¡¡Begin
¡¡¡¡¡¡List.Add( StrPAS( P^.lpRemoteName ));//È¡µÃÒ»¸ö¹¤×÷×éµÄÃû³Æ
¡¡¡¡¡¡Inc(P);
¡¡¡¡End;
¡¡¡¡End;
¡¡¡¡£³¡¢»ñÈ¡¹¤×÷×éÐÅÏ¢µÄÍêȫԴ´úÂë//ÁоٳöÕû¸öÍøÂçÖеŤ×÷×éÃû³Æ£¬·µ»ØÖµÎªTRUE±íʾִÐгɹ¦£¬¡¡
//²ÎÊýListÖзµ»Ø·þÎñÆ÷£¨¹¤×÷×飩µÄÃû³Æ
Function GetServerList( var List : TStringList ) : Boolean;
Var
¡¡¡¡NetResource : TNetResource;
¡¡¡¡Buf : Pointer;
¡¡¡¡Count,BufSize,Res : DWORD;
¡¡¡¡lphEnum : THandle;
¡¡¡¡p : TNetResourceArray;
¡¡¡¡i,j : SmallInt;
¡¡¡¡NetworkTypeList : TList;
Begin
¡¡¡¡Result := False;
¡¡¡¡NetworkTypeList := TList.Create;
¡¡¡¡List.Clear;//»ñÈ¡Õû¸öÍøÂçÖеÄÎļþ×ÊÔ´µÄ¾ä±ú£¬lphEnumΪ·µ»ØÃû±ú
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;//Raise Exception(Res);//Ö´ÐÐʧ°Ü//»ñÈ¡Õû¸öÍøÂçÖеÄÍøÂçÀàÐÍÐÅÏ¢
¡¡¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
¡¡¡¡If ( Res = ERROR_NO_MORE_ITEMS )//×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡or (Res $#@60;$#@62; NO_ERROR )//Ö´ÐÐʧ°Ü
¡¡¡¡Then Exit;
¡¡¡¡¡¡P := TNetResourceArray(Buf);
¡¡¡¡For I := 0 To Count - 1 Do//¼Ç¼¸÷¸öÍøÂçÀàÐ͵ÄÐÅÏ¢
¡¡¡¡¡¡Begin
¡¡¡¡¡¡¡¡NetworkTypeList.Add(p);
¡¡¡¡¡¡¡¡Inc(P);
¡¡¡¡¡¡End;
¡¡¡¡//WNetCloseEnum¹Ø±ÕÒ»¸öÁоپä±ú
¡¡¡¡Res := WNetCloseEnum(lphEnum);//¹Ø±ÕÒ»´ÎÁоÙ
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;
¡¡¡¡¡¡For J := 0 To NetworkTypeList.Count-1 Do //Áгö¸÷¸öÍøÂçÀàÐÍÖеÄËùÓй¤×÷×éÃû³Æ
¡¡¡¡¡¡Begin//ÁгöÒ»¸öÍøÂçÀàÐÍÖеÄËùÓй¤×÷×éÃû³Æ
¡¡¡¡¡¡¡¡NetResource := TNetResource(NetworkTypeList.Items[J]^);//ÍøÂçÀàÐÍÐÅÏ¢//»ñȡij¸öÍøÂçÀàÐ͵ÄÎļþ×ÊÔ´µÄ¾ä±ú£¬NetResourceÎªÍøÂçÀàÐÍÐÅÏ¢£¬lphEnumΪ·µ»ØÃû±ú
¡¡¡¡¡¡¡¡Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡¡¡¡¡RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
¡¡¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then break;//Ö´ÐÐʧ°Ü
¡¡¡¡While true Do//ÁоÙÒ»¸öÍøÂçÀàÐ͵ÄËùÓй¤×÷×éµÄÐÅÏ¢
¡¡¡¡Begin
¡¡¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡¡¡//»ñȡһ¸öÍøÂçÀàÐ͵ÄÎļþ×ÊÔ´ÐÅÏ¢£¬
¡¡¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
¡¡¡¡If ( Res = ERROR_NO_MORE_ITEMS ) //×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡or (Res $#@60;$#@62; NO_ERROR) //Ö´ÐÐʧ°Ü
¡¡¡¡then break;
¡¡¡¡¡¡P := TNetResourceArray(Buf);
¡¡¡¡For I := 0 To Count - 1 Do//Áоٸ÷¸ö¹¤×÷×éµÄÐÅÏ¢
¡¡¡¡¡¡Begin
¡¡¡¡¡¡¡¡List.Add( StrPAS( P^.lpRemoteName ));//È¡µÃÒ»¸ö¹¤×÷×éµÄÃû³Æ
¡¡¡¡¡¡¡¡Inc(P);
¡¡¡¡¡¡End;
¡¡¡¡End;
¡¡¡¡¡¡Res := WNetCloseEnum(lphEnum);//¹Ø±ÕÒ»´ÎÁоÙ
¡¡¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then break;//Ö´ÐÐʧ°Ü
¡¡¡¡End;
¡¡¡¡¡¡Result := True;
¡¡¡¡¡¡FreeMem(Buf);
¡¡¡¡¡¡NetworkTypeList.Destroy;
End;
¡¡¡¡¶þ¡¢ÁоÙÒ»¸ö¹¤×÷×éÖеļÆËã»úÃû³Æ
¡¡¡¡ÔÚWNetOpenEnumº¯ÊýÖУ¬½«²ÎÊýlpNetResourceÖеÄlpRemoteName²¿·ÖÖ¸¶¨ÎªÒ»¸ö¹¤×÷×éµÄÃû³Æ£¨Èç¡°MyWorkGroup¡±£©£¬¿ÉÒÔ»ñȡһ¸ö¾ä±ú£¬ÔÚWNetEnumResourceÖÐÀûÓÃÕâ¸ö¾ä±ú£¬¿ÉÒÔ»ñȡһ¸öNetResourceÀàÐ͵ÄÊý×飬ÿ¸öNetResourceÔªËØµÄlpRemoteName²¿·Ö¼´ÎªÒ»¸ö¼ÆËã»úÃû³Æ£¨Èç¡°\\wangfajun¡±£©¡£
¡¡¡¡¾ßÌåµÄÇë²Î¼ûÒÔϳÌÐò¶Î¼°×¢ÊÍÐÅÏ¢¡£
¡¡¡¡NetResource.lpRemoteName := @GroupName[1];//Ö¸¶¨¹¤×÷×éÃû³Æ
¡¡¡¡NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//ÏÔʾÀàÐÍΪ·þÎñÆ÷£¨¹¤×÷×飩
¡¡¡¡NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
¡¡¡¡NetResource.dwScope := RESOURCETYPE_DISK;//ÁоÙÎļþ×ÊÔ´ÐÅÏ¢
¡¡¡¡//»ñȡָ¶¨¹¤×÷×éµÄÍøÂç×ÊÔ´¾ä±ú
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
¡¡¡¡»ñÈ¡¼ÆËã»úÃû³ÆµÄÍêÈ«³ÌÐòÔ´´úÂëÈçÏ£º
¡¡¡¡//ÁоٳöÖ¸¶¨¹¤×÷×éGroupNameÖеļÆËã»úÃû³Æ£¬·µ»ØÖµÎªTRUE±íʾִÐгɹ¦£¬//²ÎÊýListÖзµ»Ø¼ÆËã»úÃû³ÆFunction GetUsers( GroupName : string; var List : TStringList ) : Boolean;Var
¡¡¡¡NetResource : TNetResource;
¡¡¡¡Buf : Pointer;
¡¡¡¡Count,BufSize,Res : DWord;
¡¡¡¡Ind : Integer;
¡¡¡¡lphEnum : THandle;
¡¡¡¡Temp : TNetResourceArray;
Begin
¡¡¡¡Result := False;
¡¡¡¡List.Clear;
¡¡¡¡FillChar(NetResource, SizeOf(NetResource), 0);//³õʼ»¯ÍøÂç²ã´ÎÐÅÏ¢
¡¡¡¡NetResource.lpRemoteName := @GroupName[1];//Ö¸¶¨¹¤×÷×éÃû³Æ
¡¡¡¡NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//ÀàÐÍΪ·þÎñÆ÷£¨¹¤×÷×飩
¡¡¡¡NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
¡¡¡¡NetResource.dwScope := RESOURCETYPE_DISK;//ÁоÙÎļþ×ÊÔ´ÐÅÏ¢
¡¡¡¡//»ñȡָ¶¨¹¤×÷×éµÄÍøÂç×ÊÔ´¾ä±ú
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
¡¡¡¡RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then Exit; //Ö´ÐÐʧ°Ü
¡¡¡¡While True Do//ÁоÙÖ¸¶¨¹¤×÷×éµÄÍøÂç×ÊÔ´
¡¡Begin
¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡//»ñÈ¡¼ÆËã»úÃû³Æ
¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
¡¡¡¡If Res = ERROR_NO_MORE_ITEMS Then break;//×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡If (Res $#@60;$#@62; NO_ERROR) then Exit;//Ö´ÐÐʧ°Ü
¡¡¡¡Temp := TNetResourceArray(Buf);
¡¡¡¡For Ind := 0 to Count - 1 do//Áоٹ¤×÷×éµÄ¼ÆËã»úÃû³Æ
¡¡Begin
¡¡¡¡//»ñÈ¡¹¤×÷×éµÄ¼ÆËã»úÃû³Æ£¬+2±íʾɾ³ý"\\"£¬Èç\\wangfajun=$#@62;wangfajun
¡¡¡¡List.Add(Temp^.lpRemoteName + 2);
¡¡¡¡Inc(Temp);
¡¡End;
¡¡End;
¡¡¡¡Res := WNetCloseEnum(lphEnum);//¹Ø±ÕÒ»´ÎÁоÙ
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;//Ö´ÐÐʧ°Ü
¡¡¡¡Result := True;
¡¡¡¡FreeMem(Buf);
End;
¡¡¡¡Èý¡¢ÁоÙÒ»¸ö¼ÆËã»úÖеĹ²Ïí×ÊÔ´
¡¡¡¡ÔÚWNetOpenEnumº¯ÊýÖУ¬½«²ÎÊýlpNetResourceÖеÄlpRemoteName²¿·ÖÖ¸¶¨ÎªÒ»¸ö¼ÆËã»úµÄÃû³Æ£¨Èç¡°\\wangfajun¡±£©£¬¿ÉÒÔ»ñȡһ¸ö¾ä±ú£¬ÔÚWNetEnumResourceÖÐÀûÓÃÕâ¸ö¾ä±ú£¬¿ÉÒÔ»ñȡһ¸öNetResourceÀàÐ͵ÄÊý×飬ÿ¸öNetResourceÔªËØµÄlpRemoteName²¿·Ö¼´Îª¼ÆËã»úÖеĹ²Ïí×ÊÔ´Ãû³Æ£¨¿ÉÒÔÊǹ²ÏíĿ¼ºÍÎļþÃû³Æ¡¢¹²Ïí´òÓ¡»úÃû³ÆµÈ£¬Èç¡°\\wangfajun\¹²ÏíÎļþ¡±£©¡£
¡¡¡¡¾ßÌåµÄÇë²Î¼ûÒÔϳÌÐò¶Î¼°×¢ÊÍÐÅÏ¢¡£
¡¡¡¡NetResource.lpRemoteName := @UserName[1];//Ö¸¶¨¼ÆËã»úÃû³Æ
¡¡¡¡//»ñȡָ¶¨¼ÆËã»úµÄÍøÂç×ÊÔ´¾ä±ú
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
¡¡¡¡RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
¡¡¡¡»ñÈ¡¼ÆËã»úÃû³ÆµÄÍêÈ«³ÌÐòÔ´´úÂëÈçÏ£º
¡¡¡¡//ÁоٳöÖ¸¶¨¼ÆËã»úUserNameÖеĹ²Ïí×ÊÔ´Ãû³Æ£¬·µ»ØÖµÎªTRUE±íʾִÐгɹ¦£¬//²ÎÊýListÖзµ»Ø¹²Ïí×ÊÔ´Ãû³ÆFunction GetUserResource( UserName : string ; var List : TStringList ) : Boolean;Var
¡¡¡¡NetResource : TNetResource;
¡¡¡¡Buf : Pointer;
¡¡¡¡Count,BufSize,Res : DWord;
¡¡¡¡Ind : Integer;
¡¡¡¡lphEnum : THandle;
¡¡¡¡Temp : TNetResourceArray;
Begin
¡¡¡¡Result := False;
¡¡¡¡List.Clear;
¡¡¡¡FillChar(NetResource, SizeOf(NetResource), 0);//³õʼ»¯ÍøÂç²ã´ÎÐÅÏ¢
¡¡¡¡NetResource.lpRemoteName := @UserName[1];//Ö¸¶¨¼ÆËã»úÃû³Æ
¡¡¡¡//»ñȡָ¶¨¼ÆËã»úµÄÍøÂç×ÊÔ´¾ä±ú
¡¡¡¡Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
¡¡¡¡RESOURCEUSAGE_CONNECTABLE, @NetResource,lphEnum);
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;//Ö´ÐÐʧ°Ü
¡¡¡¡While True Do//ÁоÙÖ¸¶¨¹¤×÷×éµÄÍøÂç×ÊÔ´
¡¡¡¡Begin
¡¡¡¡Count := $FFFFFFFF;//²»ÏÞ×ÊÔ´ÊýÄ¿
¡¡¡¡BufSize := 8192;//»º³åÇø´óСÉèÖÃΪ8K
¡¡¡¡GetMem(Buf, BufSize);//ÉêÇëÄڴ棬ÓÃÓÚ»ñÈ¡¹¤×÷×éÐÅÏ¢
¡¡¡¡//»ñȡָ¶¨¼ÆËã»úµÄÍøÂç×ÊÔ´Ãû³Æ
¡¡¡¡Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
¡¡¡¡If Res = ERROR_NO_MORE_ITEMS Then break;//×ÊÔ´ÁоÙÍê±Ï
¡¡¡¡If (Res $#@60;$#@62; NO_ERROR) then Exit;//Ö´ÐÐʧ°Ü
¡¡¡¡¡¡Temp := TNetResourceArray(Buf);
¡¡¡¡¡¡For Ind := 0 to Count - 1 do
¡¡¡¡Begin
¡¡¡¡¡¡//»ñȡָ¶¨¼ÆËã»úÖеĹ²Ïí×ÊÔ´Ãû³Æ£¬+2±íʾɾ³ý"\\"£¬
¡¡¡¡¡¡//Èç\\wangfajun=$#@62;wangfajun
¡¡¡¡¡¡List.Add(Temp^.lpRemoteName + 2);
¡¡¡¡¡¡Inc(Temp);
¡¡¡¡End;
¡¡¡¡End;
¡¡¡¡Res := WNetCloseEnum(lphEnum);//¹Ø±ÕÒ»´ÎÁоÙ
¡¡¡¡If Res $#@60;$#@62; NO_ERROR Then exit;//Ö´ÐÐʧ°Ü
¡¡¡¡Result := True;
¡¡¡¡FreeMem(Buf);
End;
¡¡¡¡ÒÔÉϳÌÐòÔÚPWIN98+DELPHI3.0ϵ÷ÊÔͨ¹ý¡£
¹Ø×¢´ËÎĵĶÁÕß»¹¿´¹ý£º