在網上下載了一個Windows 自動登錄器,覺得挺好玩的。發現它是修改注冊表實現自動登錄。自己也就試試寫一個玩玩。
程序界面:
實現原理,修改注冊表鍵值
=========================================================================================================
在運行中輸入:regedit 打開注冊表編輯器:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon主鍵
要求:指定的自動登陸帳號至少是user級別用戶;
前三項鍵值是必須要有的:
----autoadminlogon,鍵值為1,用于設置是否可以自動登陸;鍵值為0,則反之 ----defaultusername:鍵值為自動登陸默認的用戶名; ----defaultpassword: 鍵值為自動登陸用戶的密碼; ----defaultdomainname:鍵值為自動登陸的計算機名稱或者登陸網絡的域名; ----ForceAutoLogon的字符串值,并將這個值設為1,這樣系統即便是在注銷之后也會自動登錄到指定的賬戶; ----在默認情況下,在啟動時可以按住Shift鍵來阻止自動登錄,要消除Shift鍵對自動登錄的影響,可以添加一個名為IgnoreShiftOverride的字符串值,并將該值設為1; ----添加AutoLogonCount的DWORD值,可以設置希望自動登錄的次數
=========================================================================================================
初始化代碼 在 OnInitDialog() 末尾(return TRUE; 前)加入:
// 獲取當前用戶名
char User[MAX_PATH];
DWORD Size = MAX_PATH;
if (GetUserName(User,&Size)) // 獲取用戶名
SetDlgItemText(IDC_Name , User); // 顯示在編輯框中
else
SetDlgItemText(IDC_Name , "自動獲取用戶名失敗,請輸入用戶名");
HKEY RegKey;
char temp[MAX_PATH]; // 獲取鍵值存放緩沖區
DWORD dwtype; // 鍵值類型
DWORD sl = MAX_PATH; // 緩沖區大小 if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0, KEY_ALL_ACCESS, &RegKey))
{
RegQueryValueEx(RegKey,"AutoAdminLogon",NULL,&dwtype,(LPBYTE)temp,&sl);
if (strcmp("1",(char *)temp) == 0) // 判斷 AutoAdminLogon 是否為 1
SetDlgItemText(IDC_ZT,"溫馨提示:檢測到系統已經是自動登錄狀態!");
else
SetDlgItemText(IDC_ZT,"系統尚未設置自動登錄!");
}========================================================================================================= 修改注冊表函數:
// 參數:設置、取消,注銷生效,屏蔽Shift鍵,用戶名,密碼:返回 1 為失敗 0 為成功
int Reg(int i, int zhux, int Shift, char User[], char Password[])
{
HKEY RegKey;
char AutoUser[] = "DefaultUserName"; // 用戶名
char AutoPass[] = "Defaultpassword"; // 密碼
char Auto[] = "AutoAdminLogon"; // 1 自動登錄
char Autozhux[] = "ForceAutoLogon"; // 注銷時有效
char AutoShift[] = "IgnoreShiftOverride"; // 消除Shift鍵對自動登錄的影響 if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",0, KEY_ALL_ACCESS, &RegKey))
return 1; if (i) // 設置
{
char T='1'; RegSetValueEx(RegKey, AutoUser, 0, REG_SZ, (LPBYTE)User, strlen(User)); // 設置用戶名
RegSetValueEx(RegKey, AutoPass, 0, REG_SZ, (LPBYTE)Password, strlen(Password)); // 設置密碼
if (!zhux) // 如果沒有勾選 注銷無效復選框 則設置注銷有效
RegSetValueEx(RegKey, Autozhux, 0, REG_SZ, (const BYTE *)&T, 1);
else
RegDeleteValue(RegKey, Autozhux);
if (!Shift) // 如果沒有勾選 不屏蔽Shift 鍵 則設置屏蔽Shift鍵
RegSetValueEx(RegKey, AutoShift, 0, REG_SZ, (const BYTE *)&T, 1);
else
RegDeleteValue(RegKey, AutoShift);
if (RegSetValueEx(RegKey, Auto, 0, REG_SZ, (const BYTE *)&T, 1)) // 只判斷關鍵的注冊表值就行啦
return 1;
}
else // 取消
{
RegDeleteValue(RegKey, AutoUser); // 刪除用戶名鍵值
RegDeleteValue(RegKey, AutoPass); // 刪除密碼鍵值
RegDeleteValue(RegKey, Autozhux); // 刪除注銷有效鍵值
RegDeleteValue(RegKey, AutoShift); // 刪除屏蔽Shift 鍵值
if (RegDeleteValue(RegKey, Auto)) // 刪除自動登錄
return 1;
}
RegCloseKey(RegKey);
return 0;
}========================================================================================================= 【自動登錄】按鍵觸發代碼: void CWindowsDlg::OnAutoAdd()
{
// TODO: Add your control notification handler code here
char User[MAX_PATH]; // 存儲 用戶名 編輯框中數據的緩沖區
char Password[MAX_PATH]; // 存儲 密碼 編輯框中數據的緩沖區 GetDlgItemText(IDC_Name, User, MAX_PATH); // 獲取 用戶名 編輯框中的緩沖區
GetDlgItemText(IDC_Password, Password, MAX_PATH); // 獲取 密碼 編輯框中的緩沖區 CButton *pButton; // 定義對象 pButton = (CButton *)GetDlgItem(IDC_ZX); //獲得指定IDcheckbox對象引用,并轉換為CButton對象
int zhux = pButton->GetCheck();//獲得checkbox的點擊狀態,值只有0 1 2三種狀態,點擊后為非0值 pButton = (CButton *)GetDlgItem(IDC_Shift);
int Shift = pButton->GetCheck();
char temp[50] = "設置 Windows 自動登錄"; // 狀態顯示 if (!Reg(1,zhux,Shift,User,Password))
{
strcat(temp,"成功!");
if (!zhux) // 如果沒有勾選 注銷無效
strcat(temp," 注銷時有效!");
if (!Shift) // 如果沒有勾選 不屏蔽Shift 鍵
strcat(temp," 屏蔽Shift 鍵的影響!");
SetDlgItemText(IDC_ZT, temp); // 顯示狀態
MessageBox("設置 Windows 自動登錄成功! ", "OK", MB_ICONASTERISK | MB_SYSTEMMODAL);
}
else
{
SetDlgItemText(IDC_ZT, "設置 Windows 自動登錄失敗!");
MessageBox("設置 Windows 自動登錄失敗!可能是由于安全軟件的攔截或權限原因! ", "ERROR", MB_ICONWARNING | MB_SYSTEMMODAL);
}
} ========================================================================================================= 【取消自動】按鍵觸發代碼: void CWindowsDlg::OnAutoDel()
{
// TODO: Add your control notification handler code here
if (!Reg(0,NULL,NULL,NULL,NULL))
{
SetDlgItemText(IDC_ZT, "取消 Windows 自動登錄成功!");
MessageBox("取消 Windows 自動登錄成功! ", "OK", MB_ICONASTERISK | MB_SYSTEMMODAL);
}
else
{
SetDlgItemText(IDC_ZT, "取消 Windows 自動登錄失敗!");
MessageBox("取消 Windows 自動登錄失敗! 可能由于安全軟件的攔截 或 早就取消 Windows自動登錄! ", "ERROR",MB_ICONWARNING | MB_SYSTEMMODAL);
}
}
|