CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

怎样根据局域网中的计算机地址或计算机名得出它所在的工作组?

楼主iwzw()2003-07-04 11:59:39 在 VB / 基础类 提问

同上。 问题点数:100、回复次数:5Top

1 楼iwzw()回复于 2003-07-04 14:30:04 得分 0

upTop

2 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2003-07-04 14:47:41 得分 100

参考:  
  列出网络机器名及相关信息  
   
  Option   Explicit  
  Private   Const   RESOURCE_CONNECTED   As   Long   =   &H1&  
  Private   Const   RESOURCE_GLOBALNET   As   Long   =   &H2&  
  Private   Const   RESOURCE_REMEMBERED   As   Long   =   &H3&  
  Private   Const   RESOURCEDISPLAYTYPE_DIRECTORY&   =   &H9  
  Private   Const   RESOURCEDISPLAYTYPE_DOMAIN&   =   &H1  
  Private   Const   RESOURCEDISPLAYTYPE_FILE&   =   &H4  
  Private   Const   RESOURCEDISPLAYTYPE_GENERIC&   =   &H0  
  Private   Const   RESOURCEDISPLAYTYPE_GROUP&   =   &H5  
  Private   Const   RESOURCEDISPLAYTYPE_NETWORK&   =   &H6  
  Private   Const   RESOURCEDISPLAYTYPE_ROOT&   =   &H7  
  Private   Const   RESOURCEDISPLAYTYPE_SERVER&   =   &H2  
  Private   Const   RESOURCEDISPLAYTYPE_SHARE&   =   &H3  
  Private   Const   RESOURCEDISPLAYTYPE_SHAREADMIN&   =   &H8  
  Private   Const   RESOURCETYPE_ANY   As   Long   =   &H0&  
  Private   Const   RESOURCETYPE_DISK   As   Long   =   &H1&  
  Private   Const   RESOURCETYPE_PRINT   As   Long   =   &H2&  
  Private   Const   RESOURCETYPE_UNKNOWN   As   Long   =   &HFFFF&  
  Private   Const   RESOURCEUSAGE_ALL   As   Long   =   &H0&  
  Private   Const   RESOURCEUSAGE_CONNECTABLE   As   Long   =   &H1&  
  Private   Const   RESOURCEUSAGE_CONTAINER   As   Long   =   &H2&  
  Private   Const   RESOURCEUSAGE_RESERVED   As   Long   =   &H80000000  
  Private   Const   NO_ERROR   =   0  
  Private   Const   ERROR_MORE_DATA   =   234    
  Private   Const   RESOURCE_ENUM_ALL   As   Long   =   &HFFFF  
  Private   Type   NETRESOURCE  
          dwScope   As   Long  
          dwType   As   Long  
          dwDisplayType   As   Long  
          dwUsage   As   Long  
          pLocalName   As   Long  
          pRemoteName   As   Long  
          pComment   As   Long  
          pProvider   As   Long  
  End   TypePrivate    
   
  Type   NETRESOURCE_REAL  
          dwScope   As   Long  
          dwType   As   Long  
          dwDisplayType   As   Long  
          dwUsage   As   Long  
          sLocalName   As   String  
          sRemoteName   As   String  
          sComment   As   String  
          sProvider   As   String  
  End   Type  
   
  Private   Declare   Function   WNetAddConnection2   Lib   "mpr.dll"   Alias   "WNetAddConnection2A"   (lpNetResource   As   NETRESOURCE,   ByVal   lpPassword   As   String,   ByVal   lpUserName   As   String,   ByVal   dwFlags   As   Long)   As   Long  
   
  Private   Declare   Function   WNetOpenEnum   Lib   "mpr.dll"   Alias   "WNetOpenEnumA"   (ByVal   dwScope   As   Long,   ByVal   dwType   As   Long,   ByVal   dwUsage   As   Long,   lpNetResource   As   Any,   lphEnum   As   Long)   As   Long  
   
  Private   Declare   Function   WNetEnumResource   Lib   "mpr.dll"   Alias   "WNetEnumResourceA"   (ByVal   hEnum   As   Long,   lpcCount   As   Long,   lpBuffer   As   NETRESOURCE,   lpBufferSize   As   Long)   As   Long  
   
  Private   Declare   Function   WNetCloseEnum   Lib   "mpr.dll"   (ByVal   hEnum   As   Long)   As   LongPrivate   Declare   Function   VarPtrAny   Lib   "vb40032.dll"   Alias   "VarPtr"   (lpObject   As   Any)   As   Long  
   
  Private   Declare   Sub   CopyMem   Lib   "kernel32"   Alias   "RtlMoveMemory"   (lpTo   As   Any,   lpFrom   As   Any,   ByVal   lLen   As   Long)  
   
  Private   Declare   Sub   CopyMemByPtr   Lib   "kernel32"   Alias   "RtlMoveMemory"   (ByVal   lpTo   As   Long,   ByVal   lpFrom   As   Long,   ByVal   lLen   As   Long)  
   
  Private   Declare   Function   lstrcpy   Lib   "kernel32"   Alias   "lstrcpyA"   (ByVal   lpString1   As   String,   ByVal   lpString2   As   Any)   As   Long  
   
  Private   Declare   Function   lstrlen   Lib   "kernel32"   Alias   "lstrlenA"   (ByVal   lpString   As   Any)   As   Long  
   
  Sub   main()  
          Const   MAX_RESOURCES   =   256  
          Const   NOT_A_CONTAINER   =   -1  
          Dim   bFirstTime   As   Boolean  
          Dim   lReturn   As   Long  
          Dim   hEnum   As   Long  
          Dim   lCount   As   Long  
          Dim   lMin   As   Long  
          Dim   lLength   As   Long  
          Dim   l   As   Long  
          Dim   lBufferSize   As   Long  
          Dim   lLastIndex   As   Long  
          Dim   uNetApi(0   To   MAX_RESOURCES)   As   NETRESOURCE  
          Dim   uNet()   As   NETRESOURCE_REAL  
          bFirstTime   =   True  
          Do  
                  If   bFirstTime   Then  
                          lReturn   =   WNetOpenEnum(RESOURCE_GLOBALNET,   _  
                              RESOURCETYPE_ANY,   RESOURCEUSAGE_ALL,   ByVal   0&,   hEnum)  
                          bFirstTime   =   False  
                  Else  
                          If   uNet(lLastIndex).dwUsage   _  
                                  And   RESOURCEUSAGE_CONTAINER   Then  
                                  lReturn   =   WNetOpenEnum(RESOURCE_GLOBALNET,   _  
                                        RESOURCETYPE_ANY,   RESOURCEUSAGE_ALL,   _  
                                        uNet(lLastIndex),   hEnum)  
                          Else  
                                  lReturn   =   NOT_A_CONTAINER  
                                  hEnum   =   0  
                          End   If  
                          lLastIndex   =   lLastIndex   +   1  
                  End   If  
                  If   lReturn   =   NO_ERROR   Then  
                          lCount   =   RESOURCE_ENUM_ALL  
                          Do  
                                  lBufferSize   =   UBound(uNetApi)   *   Len(uNetApi(0))   /   2  
                                  lReturn   =   WNetEnumResource(hEnum,   lCount,   _  
                                          uNetApi(0),   lBufferSize)  
                                  If   lCount   >   0   Then  
                                          ReDim   Preserve   uNet(0   To   lMin   +   lCount   -   1)   _  
                                                  As   NETRESOURCE_REAL  
                                          For   l   =   0   To   lCount   -   1  
                                                  'Each   Resource   will   appear   here   as   uNet(i)  
                                                  uNet(lMin   +   l).dwScope   =   uNetApi(l).dwScope  
                                                  uNet(lMin   +   l).dwType   =   uNetApi(l).dwType  
                                                  uNet(lMin   +   l).dwDisplayType   =   _  
                                                          uNetApi(l).dwDisplayType  
                                                  uNet(lMin   +   l).dwUsage   =   uNetApi(l).dwUsage  
                                                  If   uNetApi(l).pLocalName   Then  
                                                          lLength   =   lstrlen(uNetApi(l).pLocalName)  
                                                          uNet(lMin   +   l).sLocalName   =   _  
                                                                Space$(lLength)  
                                                          CopyMem   ByVal   uNet(lMin   _  
                                                                +   l).sLocalName,   _  
                                                                ByVal   uNetApi(l).pLocalName,   lLength  
                                                  End   If  
                                                  If   uNetApi(l).pRemoteName   Then  
                                                          lLength   =   lstrlen(   _  
                                                                uNetApi(l).pRemoteName)  
                                                          uNet(lMin   +   l).sRemoteName   =   _  
                                                                Space$(lLength)  
                                                          CopyMem   ByVal   uNet(lMin   +   _  
                                                                l).sRemoteName,   _  
                                                                ByVal   uNetApi(l).pRemoteName,   lLength  
                                                  End   If  
                                                  If   uNetApi(l).pComment   Then  
                                                          lLength   =   lstrlen(uNetApi(l).pComment)  
                                                          uNet(lMin   +   l).sComment   =   _  
                                                                  Space$(lLength)  
                                                          CopyMem   ByVal   uNet(lMin   +   l).sComment,   _  
                                                                  ByVal   uNetApi(l).pComment,   lLength  
                                                  End   If  
                                                  If   uNetApi(l).pProvider   Then  
                                                          lLength   =   lstrlen(uNetApi(l).pProvider)  
                                                          uNet(lMin   +   l).sProvider   =   _  
                                                                Space$(lLength)  
                                                          CopyMem   ByVal   uNet(lMin   +   l).sProvider,_  
                                                                ByVal   uNetApi(l).pProvider,   lLength  
                                                  End   If  
                                          Next   l  
                                  End   If  
                                  lMin   =   lMin   +   lCount  
                          Loop   While   lReturn   =   ERROR_MORE_DATA  
                  End   If  
                  If   hEnum   Then  
                          l   =   WNetCloseEnum(hEnum)  
                  End   If  
          Loop   While   lLastIndex   <   lMin  
          If   UBound(uNet)   >   0   Then  
                  For   l   =   0   To   UBound(uNet)  
                          Select   Case   uNet(l).dwDisplayType  
                                  Case   RESOURCEDISPLAYTYPE_DIRECTORY&  
                                          Debug.Print   "Directory...",  
                                  Case   RESOURCEDISPLAYTYPE_DOMAIN  
                                          Debug.Print   "Domain...",  
                                  Case   RESOURCEDISPLAYTYPE_FILE  
                                          Debug.Print   "File...",  
                                  Case   RESOURCEDISPLAYTYPE_GENERIC  
                                          Debug.Print   "Generic...",  
                                  Case   RESOURCEDISPLAYTYPE_GROUP  
                                          Debug.Print   "Group...",    
                                Case   RESOURCEDISPLAYTYPE_NETWORK&  
                                          Debug.Print   "Network...",  
                                  Case   RESOURCEDISPLAYTYPE_ROOT&  
                                          Debug.Print   "Root...",  
                                  Case   RESOURCEDISPLAYTYPE_SERVER  
                                          Debug.Print   "Server...",  
                                  Case   RESOURCEDISPLAYTYPE_SHARE  
                                          Debug.Print   "Share...",  
                                  Case   RESOURCEDISPLAYTYPE_SHAREADMIN&  
                                          Debug.Print   "ShareAdmin...",  
                          End   Select  
                          Debug.Print   uNet(l).sRemoteName,   uNet(l).sComment  
                  Next   l  
          End   If  
  End   Sub  
   
  Top

