2010-03-15 5 views
3

Je dois créer un nouvel utilisateur Windows en tant qu'administrateur en utilisant Delphicréer des fenêtres utilisateur en utilisant Delphi

Merci

+0

ou une ligne de commande utilitaire qui peut le faire grâce – Wel

+0

résolus à l'aide utilisateur net mais s'il y a une autre solution plz postent grâce – Wel

Répondre

10

vous pouvez utiliser les fonctions NetUserAdd et NetUserSetGroups déclarées dans le JEDI Headers.

voir cet exemple simple.

program ProjectAddNewUser; 

{$APPTYPE CONSOLE} 

uses 
    JclWin32,//Jedi Library 
    Windows, 
    SysUtils; 


function CreateWinUser(const wServer, wUsername, wPassword, wGroup:WideString): Boolean; 
var 
    Buf  : USER_INFO_2;//Buf for the new user info 
    Err  : NET_API_STATUS; 
    ParmErr : DWORD; 
    GrpUsrInfo: USER_INFO_0;//Buf for the group 
    wDummyStr : WideString; 
begin 
    wDummyStr:=''; 
    FillChar (Buf, SizeOf(USER_INFO_2), 0); 
    with Buf do 
    begin 
    usri2_name  := PWideChar(wUsername); 
    usri2_full_name := PWideChar(wUsername);//You can add a more descriptive name here 
    usri2_password := PWideChar(wPassword); 
    usri2_comment := PWideChar(wDummyStr); 
    usri2_priv  := USER_PRIV_USER; 
    usri2_flags  := UF_SCRIPT OR UF_DONT_EXPIRE_PASSWD; 
    usri2_script_path := PWideChar(wDummyStr); 
    usri2_home_dir := PWideChar(wDummyStr); 
    usri2_acct_expires:= TIMEQ_FOREVER; 
    end; 

    GrpUsrInfo.usri0_name:=PWideChar(wGroup); 

    Err := NetUserAdd(PWideChar(wServer), 1, @Buf, @ParmErr); 
    Result := (Err = NERR_SUCCESS); 

    if Result then //NOw you must set the group for the new user 
    begin 
    Err := NetUserSetGroups(PWideChar(wServer),PWideChar(wGroup),0,@GrpUsrInfo,1); 
    Result := (Err = NERR_SUCCESS); 
    end; 
end; 

begin 

    if CreateWinUser('localhost', 'MyNewUser','ThePassword','MyWindowsGroup') then 
    Writeln('Ok') 
    else 
    Writeln('False'); 

    Readln; 
end. 
+0

merci beaucoup mon ami – Wel

+0

@RRUZ: j'essaye ce code, mais il échoue sur NetUserSetGroups avec l'erreur 2220 (Le nom du groupe n'a pas pu être trouvé). J'essaye de créer un utilisateur avec le groupe "Adminitrators". –

+0

Pour le faire fonctionner avec le groupe 'Administrators' local, j'ai dû changer trois lignes de code. 'GrpUserInfo: USER_INFO_0' est devenu' LOCALGROUP_MEMBERS_INFO_3'. 'GrpUserInfo.usri0_name: = PWideChar (wGroup)' est devenu 'GrpUsrInfo.lgrmi3_domainandname: = PWideChar (wUsername)'. Et 'Err: = NetUserSetGroups (PWideChar (wServer), PWideChar (wGroup), 0, @ GrpUsrInfo, 1)' est devenu 'Err: = NetLocalGroupAddMembers (PWideChar (wServer), PWideChar (wGroup), 3, @GrpUsrInfo, 1)' . –

1

Je pense que l'API que vous appelez besoin est NetUserAdd.

Tout d'abord, vérifiez si Delphi fournit un wrapper pour cet appel. Sinon, vous devrez écrire le vôtre. Si vous ne savez pas comment faire des appels d'API Windows à partir de Delphi, vous avez d'autres recherches à faire.

+0

+1, je ne pouvais pas trouver. J'ai l'impression que Delphi peut appeler ces fonctions directement, en supposant qu'elles correspondent à la convention d'appel correcte ... comme vous je ne sais pas. –

Questions connexes