Задать вопрос
@Dendan1002

Кто может подсказать как дописать скрипт в C++?

Нужно ограничить доступ детей к пк , но необходимо чтобы он был постоянно включен и были запущены нужные программы .
Есть идея сделать прозрачное без рамочное окно виндовс размером на весь экран ,у брать у него кнопки управления (закрыть,свернуть) убрать любую возможность зарыть окно даже через панель управления кроме как с помощь комбинации клавиш к примеру шифт +клавиша 1 или через подключения юсб шлешки на которой записан key.txt в котором находиться строчка" убрать окно". Вот то что уже получилось, но что-то идет не так с проверкой флешки и могу прикрутить недопуск закрытия окна через панель управления

#include <windows.h>
#include <iostream>
#include <fstream>
#include <string> // Заголовок для std::string

#define ID_TIMER 1

// Глобальные переменные
HINSTANCE hInst;
HWND hWnd;

// Прототипы функций
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void ShowWindowCentered(HWND hWnd, int width, int height);

// Вычисление размеров окна по всему экрану
void GetFullScreenRect(RECT& rect) {
    // Получаем размеры рабочего пространства без панели задач
    SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
}

int main() {
    // Регистрируем класс окна
    const wchar_t CLASS_NAME[] = L"MyWindowClass"; // Широкое название класса

    WNDCLASS wc = {};
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Получаем размеры окна
    RECT screenRect;
    GetFullScreenRect(screenRect);

    // Создаем окно
    hWnd = CreateWindowEx(
        WS_EX_TOPMOST | WS_EX_TOOLWINDOW, // Свойства окна
        CLASS_NAME, // Имя класса
        L"Еще не время", // Заголовок окна (широкая строка)
        WS_POPUP | WS_VISIBLE, // Стиль окна
        screenRect.left, screenRect.top, // Позиция окна (левый верхний угол)
        screenRect.right - screenRect.left, // Ширина окна
        screenRect.bottom - screenRect.top, // Высота окна
        NULL, NULL, hInst, NULL // Дескрипторы
    );

    // Устанавливаем таймер на 1000 мс (1 секунда)
    SetTimer(hWnd, ID_TIMER, 1000, NULL);

    // Запускаем цикл обработки сообщений
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

void ShowWindowCentered(HWND hWnd, int width, int height) {
    // Удаляем эту функцию, так как окно теперь полноэкранное
}

// Обработка сообщений окна
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        if (GetAsyncKeyState(VK_CONTROL) & 0x8000 &&
            GetAsyncKeyState(VK_SHIFT) & 0x8000 &&
            wParam == VK_RETURN) {
            DestroyWindow(hwnd);
        }
        break;

    case WM_TIMER: // Обработка таймера
    {
        std::wstring path = L"D:\\key.txt"; // Укажите букву диска вашей флешки
        WIN32_FIND_DATA findFileData;

        HANDLE hFind = FindFirstFile(path.c_str(), &findFileData); // Используйте wide string
        if (hFind != INVALID_HANDLE_VALUE) {
            std::wifstream infile(path); // Используйте wifstream для чтения широких строк
            std::wstring line;
            while (std::getline(infile, line)) {
                if (line == L"убрать окно") { // Используйте широкие строки для сравнения
                    DestroyWindow(hwnd); // Закрыть окно, если текст найден
                }
            }
            FindClose(hFind);
        }
    }
    break;

    case WM_PAINT: // Обработка перерисовки окна
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);

        // Отрисовка текста
        const wchar_t* text = L"Еще не время";

        RECT rect;
        GetClientRect(hwnd, &rect); // Получаем размеры области клиента
        DrawText(hdc, text, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        EndPaint(hwnd, &ps);
    }
    break;

    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы