如何向Window组中填加用户 ??????
如本机上有一个Olap Administrator组需要填加一个域用户 Domain\user1非常感谢!!!!!!!!!!!

解决方案 »

  1.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=97733
      

  2.   

    Private Declare Function NetUserAdd _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Level As Long, Buffer As Any, ParamErr As _
        Long) As Long
    Private Declare Function NetUserEnum _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Level As Long, ByVal Filter As Long, _
        Buffer As Long, ByVal BufferLen As Long, _
        EntriesRead As Long, TotalEntries As Long, _
        ResumeHandle As Long) As Long
    Private Declare Function NetUserGetInfo _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Username As String, ByVal Level As Long, _
        Buffer As Long) As Long
    Private Declare Function NetUserSetInfo _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Username As String, ByVal Level As Long, _
        Buffer As Any, ParamErr As Long) As Long
    Private Declare Function NetUserGetGroups _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Username As String, ByVal Level As Long, _
        Buffer As Long, ByVal BufferLen As Long, _
        EntriesRead As Long, TotalEntries As Long) As Long
    Private Declare Function NetUserDel _
        Lib "Netapi32" (ByVal Servername As String, _
        ByVal Username As String) As Long
    Private Declare Function NetApiBufferFree _
        Lib "Netapi32" (ByVal Buffer As Long) As Long
    Private Declare Sub CopyMemory Lib "Kernel32" _
        Alias "RtlMoveMemory" (lpSource As Any, _
        lpDestination As Any, ByVal cbSize As Long)
    Private Declare Function StrLen Lib "Kernel32" _
        Alias "lstrlenW" (ByVal lpString As Long) As LongPrivate Type UserInfo_1
        Username As String
        Password As String
        PasswordAge As Long
        Privilege As Long
        HomeDir As String
        Comment As String
        Flags As Long
        ScriptPath As String
        End Type
    Private Type UserInfo_1011
        Fullname As String
        End Type
    Private Type lpUserInfo_10
        Username As Long
        Comment As Long
        UserComment As Long
        Fullname As Long
        End Type
    Private Type lpGroupUsersInfo_0
        Groupname As Long
        End Type
        ' Guest privilege
        Public Const User_Priv_Guest = &H0
        ' User privilege
        Public Const User_Priv_User = &H1
        ' Administrator privilege
        Public Const User_Priv_Admin = &H2
        
        ' The logon script executed. Required fo
        '     r Lan Manager 2.0 and Windows NT.
        Public Const User_Flags_Script = &H1
        ' The account is disabled.
        Public Const User_Flags_AccountDisable = &H2
        ' The home directory is required. Ignore
        '     d in Windows NT.
        Public Const User_Flags_HomedirRequired = &H8
        ' The user's account is currently locked
        '     out.
        Public Const User_Flags_Lockout = &H10
        ' No password is required.
        Public Const User_Flags_PasswordNotRequired = &H20
        ' User cannot change password.
        Public Const User_Flags_PasswordCantChange = &H40
        ' Password never expire.
        Public Const User_Flags_PasswordNeverExpire = &H10000
        ' Account for users whose primary accoun
        '     t is in other domain. "Local User Accoun
        '     t" in User Manager.
        Public Const User_Flags_TempDuplicateAccount = &H100
        ' Typical user.
        Public Const User_Flags_NormalAccount = &H200
        ' Permit to trust account for a Windows 
        '     NT domain that trusts other domains.
        Public Const User_Flags_InterdomainTrustAccount = &H800
        ' Computer account for an Windows NT Wor
        '     kstation or Server that is a member of t
        '     his domain.
        Public Const User_Flags_WorkstationTrustAccount = &H1000
        ' Computer account for a Windows NT Back
        '     up Domain Controller that is a member of
        '     this domain.
        Public Const User_Flags_ServerTrustAccount = &H2000
        Public Const User_Filter_TempDuplicateAccount = &H1
        Public Const User_Filter_NormalAccount = &H2
        Public Const User_Filter_InterdomainTrustAccount = &H8
        Public Const User_Filter_WorkstationTrustAccount = &H10
        Public Const User_Filter_ServerTrustAccount = &H20
        ' Input
        Private Usr1 As UserInfo_1
        Private Usr1011 As UserInfo_1011
        ' Output
        Private lpUsr10 As lpUserInfo_10
        Private lpGrpUsr0 As lpGroupUsersInfo_0
        Private Lvi As ListItem
        ' Add a workstation to a domain:
        ' Servername: Your Domain Controller
        ' Username: New computer
        ' Flags: User_Flags_Script Or 
        ' User_Flags_WorkstationTrustAccount
      

  3.   

    Function UserAdd(ByVal Servername As String, _
        ByVal Username As String, ByVal Password As _
        String, ByVal Comment As String, ByVal Flags As _
        Long) As String
        Servername = StrConv(Servername, vbUnicode)
        Usr1.Username = StrConv(Username, vbUnicode)
        Usr1.Password = StrConv(Password, vbUnicode)
        Usr1.Privilege = User_Priv_User
        Usr1.Comment = StrConv(Comment, vbUnicode)
        Usr1.Flags = Flags
        UserAdd = NetUserAdd(Servername, 1, Usr1, 0)
    End Function
    Function UserEnum(ByVal Servername As String, _
        ByVal Filter As Long, ByVal Lv As ListView, _
        Optional NumItems As Long) As Long
        Dim Buffer As Long, BufferLen As Long, _
        EntriesRead As Long, TotalEntries As Long, _
        ResumeHandle As Long
        Servername = StrConv(Servername, vbUnicode)
        BufferLen = -1: ResumeHandle = 0
        rc = NetUserEnum(Servername, 10, Filter, _
        Buffer, BufferLen, EntriesRead, TotalEntries, _
        ResumeHandle)
        If rc = 0 And EntriesRead <> 0 Then
            For i = 0 To EntriesRead - 1
                CopyMemory lpUsr10, ByVal Buffer, Len(lpUsr10)
                Set Lvi = Lv.ListItems.Add Text:=PointerToString(lpUsr10.Username))
                Lvi.SubItems(1) = PointerToString(lpUsr10.Fullname)
                Lvi.SubItems(2) = PointerToString(lpUsr10.Comment)
                Buffer = Buffer + Len(lpUsr10)
            Next i
        End If
        NetApiBufferFree Buffer: NumUsers = EntriesRead
        UserEnum = rc
    End Function
    Function UserGetInfo(ByVal Servername As String, _
        ByVal Username As String, Optional Comment As _
        String, Optional Fullname As String) As Long
        Dim Buffer As Long
        Servername = StrConv(Servername, vbUnicode)
        Username = StrConv(Username, vbUnicode)
        rc = NetUserGetInfo(Servername, Username, 10, _
        Buffer)
        If rc = 0 Then
            CopyMemory lpUsr10, ByVal Buffer, Len(lpUsr10)
            Comment = PointerToString(lpUsr10.Comment)
            Fullname = PointerToString(lpUsr10.Fullname)
        End If
        NetApiBufferFree Buffer: UserGetInfo = rc
    End Function
    Function UserSetInfo(ByVal Servername As String, _
        ByVal Username As String, ByVal Fullname As _
        String) As Long
        Servername = StrConv(Servername, vbUnicode)
        Username = StrConv(Username, vbUnicode)
        Usr1011.Fullname = StrConv(Fullname, vbUnicode)
        UserSetInfo = NetUserSetInfo(Servername, _
        Username, 1011, Usr1011, 0)
    End Function
    Function UserGetGroups(ByVal Servername As _
        String, ByVal Username As String, ByVal Lv As _
        ListView, Optional NumItems As Long) As Long
        Dim Buffer As Long, BufferLen As Long, _
        EntriesRead As Long, TotalEntries As Long
        Servername = StrConv(Servername, vbUnicode)
        Username = StrConv(Username, vbUnicode): BufferLen = -1
        rc = NetUserGetGroups(Servername, Username, 0, _
        Buffer, BufferLen, EntriesRead, TotalEntries)
        If rc = 0 And EntriesRead <> 0 Then
            For i = 0 To EntriesRead - 1
                CopyMemory lpGrpUsr0, ByVal Buffer, Len _(lpGrpUsr0)
                Lv.ListItems.Add Text:=PointerToString(lpGrpUsr0.Groupname)
                Buffer = Buffer + Len(lpGrpUsr0)
            Next i
        End If
        NetApiBufferFree Buffer: NumItems = EntriesRead
        UserGetGroups = rc
    End Function
    Function UserDel(ByVal Servername As String, _
        ByVal Username As String) As Long
        Servername = StrConv(Servername, vbUnicode)
        Username = StrConv(Username, vbUnicode)
        UserDel = NetUserDel(Servername, Username)
    End Function
    Private Function PointerToString(lpString As _
        Long) As String
        Dim Buffer() As Byte, BufferLen As Long
        If lpString Then
            BufferLen = StrLen(lpString) * 2
            If BufferLen Then
                ReDim Buffer(0 To (BufferLen - 1)) As Byte
                CopyMemory Buffer(0), ByVal lpString, BufferLen
                PointerToString = Buffer
            End If
        End If
    End Function
      

  4.   

    新建用户可以了,请问 ch21st(风尘鸟)  把用户加到组里如何做?谢谢!!
      

  5.   

    问题解决了吗?给你例子,如果是本地:
    模块代码:
    Option ExplicitDeclare Function NetLocalGroupAddMembers Lib "netapi32.dll" _
       (ByVal servername As String, _
        ByVal groupname As String, _
        ByVal level As Long, _
        buf As Any, _
        ByVal totalentries As Long) As LongDeclare Function NetApiBufferFree Lib "netapi32.dll" _
       (ByVal Buffer As Long) As LongDeclare Function NetUserEnum Lib "netapi32.dll" _
       (ByVal servername As String, _
        ByVal level As Long, _
        ByVal filter As Long, _
        bufptr As Any, _
        ByVal prefmaxlen As Long, _
        entriesread As Long, _
        totalentries As Long, _
        resume_handle As Long) As LongDeclare Function NetLocalGroupEnum Lib "netapi32.dll" _
       (ByVal servername As String, _
        ByVal level As Long, _
        bufptr As Any, _
        ByVal prefmaxlen As Long, _
        entriesread As Long, _
        totalentries As Long, _
        resumehandle As Long) As LongDeclare Function NetUserGetLocalGroups Lib "netapi32.dll" _
       (ByVal servername As String, _
        ByVal username As String, _
        ByVal level As Long, _
        ByVal flag As Long, _
        bufptr As Any, _
        ByVal prefmaxlen As Long, _
        entriesread As Long, _
        totalentries As Long) As LongDeclare Sub RtlMoveMemory Lib "Kernel32.dll" _
       (Destination As Any, _
        Source As Any, _
        ByVal Length As Long)Declare Function lstrcpy Lib "Kernel32.dll" _
        Alias "lstrcpyW" _
       (lpszString1 As Any, _
        lpszString2 As Any) As LongDeclare Function lstrlen Lib "Kernel32.dll" _
        Alias "lstrlenW" _
       (ByVal lpszString As Long) As LongType USER_INFO_0
        usri0_name As Long
    End TypeType LOCALGROUP_INFO_0
        lgrpi0_name As Long
    End TypeType LOCALGROUP_USER_INFO_0
        lgrui0_name As Long
    End TypeType LOCALGROUP_MEMBERS_INFO_3
        lgrmi3_domainandname As Long
    End TypePublic Const LG_INCLUDE_INDIRECT = &H1
    Public Const MAX_PREFERRED_LENGTH = -1&
    Public Const ERROR_MORE_DATA = 234&
    Public Const NERR_Success = 0
    '
    Function PointerToString(lngPointer As Long) As String
        Dim bytBuffer(255) As Byte
        
        lstrcpy bytBuffer(0), ByVal lngPointer
        PointerToString = Left(bytBuffer, lstrlen(lngPointer))
    End Function窗体:
    Private Sub Combo1_Click()
        EnumLocalGroups List2
        EnumUserLocalGroups List1, List2
    End SubPrivate Sub Form_Load()
        With Label1
            .Alignment = vbRightJustify
            .Caption = "本地用户列表"
        End With
        Label2.Caption = "用户所在组"
        Label3.Caption = "本机用户组"
        Command1.Caption = "添加"
        EnumUsers Combo1
        Combo1.ListIndex = 0
    End SubPrivate Sub Command1_Click()
        Dim lngWin32apiResultCode As Long
        Dim strServerName         As String
        Dim strLocalGroupName     As String
        Dim lngBufPtr             As Long
        Dim udtLGMemInfo          As LOCALGROUP_MEMBERS_INFO_3
        Dim strName               As String
        
        strServerName = _
            StrConv("", _
                    vbUnicode)
        If List2.ListIndex >= 0 Then
            strLocalGroupName = _
                StrConv(List2.Text, _
                        vbUnicode)
            If Combo1.ListIndex >= 0 Then
                strName = Combo1.Text
                udtLGMemInfo.lgrmi3_domainandname = StrPtr(strName)
                lngWin32apiResultCode = _
                    NetLocalGroupAddMembers(strServerName, _
                                            strLocalGroupName, _
                                            3, _
                                            udtLGMemInfo, _
                                            1)
                NetApiBufferFree lngBufPtr
            End If
        End If
        EnumLocalGroups List2
        EnumUserLocalGroups List1, List2
    End Sub
      

  6.   

    Private Sub EnumUsers(cboUsers As ComboBox)
        Dim lngWin32apiResultCode As Long
        Dim strServerName         As String
        Dim lngBufPtr             As Long
        Dim lngMaxLen             As Long
        Dim lngEntriesRead        As Long
        Dim lngTotalEntries       As Long
        Dim lngResumeHandle       As Long
        Dim udtUserInfo0          As USER_INFO_0
        Dim lngEntry              As Long
        
        strServerName = _
            StrConv("", _
                    vbUnicode)
        Do
            lngWin32apiResultCode = _
                NetUserEnum(strServerName, _
                            0, _
                            0, _
                            lngBufPtr, _
                            lngMaxLen, _
                            lngEntriesRead, _
                            lngTotalEntries, _
                            lngResumeHandle)
            If (lngWin32apiResultCode = NERR_Success) Or _
               (lngWin32apiResultCode = ERROR_MORE_DATA) Then
                For lngEntry = 0 To lngEntriesRead - 1
                    RtlMoveMemory udtUserInfo0, _
                                  ByVal lngBufPtr + _
                                        Len(udtUserInfo0) * _
                                        lngEntry, _
                                  Len(udtUserInfo0)
                    cboUsers.AddItem _
                        PointerToString(udtUserInfo0.usri0_name)
                Next
            End If
            If lngBufPtr <> 0 Then
                NetApiBufferFree lngBufPtr
            End If
        Loop Until lngEntriesRead = lngTotalEntries
    End Sub
    '
    Private Sub EnumUserLocalGroups(lstUserLocalGroups As ListBox, _
                                    lstLocalGroups As ListBox)
        Dim lngWin32apiResultCode As Long
        Dim strServerName   As String
        Dim strUserName     As String
        Dim lngBufPtr       As Long
        Dim lngEntriesRead  As Long
        Dim lngTotalEntries As Long
        Dim lngResumeHandle As Long
        Dim udtLGInfo0      As LOCALGROUP_USER_INFO_0
        Dim lngEntry        As Long
        Dim strLocalGroup   As String
        Dim lngListCounter  As Long
        
        lstUserLocalGroups.Clear
        strServerName = _
            StrConv("", _
                    vbUnicode)
        strUserName = _
            StrConv(Combo1.Text, _
                    vbUnicode)
        Do
            lngWin32apiResultCode = _
                NetUserGetLocalGroups(strServerName, _
                                      strUserName, _
                                      0, _
                                      LG_INCLUDE_INDIRECT, _
                                      lngBufPtr, _
                                      MAX_PREFERRED_LENGTH, _
                                      lngEntriesRead, _
                                      lngTotalEntries)
            If (lngWin32apiResultCode = NERR_Success) Or _
               (lngWin32apiResultCode = ERROR_MORE_DATA) Then
                For lngEntry = 0 To lngEntriesRead - 1
                    RtlMoveMemory udtLGInfo0, _
                                  ByVal lngBufPtr + _
                                        Len(udtLGInfo0) * _
                                        lngEntry, _
                                  Len(udtLGInfo0)
                    strLocalGroup = _
                        PointerToString(udtLGInfo0.lgrui0_name)
                    lstUserLocalGroups.AddItem strLocalGroup
                    With lstLocalGroups
                        For lngListCounter = 0 To .ListCount - 1
                            If strLocalGroup = .List(lngListCounter) Then
                                .RemoveItem (lngListCounter)
                            End If
                        Next
                    End With
                Next
            End If
            If lngBufPtr <> 0 Then
                NetApiBufferFree lngBufPtr
            End If
        Loop Until lngEntriesRead = lngTotalEntries
    End Sub
    '
    Private Sub EnumLocalGroups(lstLocalGroups As ListBox)
        Dim lngWin32apiResultCode As Long
        Dim strServerName         As String
        Dim lngBufPtr             As Long
        Dim lngEntriesRead        As Long
        Dim lngTotalEntries       As Long
        Dim lngResumeHandle       As Long
        Dim udtLGInfo0            As LOCALGROUP_INFO_0
        Dim lngEntry              As Long
        
        lstLocalGroups.Clear
        strServerName = _
            StrConv("", _
                    vbUnicode)
        Do
            lngWin32apiResultCode = _
                NetLocalGroupEnum(strServerName, _
                                  0, _
                                  lngBufPtr, _
                                  MAX_PREFERRED_LENGTH, _
                                  lngEntriesRead, _
                                  lngTotalEntries, _
                                  lngResumeHandle)
            If (lngWin32apiResultCode = NERR_Success) Or _
               (lngWin32apiResultCode = ERROR_MORE_DATA) Then
                For lngEntry = 0 To lngEntriesRead - 1
                    RtlMoveMemory udtLGInfo0, _
                                  ByVal lngBufPtr + _
                                        Len(udtLGInfo0) * _
                                        lngEntry, _
                                  Len(udtLGInfo0)
                    lstLocalGroups.AddItem _
                        PointerToString(udtLGInfo0.lgrpi0_name)
                Next
            End If
            If lngBufPtr <> 0 Then
                NetApiBufferFree lngBufPtr
            End If
        Loop While lngWin32apiResultCode = ERROR_MORE_DATA
    End Sub