⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainunit.cpp

📁 用于管理Windows NT,Windows 2000用户的程序
💻 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 + -