Загрузка...

Help make the code unique.

Thread in C/C++ created by Leonid13123 May 21, 2023. 220 views

  1. Leonid13123
    Leonid13123 Topic starter May 21, 2023 1 Nov 2, 2018
    Пожалуйста сделайте код немного уникальным, что бы препод не выстегнул за чужой код. Код так же дольше остаться на C.

    НИЖЕ КОД ПОЛНОСТЬЮ РАБОЧИЙ ДОПОЛНИТЕЛЬНО ДЕЛАТЬ НИЧЕГО НЕ НАДО, ПРОСТО НЕМНОГО СДЕЛАТЬ УНИКАЛЬНЫМ.

    Код на C
    C
    #include <windows.h>
    #include <stdio.h>
    typedef int(*Function)(char*); // указатель на тип функции

    // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
    char szClassName[] = "CLASS"; // имя класса окна
    char szTitle[] = "WindowsDir"; // заголовок окна
    HWND hWnd; // дескриптор окна
    HANDLE hThread; // дескриптор потока
    char buf[256]; // строка для возвращенной информации


    //ФУНКЦИЯ ПОТОКА
    DWORD WINAPI ThreadFunc(void*)
    {
    // загружаем динамическую библиотеку Dll.dll и получаем дескриптор
    HMODULE hdll = LoadLibraryA("dllmain.dll");
    if (hdll == NULL)// если получить дескриптор не удалось
    {
    //Выводим сообщение об ошибке
    MessageBox(NULL, "Файл dllmain.dll не найден", "Ошибка", MB_ICONERROR);
    ExitProcess(0);
    return 0;
    }
    // получаем адрес нашей функции
    Function addrfunc = (Function)GetProcAddress(hdll, "GetWindowsDir");
    addrfunc(buf); // вызываем функцию из динамической библиотеки
    FreeLibrary(hdll); // выгружаем библиотеку
    return 1;
    }


    //ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
    LRESULT CALLBACK WndProc
    (HWND hwnd, // дескриптор окна
    UINT umsg, // сообщение
    WPARAM wparam, // эти параметры
    LPARAM lparam) // используются некоторыми сообщениями
    {
    HDC hdc;// контекст устройства
    PAINTSTRUCT ps;
    DWORD IdThread; // идентификатор потока

    switch (umsg)
    {
    case WM_PAINT:
    hdc = BeginPaint(hwnd, &ps); // инициализация контекста устройства
    TextOut(hdc, 20, 20, buf, strlen(buf)); // строкa buf
    EndPaint(hwnd, &ps);
    break;

    case WM_CREATE:
    // создаем поток
    hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &IdThread);
    WaitForSingleObject(hThread, INFINITE); // вечное ожидание завершение потока
    CloseHandle(hThread); // закрытие дескриптора
    break;

    case WM_KEYDOWN:
    switch (wparam)
    {
    case 0x000d://Enter
    case 0x001b://Esc
    PostQuitMessage(0); break;
    default: break;
    }
    break;

    case WM_DESTROY:
    PostQuitMessage(NULL); // Завершение работы
    break;
    default:
    return DefWindowProc(hwnd, umsg, wparam, lparam);
    }
    return 0;
    }

    //Создание окна и обработка сообщений
    int WINAPI WinMain(HINSTANCE hThisInst, // дескриптор текущего процесса
    HINSTANCE hPrevInst, // дескриптор предыдущего процесса
    LPSTR str, // указатель на командную строку
    int nWinMode) // используется для функции отображения окна
    {
    MSG msg;// информация о сообщении
    WNDCLASS wcl; // атрибуты окна
    // заполняем структуру wcl
    wcl.hInstance = hThisInst; // дескриптор процесса
    wcl.lpszClassName = szClassName; // имя класса
    wcl.lpfnWndProc = WndProc; // указатель на функцию окна
    wcl.style = CS_HREDRAW | CS_VREDRAW; // стиль окна
    wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); // иконка
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW); // курсор
    wcl.lpszMenuName = NULL; // меню нет
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // цвет фона ( закраска белой кистью)
    RegisterClass(&wcl); // регистрируем класс
    hWnd = CreateWindow // создаем окно
    (szClassName, // имя класса
    szTitle, // строка заголовка
    WS_CAPTION, // стиль окна
    80, // верхний левый угол окна и длинна с шириной
    50,
    300,
    100,
    NULL, // дескриптор родительского окна
    NULL, // дескриптор меню
    hThisInst,
    NULL);

    ShowWindow(hWnd, nWinMode);
    UpdateWindow(hWnd);
    while (GetMessage(&msg, NULL, 0, 0)) // сообщения от windows
    {
    TranslateMessage(&msg); // ввод с клавиатуры
    DispatchMessage(&msg); // пересылает сообщение функции окна
    }
    return 1;
    }

    void main()
    {
    HMODULE hInstance = GetModuleHandle(NULL); // получаем дескриптор процесса
    LPSTR str = GetCommandLine(); // получаем имя текущей программы
    WinMain(hInstance, NULL, str, SW_SHOWDEFAULT);
    }
    Вариант задания.[IMG]
    Примечание к заданию
    [IMG]
     
  2. abibasman
    abibasman May 21, 2023 7 Nov 10, 2019
    CHAGPT BAI
    The post was merged to previous May 21, 2023
    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    #include <stdio.h>

    typedef int (*Func)(char*);

    char szClassName[] = "CLASS";
    char szTitle[] = "WindowsDir";
    HWND hWnd;
    HANDLE hThread;
    char buffer[256];

    DWORD WINAPI ThreadFunction(void*) {
    HMODULE hdll = LoadLibraryA("dllmain.dll");
    if (hdll == NULL) {
    MessageBox(NULL, "Файл dllmain.dll не найден", "Ошибка", MB_ICONERROR);
    ExitProcess(0);
    return 0;
    }

    Func addrfunc = (Func)GetProcAddress(hdll, "GetWindowsDir");
    addrfunc(buffer);
    FreeLibrary(hdll);
    return 1;
    }

    LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam) {
    HDC hdc;
    PAINTSTRUCT ps;
    DWORD IdThread;

    switch (umsg) {
    case WM_PAINT:
    hdc = BeginPaint(hwnd, &ps);
    TextOut(hdc, 20, 20, buffer, strlen(buffer));
    EndPaint(hwnd, &ps);
    break;
    case WM_CREATE:
    hThread = CreateThread(NULL, 0, ThreadFunction, NULL, 0, &IdThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    break;
    case WM_KEYDOWN:
    switch (wparam) {
    case 0x000d:
    case 0x001b:
    PostQuitMessage(0);
    break;
    default:
    break;
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(NULL);
    break;
    default:
    return DefWindowProc(hwnd, umsg, wparam, lparam);
    }
    return 0;
    }

    int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR str, int nWinMode) {
    MSG msg;
    WNDCLASS wcl;

    wcl.hInstance = hThisInst;
    wcl.lpszClassName = szClassName;
    wcl.lpfnWndProc = WndProc;
    wcl.style = CS_HREDRAW | CS_VREDRAW;
    wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcl.lpszMenuName = NULL;
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    RegisterClass(&wcl);
    hWnd = CreateWindow(szClassName, szTitle, WS_CAPTION, 80, 50, 300, 100,NULL, NULL, hThisInst,NULL);

    ShowWindow(hWnd, nWinMode);
    UpdateWindow(hWnd);

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

    return EXIT_SUCCESS;
    }

    void main() {
    HMODULE hInstance = GetModuleHandle(NULL);
    LPSTR str = GetCommandLine();
    WinMain(hInstance, NULL, str, SW_SHOWDEFAULT);
    }

    забил в BAI , проверяй сам
     
  3. Джустер
    Джустер May 21, 2023 1139 Oct 26, 2019
     
  4. Daemon
    Daemon May 21, 2023 1680 Jan 8, 2021
    Это не C++, а C
     
Loading...
Top