Задача работы с кодом.

Исправить:
Сохранение пароля было в C:\Windows\Logs и файл назывался logs#.txt

Добавить:
Что бы если человек хотел изменить пароль на новый он открыл программу там должна быть отдельная кнопка которая откроет другое окно где можно было бы изменить пароль но с подтверждением нынешнего пароля.


#include <windows.h>
#include <string>
#include <fstream>
#include <iostream>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void LockWindows();
void SavePassword(const std::string& password);

bool CheckPassword(const std::string& enteredPassword)
{
	std::ifstream file("C:\password.txt");
	if (file.is_open())
	{
		std::string savedPassword;
		if (std::getline(file, savedPassword))
		{
			file.close();
			return (enteredPassword == savedPassword);
		}
		else
		{
			file.close();
			return false;
		}
	}

	return false;
}

void LockWindows()
{
	LockWorkStation();
}

void SavePassword(const std::string& password)
{
	std::ofstream file("C:\password.txt");
	if (file.is_open())
	{
		file << password;
		file.close();
	}
	else
	{
		MessageBox(NULL, TEXT("Не удалось сохранить пароль!"), TEXT("Ошибка"), MB_OK | MB_ICONERROR);
	}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	const wchar_t CLASS_NAME[] = L"PasswordWindowClass";

	WNDCLASS wc = {};
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = CLASS_NAME;

	RegisterClass(&wc);

	HWND hwnd = CreateWindowEx(
		0,
		CLASS_NAME,
		L"Ввод пароля",
		WS_OVERLAPPEDWINDOW,

		CW_USEDEFAULT, CW_USEDEFAULT, 300, 150,

		NULL,
		NULL,
		hInstance,
		NULL
	);

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

	ShowWindow(hwnd, nCmdShow);

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

	std::string password;

	if (CheckPassword(password))
	{
		// Правильный пароль, продолжаем запуск операционной системы
	}
	else
	{
		// Неправильный пароль, выключаем компьютер
		MessageBox(NULL, TEXT("Неправильный пароль!Компьютер будет выключен."), TEXT("Ошибка"), MB_OK | MB_ICONERROR);
		ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
	}

	return static_cast<int>(msg.wParam);
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static std::string password;

	switch (uMsg)
	{
	case WM_CREATE:
	{
		HWND hEdit = CreateWindowEx(
			0,
			TEXT("edit"),
			TEXT(""),
			WS_CHILD | WS_VISIBLE | WS_BORDER | ES_PASSWORD,
			10, 10, 200, 25, hwnd, reinterpret_cast<HMENU>(0), nullptr, nullptr
		);

		HWND hButton = CreateWindowEx(
			0,
			TEXT("button"),
			TEXT("Ввести"),
			WS_CHILD | WS_VISIBLE,
			10, 40, 100, 25, hwnd, reinterpret_cast<HMENU>(1), nullptr, nullptr
		);
		// Отображение окна при запуске программы
		ShowWindow(hwnd, SW_SHOWNORMAL);
		break;
	}
	case WM_COMMAND:
	{
		if (LOWORD(wParam) == 1)
		{
			HWND hEdit = GetDlgItem(hwnd, 0);
			int length = GetWindowTextLengthA(hEdit);
			password.resize(length);
			GetWindowTextA(hEdit, &password[0], length + 1);

			MessageBox(hwnd, TEXT("Пароль сохранен."), TEXT("Пароль сохранен"), MB_OK | MB_ICONINFORMATION);

			SavePassword(password);

			LockWindows();

			DestroyWindow(hwnd);
			break;
		}
		break;
	}
	case WM_CLOSE:
	{
		MessageBox(hwnd, TEXT("Введите пароль."), TEXT("Ошибка"), MB_OK | MB_ICONERROR);
		break;
	}
	case WM_DESTROY:
	{
		PostQuitMessage(0);
		break;
	}
	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}

	return 0;
}