📄 mainunit.cpp
字号:
/////////////////////////////////////////////////////////////////////////////
// //
// Windows帐户管理系统 //
// 程序作者:林华锋 //
// 创建日期:2001-07-14 //
// 修改日期:2001-11-10 //
// //
/////////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainUnit.h"
#include <lm.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString AcctName;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
bool TForm1::CreateUser(LPWSTR ServerName, LPWSTR UserName, LPWSTR FullName, LPWSTR Comment, LPWSTR Password)
{
NET_API_STATUS NetStatus;
DWORD Error = 0;
/*
USER_INFO_1 UserInfo;
UserInfo.usri1_name = UserName;
UserInfo.usri1_password = Password;
UserInfo.usri1_priv = USER_PRIV_USER;
UserInfo.usri1_home_dir = NULL;
UserInfo.usri1_comment = Comment;
UserInfo.usri1_flags = UF_SCRIPT;
UserInfo.usri1_script_path = NULL;
NetStatus = NetUserAdd(ServerName,1,(LPBYTE)&UserInfo,&Error);
*/
USER_INFO_2 UserInfo;
UserInfo.usri2_name = UserName;
UserInfo.usri2_password = Password;
UserInfo.usri2_priv = USER_PRIV_USER;
UserInfo.usri2_home_dir = NULL;
UserInfo.usri2_comment = Comment;
UserInfo.usri2_flags = UF_SCRIPT;
UserInfo.usri2_script_path = NULL;
UserInfo.usri2_auth_flags = 0;
UserInfo.usri2_full_name = FullName;
UserInfo.usri2_usr_comment = Comment;
UserInfo.usri2_parms = NULL;
UserInfo.usri2_workstations = NULL;
UserInfo.usri2_acct_expires = TIMEQ_FOREVER;
UserInfo.usri2_max_storage = USER_MAXSTORAGE_UNLIMITED;
UserInfo.usri2_logon_hours = NULL;
UserInfo.usri2_logon_server = NULL;
UserInfo.usri2_country_code = 0;
UserInfo.usri2_code_page = 0;
NetStatus = NetUserAdd(ServerName, 2, (LPBYTE)&UserInfo, &Error);
switch (NetStatus)
{
case NERR_Success:
ShowMessage("新建帐户成功!");
break;
case ERROR_ACCESS_DENIED:
ShowMessage("The user does not have access to the requested information!");
break;
case NERR_InvalidComputer :
ShowMessage("The computer name is invalid!");
break;
case NERR_NotPrimary:
ShowMessage("The operation is allowed only on the primary domain controller of the domain!");
break;
case NERR_GroupExists:
ShowMessage("The group already exists!");
break;
case NERR_UserExists:
ShowMessage("The user account already exists!");
break;
case NERR_PasswordTooShort:
ShowMessage("The password is shorter than required!");
break;
default:
ShowMessage("新建帐户失败!");
}
return ((NetStatus == NERR_Success) ? true : false);
}
//---------------------------------------------------------------------------
bool TForm1::DeleteUser(LPWSTR ServerName, LPWSTR UserName)
{
NET_API_STATUS NetStatus;
NetStatus = NetUserDel(ServerName, UserName);
switch (NetStatus)
{
case NERR_Success:
//ShowMessage("删除帐户成功!");
break;
case ERROR_ACCESS_DENIED:
ShowMessage("The user does not have access to the requested information!");
break;
case NERR_InvalidComputer :
ShowMessage("The computer name is invalid!");
break;
case NERR_NotPrimary:
ShowMessage("The operation is allowed only on the primary domain controller of the domain!");
break;
case NERR_UserNotFound:
ShowMessage("The user name could not be found!");
break;
default:
ShowMessage("删除帐户失败!");
}
return ((NetStatus == NERR_Success) ? true : false);
}
//---------------------------------------------------------------------------
bool TForm1::ChangeUserPassword(LPWSTR DomainName,LPWSTR UserName,LPWSTR OldPassword,LPWSTR NewPassword)
{
NET_API_STATUS NetStatus;
NetStatus = NetUserChangePassword(DomainName,UserName,OldPassword,NewPassword);
switch(NetStatus)
{
case NERR_Success:
ShowMessage("修改帐户密码成功!");
break;
case ERROR_ACCESS_DENIED:
ShowMessage("The user does not have access to the requested information!");
break;
case NERR_InvalidComputer:
ShowMessage("The computer name is invalid!");
break;
case NERR_NotPrimary:
ShowMessage("The operation is allowed only on the primary domain controller of the domain!");
break;
case NERR_UserNotFound:
ShowMessage("The user name could not be found!");
break;
case NERR_PasswordTooShort:
ShowMessage("The password is shorter than required!");
break;
default:
ShowMessage("修改帐户密码失败!");
}
return ((NetStatus == NERR_Success)?true:false);
}
//---------------------------------------------------------------------------
DWORD TForm1::FillUsers()
{
PVOID Data;
DWORD Total = 0, i;
TListItem *pItem;
NET_API_STATUS NetStatus;
NET_DISPLAY_USER *UserInfo;
DWORD Level = 1;
DWORD Index = 0;
DWORD EntriesRequested = 1024;
DWORD PreferredMaximumLength = 102400;
NetStatus = NetQueryDisplayInformation(NULL, Level, Index, EntriesRequested, PreferredMaximumLength, &Total, &Data);
if (NetStatus != NERR_Success || Data == NULL)
{
return 0;
}
ListView1->Items->Clear();
UserInfo = (NET_DISPLAY_USER *)Data;
for (i=0; i<Total; i++)
{
pItem = ListView1->Items->Add();
pItem->Caption = UserInfo->usri1_name;
pItem->SubItems->Add(UserInfo->usri1_full_name);
pItem->SubItems->Add(UserInfo->usri1_comment);
pItem->ImageIndex = 0;
UserInfo++;
}
NetApiBufferFree(Data);
return Total;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text = "Copyright (C) 2001 Lcsoft Studio";
StatusBar1->Panels->Items[2]->Text = IntToStr(FillUsers());
MenuReport->Checked = true;
PopMenuReport->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPWSTR tServerName;
LPWSTR tUserName;
LPWSTR tFullName;
LPWSTR tComment;
LPWSTR tPassword;
tServerName = NULL;
if(Trim(NewAcctNameEdit->Text)=="")
{
ShowMessage("帐户名称不能为空!");
NewAcctNameEdit->SetFocus();
return;
}
tUserName = WideString(Trim(NewAcctNameEdit->Text)).Copy();
tFullName = WideString(Trim(NewAcctFullNameEdit->Text)).Copy();
tComment = WideString(Trim(NewAcctCommentEdit->Text)).Copy();
if (Trim(NewAcctPwdMaskEdit->Text)!=Trim(NewAcctPwdConfirmMaskEdit->Text))
{
ShowMessage("密码不匹配!");
return;
}
tPassword = WideString(NewAcctPwdMaskEdit->Text).Copy();
if (CreateUser(tServerName,tUserName,tFullName,tComment,tPassword))
{
StatusBar1->Panels->Items[2]->Text = IntToStr(FillUsers());
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
NewAcctNameEdit->Text = "";
NewAcctFullNameEdit->Text = "";
NewAcctCommentEdit->Text = "";
NewAcctPwdMaskEdit->Text = "";
NewAcctPwdConfirmMaskEdit->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
LPWSTR tDomainName;
LPWSTR tUserName;
LPWSTR tOldPassword;
LPWSTR tNewPassword;
tDomainName = NULL;
tUserName = WideString(Trim(EditAcctNameEdit->Text)).Copy();
tOldPassword = WideString(Trim(EditAcctOldPwdMaskEdit->Text)).Copy();
tNewPassword = WideString(Trim(EditAcctNewPwdMaskEdit->Text)).Copy();
if (Trim(EditAcctNameEdit->Text) == "")
{
ShowMessage("帐户名称不能为空!");
EditAcctNameEdit->SetFocus();
return;
}
if (Trim(EditAcctNewPwdMaskEdit->Text) != Trim(EditAcctPwdConfirmMaskEdit->Text))
{
ShowMessage("密码不匹配!");
return;
}
ChangeUserPassword(tDomainName, tUserName, tOldPassword, tNewPassword);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
EditAcctNameEdit->Text = "";
EditAcctOldPwdMaskEdit->Text = "";
EditAcctNewPwdMaskEdit->Text = "";
EditAcctPwdConfirmMaskEdit->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbRight)
{
POINT MousePos;
GetCursorPos(&MousePos);
PopupMenu1->Popup(MousePos.x, MousePos.y);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1SelectItem(TObject *Sender,
TListItem *Item, bool Selected)
{
if (Selected)
{
AcctName = Item->Caption;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopMenuNewAcctClick(TObject *Sender)
{
PageControl1->ActivePage = NewAcctTabSheet;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopMenuEditAcctClick(TObject *Sender)
{
PageControl1->ActivePage = ChangePwdTabSheet;
EditAcctNameEdit->Text = AcctName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuLargeClick(TObject *Sender)
{
ListView1->ViewStyle = vsIcon;
MenuLarge->Checked = true;
PopMenuLarge->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuSmallClick(TObject *Sender)
{
ListView1->ViewStyle = vsSmallIcon;
MenuSmall->Checked = true;
PopMenuSmall->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuListClick(TObject *Sender)
{
ListView1->ViewStyle = vsList;
MenuList->Checked = true;
PopMenuList->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuReportClick(TObject *Sender)
{
ListView1->ViewStyle = vsReport;
MenuReport->Checked = true;
PopMenuReport->Checked = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
PopMenuEditAcctClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
Panel2->Left = (Width-Panel2->Width) / 2;
Panel2->Top = (NewAcctTabSheet->Height-Panel2->Height) / 2;
Panel3->Left = (Width-Panel3->Width) / 2;
Panel3->Top = (ChangePwdTabSheet->Height-Panel3->Height) / 2;
Panel4->Left = (Width-Panel4->Width) / 2;
Panel4->Top = (InfoTabSheet->Height-Panel4->Height) / 2;
StatusBar1->Panels->Items[0]->Width = Width / 2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopMenuDelAcctClick(TObject *Sender)
{
if (!AcctName.IsEmpty())
{
LPWSTR tServerName;
tServerName = NULL;
if(MessageBox(NULL, ("你要删除" + AcctName + "?").c_str(), "警告:", MB_YESNO + MB_ICONWARNING) == IDYES)
{
if(DeleteUser(tServerName,WideString(AcctName).Copy()))
{
StatusBar1->Panels->Items[2]->Text = IntToStr(FillUsers());
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PopMenuInfoClick(TObject *Sender)
{
PageControl1->ActivePage=InfoTabSheet;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -