| Autor | Správa |
feromakovi
 Užívateľ
 Založený: 12.05.2009 Príspevky: 33 Bydlisko: Bánovce nad Bebravou
 | Zaslal: Ut 07.07.09 11:58 |   |
Zdravím,
pls hľadal som na nete ale nemôžem sa dopátrať ako by som mohol vytvoriť užívateľský účet v delphi. Problém, že chcem spraviť program:
spustím ho a budem tam mať edity na meno a na heslo potom nejaký tooglebox na typ účtu...no len ja chcem ten program spraviť sám a mám len problém že neviem ako taký účet vytvoriť. proste nejaké príkazy alebo čo. inak vedel by som vytvoriť účet aj s použitím príkazového riadku...resp by som si z editov pobral čo potrebujem a vytvoril si súbor.bat...a bolo by najlepšie keby sa ten súbor automaticky sám otvoril...ale asi nie len tak v delphi..proste aby som naimitoval dvojklik alebo enter..a aby sa otvoril prirodzene...
No ale aj tak by so to najradšej mal tou prvou možnosťou vytvoriť účet priamo cez delphi...
Ďakujem veľmi pekne. |
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA | |
     |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1049
 | Zaslal: Ut 07.07.09 12:26 |   |
Vytvor si tento unit:
| kód: | unit CriaNTUser;
{
Cria usuario de NT
Copyright 1997 por Mauro Sant' Anna
Todos os direitos reservados
}
interface
uses
Windows;
// Create user
function CriaUsuario(
const XUsuario, XSenha, XComentario, XServidor: string): integer;
// Add to group
function AdicionaAoGrupo(const XServidor, XUsuario, XGrupo: string): integer;
// Remove from group
function EliminaDoGrupo(const XServidor, XUsuario, XGrupo: string): integer;
function ErrToMsg(const Err: integer): string;
implementation
type
T_USER_INFO_1 = record
usri1_name: PWideChar;
usri1_password: PWideChar;
usri1_password_age: integer;
usri1_priv: integer;
usri1_home_dir: PWideChar;
usri1_comment: PWideChar;
usri1_flags: integer;
usri1_script_path: PWideChar;
end;
PInteger = ^Integer;
function NetUserAdd(
servername: PWideChar;
level: integer;
const buf: T_USER_INFO_1;
parm_err: PInteger
): integer; stdcall; external 'netapi32.dll';
function NetGroupAddUser(servername: PWideChar;
GroupName: PWideChar;
username: PWideChar): integer; stdcall; external 'netapi32.dll';
function NetGroupDelUser(servername: PWideChar;
GroupName: PWideChar;
username: PWideChar): integer; stdcall; external 'netapi32.dll';
const
USER_PRIV_USER = 1;
UF_SCRIPT = 1;
NERR_BASE = 2100;
NERR_InvalidComputer = NERR_BASE + 251;
NERR_NotPrimary = NERR_BASE + 126;
NERR_GroupExists = NERR_BASE + 123;
NERR_UserExists = NERR_BASE + 124;
NERR_PasswordTooShort = NERR_BASE + 145;
NERR_SpeGroupOp = NERR_BASE+134; // The operation is not allowed on specified special groups, which are user groups, admin groups, local groups, or guest groups.
NERR_UserNotFound = NERR_BASE+121;// The user name could not be found.
NERR_GroupNotFound = NERR_BASE+120; // The group name could not be found.
NERR_UserNotInGroup = NERR_BASE+137; // The user does not belong to this group.
cTamStr = 256;
procedure StrToMB(const S: string; Buffer: PWideChar);
begin
fillchar(Buffer^, cTamStr * 2, 0);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Pointer(S), length(S), Buffer, cTamStr);
end;
function ErrToMsg(const Err: integer): string;
begin
Result := 'Ok';
case Err of
ERROR_ACCESS_DENIED: Result := 'Access Denied';
NERR_InvalidComputer: Result := 'InvalidComputer';
NERR_NotPrimary: Result := 'NotPrimary';
NERR_GroupExists: Result := 'GroupExists';
NERR_UserExists: Result := 'UserExists';
NERR_PasswordTooShort: Result := 'PasswordTooShort';
NERR_SpeGroupOp: Result := 'The operation is not allowed on specified special groups, which are user groups, admin groups, local groups, or guest groups.';
NERR_UserNotFound: Result := 'The user name could not be found.';
NERR_GroupNotFound: Result := 'The group name could not be found.';
NERR_UserNotInGroup: Result := 'The user does not belong to this group.';
end;
end;
function CriaUsuario(
const XUsuario, XSenha, XComentario, XServidor: string): integer;
var
U: T_USER_INFO_1;
Err, Ret: integer;
Usuario, Senha, Comentario, Servidor: array[0..cTamStr] of widechar;
procedure Converte;
begin
StrToMB(XUsuario, Usuario);
StrToMB(XSenha, Senha);
StrToMB(XComentario, Comentario);
StrToMB(XServidor, Servidor);
end;
begin
Converte;
with U do
begin
usri1_name := Usuario;
usri1_password := Senha;
usri1_priv := USER_PRIV_USER;
usri1_home_dir := nil;
usri1_comment := 'Teste de cadastramento';
usri1_flags := UF_SCRIPT;
usri1_script_path := NIL;
end;
Ret := NetUserAdd(Servidor, 1, U, @Err);
Result := Ret;
end;
function AdicionaAoGrupo(const XServidor, XUsuario, XGrupo: string): integer;
var
Usuario, Servidor, Grupo: array[0..cTamStr] of widechar;
begin
StrToMB(XUsuario, Usuario);
StrToMB(XServidor, Servidor);
StrToMB(XGrupo, Grupo);
Result := NetGroupAddUser(Servidor, Grupo, Usuario);
end;
function EliminaDoGrupo(const XServidor, XUsuario, XGrupo: string): integer;
var
Usuario, Servidor, Grupo: array[0..cTamStr] of widechar;
begin
StrToMB(XUsuario, Usuario);
StrToMB(XServidor, Servidor);
StrToMB(XGrupo, Grupo);
Result := NetGroupDelUser(Servidor, Grupo, Usuario);
end;
end. |
a pomocou zadefinovaných funkcií môžeš pracovať s užívateľskými účtami.
Btw, ak by si predsa len zvolil riešenie pomocou *.bat súboru, nemusíš imitovať dvojklik, existujú funkcie, ako WinExec alebo ShellExecute (pri použití tejto pripoj unit ShellAPI), ktoré otvoria nejaký súbor. |
| |
   |
 |
feromakovi
 Užívateľ
 Založený: 12.05.2009 Príspevky: 33 Bydlisko: Bánovce nad Bebravou
 | Zaslal: Ut 07.07.09 12:58 |   |
fakt ti pekne ďakujem ale vieš keď ja som len taký odvar zatiaľ...poteboval by som vysvetliť že ako vytvorím ten unit??...ak myslíš že to je ako vytvorenie knižnice v pascale tak to viem...ale moc tomu nerozumiem...
a ešte by som potreboval aj nejaké vysvetlivky k tým funkciám...lebo som z nich trochu vymletý...a všimol som si tam aj nejaké procedúry...a tie nepotebujem?? alebo ako??
vopred sa ospravvedlňujem za svoju debilitu.  |
_________________ SE C905 8GB
Gaming Notebook MSI GX720X-027SK P8400 4GB 320GB VGA | |
     |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1049
 | Zaslal: St 08.07.09 10:21 |   |
Áno, unit v Delphi je z hľadiska využitia to isté, ako unit (knižnica) v pascale. V menu Delhi vyberieš File | New | Unit. Potom ho uložíš (vytvorí sa iba *.pas súbor) a môžeš ho zatvoriť.
Potom už dáš klasicky vytvoriť nový projekt do ktorého musíš pridať tento unit. To urobíš takto: v menu vyber Project | Add to Project a potom vyhľadaj cestu, kam si ho uložil. Teraz Delphi vie, kde je uložený tento unit, ale ešte ho treba pripojiť, ako každý iný používaný unit a teda pridať ho do uses:
| kód: | uses
Windows, SysUtils, MojUnit; // tu je viac unitov, dal som to len pre ukážku |
A teraz k tvojmu problému s účtami. Ja sám presne neviem, ako fungujú tieto funkcie, našiel som to na nete (preto tá španielčina). Ale dá sa vychádzať z API funkií, ktoré sa tu používajú. Nájdi si help súbor WIN32.HLP, ktorý sa nachádza štandardne v "C:\Program Files\Common Files\Borland Shared\MSHelp" a v tomto helpe si nájdi tieto funkcie: NetUserAdd, NetGroupAddUser, NetGroupDelUser. Po pochopení ich parametrov pochopíš aj funkcie tohto unitu.
(Napríklad, funkcia pre vytvorenie nového účtu by mohla vyzerať takto:
| kód: | | CriaUsuario('MojUcet', 'TotoJeHeslo', 'Komentar, ktory funkcia ani nepouzije :)', PChar(nil)); | ) |
| |
   |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|