Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Фев
Сделать авторизацию пользователя в программе
Posted by Chas under Delphi
Но можно ли сделать INputbox с полем ввода стиля password. Просто делаю запрос пароля а отдельную форму делать 1)лень 2) лишний мусор.
GunSmoker
Если устроит условие Windows XP и выше, то есть отличная функа:
function LoginUser(const ACaption, ADescription: String; var AUser, APassword: string; var ASavePassword: Boolean): Boolean;
type
PCredUIInfo = ^TCredUIInfo;
TCredUIInfo = record
cbSize: DWORD;
hwndParent: HWND;
pszMessageText: PChar;
pszCaptionText: PChar;
hbmBanner: HBITMAP;
end;
var
Lib: HMODULE;
CredUIPromptForCredentials: function(pUiInfo: PCredUIInfo; pszTargetName: PChar; pContext: Pointer; dwAuthError: DWORD; pszUserName: PChar; ulUserNameBufferSize: ULONG; pszPassword: PChar; ulPasswordBufferSize: ULONG; var save: BOOL; dwFlags: DWORD): DWORD; stdcall;
CredInfo: TCredUIInfo;
User, Password: String;
Save: BOOL;
const
MAXBUFLEN = 10240; // maximum login and password length in chars
credui = 'credui.dll';
CredUIPromptForCredentialsName = {$IFDEF UNICODE}
'CredUIPromptForCredentialsW'
{$ELSE}
'CredUIPromptForCredentialsA'
{$ENDIF};
CREDUI_FLAGS_INCORRECT_PASSWORD = $00001; // indicates the username is valid, but password is not
CREDUI_FLAGS_DO_NOT_PERSIST = $00002; // Do not show "Save" checkbox, and do not persist credentials
CREDUI_FLAGS_REQUEST_ADMINISTRATOR = $00004; // Populate list box with admin accounts
CREDUI_FLAGS_EXCLUDE_CERTIFICATES = $00008; // do not include certificates in the drop list
CREDUI_FLAGS_REQUIRE_CERTIFICATE = $00010;
CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX = $00040;
CREDUI_FLAGS_ALWAYS_SHOW_UI = $00080;
CREDUI_FLAGS_REQUIRE_SMARTCARD = $00100;
CREDUI_FLAGS_PASSWORD_ONLY_OK = $00200;
CREDUI_FLAGS_VALIDATE_USERNAME = $00400;
CREDUI_FLAGS_COMPLETE_USERNAME = $00800;
CREDUI_FLAGS_PERSIST = $01000; // Do not show "Save" checkbox, but persist credentials anyway
CREDUI_FLAGS_SERVER_CREDENTIAL = $04000;
CREDUI_FLAGS_EXPECT_CONFIRMATION = $20000; // do not persist unless caller later confirms credential via CredUIConfirmCredential() api
CREDUI_FLAGS_GENERIC_CREDENTIALS = $40000; // Credential is a generic credential
CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS = $80000; // Credential has a username as the target
CREDUI_FLAGS_KEEP_USERNAME = $100000; // don't allow the user to change the supplied username
begin
Lib := SafeLoadLibrary(credui);
if Lib <> 0 then
try
CredUIPromptForCredentials := GetProcAddress(Lib, CredUIPromptForCredentialsName);
if Assigned(CredUIPromptForCredentials) then
begin
FillChar(CredInfo, SizeOf(CredInfo), 0);
CredInfo.cbSize := SizeOf(CredInfo);
if Screen.FocusedForm <> nil then
CredInfo.hwndParent := Screen.FocusedForm.Handle
else if Screen.ActiveForm <> nil then
CredInfo.hwndParent := Screen.ActiveForm.Handle
else
CredInfo.hwndParent := 0;
CredInfo.pszCaptionText := PChar(ACaption);
CredInfo.pszMessageText := PChar(ADescription);
User := AUser + #0;
Password := APassword + #0;
Save := ASavePassword;
SetLength(User, MAXBUFLEN);
SetLength(Password, MAXBUFLEN);
case CredUIPromptForCredentials(@CredInfo, nil, nil, 0, PChar(User), MAXBUFLEN, PChar(Password), MAXBUFLEN, Save, CREDUI_FLAGS_ALWAYS_SHOW_UI or CREDUI_FLAGS_DO_NOT_PERSIST or CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX or CREDUI_FLAGS_GENERIC_CREDENTIALS) of
NO_ERROR:
begin
AUser := PChar(User);
APassword := PChar(Password);
ASavePassword := Save;
Result := True;
Exit;
end;
ERROR_CANCELLED:
begin
Result := False;
Exit;
end;
else
raise Exception.Create('CredUIPromptForCredentials failed');
end;
end
else
RaiseLastOSError;
finally
FreeLibrary(Lib);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Login, Password: String;
SavePassword: Boolean;
begin
if not LoginUser('Вход в программу', 'Введите данные вашей учётки:', Login, Password, SavePassword) then
Exit;
if (Login <> 'aaa') and
(Password <> 'bbb') then
raise Exception.Create('Invalid login or password');
// OK!
end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)