3 楼iwzw()回复于 2003-07-04 22:23:11 得分 0

使过后发现,在XP下可以,但在98下没作用。Top

4 楼iwzw()回复于 2003-07-05 07:48:09 得分 0

upTop

5 楼iwzw()回复于 2003-07-05 11:42:06 得分 0

98下如何处理?Top

相关问题

  • 怎么去掉我们局域网中别人的工作组!!!!!
  • 统计局域网里的工作组数目???
  • 高手请进,关于win98里局域网工作组的问题。
  • 在WIN2K中怎样设置局域网的计算机名、工作组等
  • 如何枚举局域网内的工作组名称,请不吝赐教
  • 如何让局域网里的两个不同的工作组互不可见?
  • 请教如何在控制台中关闭工作组中的其他计算机?环境是WIN2K SERVER ,工作组局域网 多谢!
  • 请教如何在控制台中关闭工作组中的其他计算机?环境是WIN2K SERVER ,工作组局域网 多谢!
  • 局域网中如何获得某个工作组下的所有计算机的名字
  • 急!!!在线等候!!!如何获得本机在局域网中所处的工作组名?

关键词

  • resourcedisplaytype
  • resourcetype
  • private const
  • as long
  • resource

得分解答快速导航

  • 帖主:iwzw
  • lihonggen0

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo