在Win2000中偶用NetUserAdd添加了一个用户,但在2000里看了一下,此用户不属于任何组,而我看了一下Msdn,用NetUserAdd添加的用户是Users用户,而且我用NetUserSetInfo和NetUserSetGroups更改均不能修改权限,不知道为什么,希望各位最好能给小弟一个Delphi的例子。在下感激不尽!

解决方案 »

  1.   

    刚写完的,还没正式用过{=========================================================================
      功  能:  添加系统用户
      参  数:  strName 用户名,strPwd 用户密码,n该用户的属性默认
               0为users用户 ,1为管理员用户
      返回值:  1添加用户成功,0添加失败,
               11添加用户及属性设置成功,10添加用户成功属性设置失败
      备  注:   ===========================================================================}
    function AddWinUser(strName,strPwd: string; n: Integer): Integer;
    Const
      USER_PRIV_USER = 1;
      UF_SCRIPT      = $0001;
      NERR_Success   = 0;
    Var
      P              : PUserInfo_1;
      dwError        : DWORD;
      wUserName      : WideString;
      wPassword      : WideString;
      wGroupName     : WideString;
      dwResult       : DWORD;
      Q              : PLocalGroupMembersInfo_3;
      wDomainAndName : WideString;
    begin
      Result := 0;
      New( P );
      wUserName       := strName;
      wPassword       := strPwd;
      P^.User_Name    := PWideChar( wUserName );
      P^.Password     := PWideChar( wPassword );
      P^.Password_Age := 0;
      P^.Privilege    := USER_PRIV_USER;
      P^.Home_Dir     := Nil;
      P^.Comment      := Nil;
      P^.Flags        := UF_SCRIPT;
      P^.Script_Path  := Nil;
      dwResult        := NetUserAdd( Nil, 1, P, dwError );
      If dwResult = NERR_Success Then
      Begin
        Result := 1;
        if n = 1 then
        begin
          New( Q );
          wDomainAndName := wUserName;
          Q^.DomainAndName := PWideChar( wDomainAndName );
          wGroupName := 'Administrators';// 'Guests';'Users'; 多次调用API加入权限组
          dwResult := NetLocalGroupAddMembers( Nil, PWideChar( wGroupName ), 3, Q, 1 );
          If dwResult = NERR_Success Then
            Result := 11
          else
            Result := 10;
          Dispose( Q );
        end;
      End;
      Dispose( P );
    end;
      

  2.   

    忘了声明部分 Type
        NET_API_STATUS = DWORD;    PUserInfo_1 = ^TUserInfo_1;
        TUserInfo_1 = Record
            User_Name    : LPWSTR;
            Password     : LPWSTR;
            Password_Age : DWORD;
            Privilege    : DWORD;
            Home_Dir     : LPWSTR;
            Comment      : LPWSTR;
            Flags        : DWORD;
            Script_Path  : LPWSTR;
        End;    PLocalGroupMembersInfo_3 = ^TLocalGroupMembersInfo_3;
        TLocalGroupMembersInfo_3 = Record
            DomainAndName : LPWSTR;
        End;    Function NetUserAdd( ServerName : LPWSTR; Level : DWORD; Buf : Pointer;
                            Var ParmError : DWORD ) :
                            NET_API_STATUS; StdCall; External 'NETAPI32.DLL';    Function NetUserDel( ServerName: LPCWSTR; username: LPCWSTR ): NET_API_STATUS;
                             stdcall;external 'netapi32.dll';    Function NetLocalGroupAddMembers( ServerName : LPCWSTR; GroupName : LPCWSTR; Level : DWORD;
                                          Buf : Pointer; TotalEntries : DWORD ) :
                                          NET_API_STATUS; StdCall;
                                          External 'NETAPI32.DLL';
                  {以上声明为AddWinUser、函数使用}
      

  3.   

    To DelphiBoy2003(一朵梨花压海棠,玉树临风胜潘安)
    不试怎么知道简单?
      

  4.   

    今天试了一下楼主的几个函数
    没有成功 ^_^
    用net localgroup administrator naughtyboy /add
    来修改用户所在的组吧
      

  5.   

    sorry not administrator but administratorswinexec(pchar('net user naughtyboy /add'),sw_hide);
     winexec(pchar('net localgroup administrators naughtyboy /add'),sw_hide);
     winexec(pchar('net user naughtyboy /delete'),sw_hide);
      

  6.   

    难道这两个API函数真的不能用吗?各位老大帮帮忙吧
      

  7.   

    ^_^
    终于能修改用户的本地组了
    用下面的var
      ginfo: PLocalGroupMembersInfo3;
    begin
      GetMem(ginfo,sizeof(TLocalGroupMembersInfo3));
      ginfo^.lgrmi3_domainandname := 'hongwei';
      NetLocalGroupAddMembers(nil,'Administrators',3,pointer(ginfo),1);
      FreeMem(ginfo);
    end;去www.delphi-jedi.org下载LanManager,lm.h里面的net api绝大部分都被解释到pas单元了
    另外你也可以自己定义record
    不过楼主所说的netusersetinfo和netusersetgroups好像不行
      

  8.   

    非常感谢 naughtyboy((笨!奔!)) 老兄!!!