各位:请问使用DELPHI如何重设WINDOWS用户的密码,我找到的资料是NetUserChangePassword可以修改用户密码,但是需要输入旧密码,因我有管理员权限,希望重设密码而不是修改密码,请问如何可以做到,新手来的,最好带有范例,谢谢.

解决方案 »

  1.   

    那就奇怪了:
    我在WINDOWS下使用NET
    net user administrator 123456
    都可以更改密码呀或者VBS
    objUser.SetPassword 都可以在不用输入旧密码的情况下重设密码.
    delphi 应也能做到吗?
    等待解答...
      

  2.   

    关注一下,偶只用过NetUserChangePassword
      

  3.   

    你用Delphi调用cmd输入那些命令不就得了……
      

  4.   

    使用 如下代码的确可以修改密码,但这需要依赖于WINDOWS操作系统,如果net程式丢失的情况下,此程式将会失败,有什么方法可以在delphi下实现此功能了,谢谢;
    var
    user,pass:string;
    begin
         user:='admin';
         pass:='123456';
         WinExec(pchar('cmd /c net user /add '+user+' '+pass+''),0);
    end.
      

  5.   

    按你的要求 根据MSDN上的例子改的 不需要当前密码 强制修改windows用户的密码(当然需要相应的权限)
    VS2005编译运行成功 改成delphi代码也不难 我就不帮你了 
    关键函数是
    NET_API_STATUS NetUserSetInfo(
      LPCWSTR servername,
      LPCWSTR username,
      DWORD level,
      LPBYTE buf,
      LPDWORD parm_err
    );
    和USER_INFO_1003这个结构#include <stdio.h>
    #include <windows.h> 
    #include <lm.h>
    #pragma comment(lib,"netapi32.lib")
    int wmain(int argc, wchar_t *argv[])
    {
       DWORD dwLevel = 1003;
       USER_INFO_1003 ui_1003;
       NET_API_STATUS nStatus;
       LPWSTR wNewPassword;
       LPWSTR wComputerName;
       LPWSTR wUserName;
       
       if (argc != 3)
       {
          fwprintf(stderr, L"Usage: %s UserName NewPassword\n", argv[0]);
          return 0;
       }
       wComputerName=NULL;
       wUserName=argv[1];
       wNewPassword=argv[2];
       
       ui_1003.usri1003_password=wNewPassword;   
       
       nStatus = NetUserSetInfo(wComputerName,wUserName,dwLevel,(LPBYTE)&ui_1003,NULL);
       
       if (nStatus == NERR_Success)
          fwprintf(stderr, L"%s's password has been changed\n", argv[1]);
       else
          fprintf(stderr, "A system error has occurred: %d\n", nStatus);   return 0;
    }
      

  6.   

    嗯,谢谢昨天我也找到此段代码了,但我硬是改不回DELPHI, 主要是不明白DELPHI如何调用netapi32.dll哪们帮个忙,谢谢
      

  7.   

    翻译成Delphi 主要代码如下好久没用Delphi了 有点郁闷 type
      NET_API_STATUS = LongInt;
      USER_INFO_1003 = Record
      usri1003_password:PWideChar;
    End;function   NetUserSetInfo(ServerName:PWideChar;UserName:PWideChar;Level:LongWord;
          Buf:PByte;Parm_err:PDWORD):Longint;stdcall;external 'netapi32.dll'
          Name'NetUserSetInfo';procedure TForm2.Button1Click(Sender: TObject);
    var
      ComputerName,UserName,UserPassword:PWideChar;
      nas:NET_API_STATUS;
      level:LongWord;
      ui_1003:USER_INFO_1003;
    begin
      level:=1003;
      ComputerName:=nil;
      UserName := PWideChar(WideString('Administrator'));
      UserPassword := PWideChar(WideString('1234'));
      ui_1003.usri1003_password:=UserPassword;
      nas:= NetUserSetInfo(ComputerName,UserName,level,PByte(@ui_1003),nil);
      if nas = 0 then
        ShowMessage('密码修改成功!')
      else
        ShowMessage('发生错误,代码:'+IntToStr(nas));end;
      

  8.   

    谢谢riyueren
    问题己解决.