Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
Olejik7
10 / 10 / 6
Регистрация: 17.02.2014
Сообщений: 58
#1

WH_DEBUG в SetWindowsHookEx не срабатывает - C++ WinAPI

10.01.2017, 21:53. Просмотров 196. Ответов 0
Метки нет (Все метки)

Код в DLL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include "stdafx.h"
    #pragma data_seg(".hdata") // секция в памяти общая для всех процессов
    HINSTANCE hi = NULL; // эта переменная может изменяться любым поэтому здесь не должно быть ничего лишнего
    #pragma data_seg() // конец секции
    #pragma comment(linker, "/section:.hdata,rws") // даем права этой секции
    HHOOK hKeyHook = NULL;
    BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if (!hi) // запоминаем запустивший хэндл(наша DLL) толко первый раз, чтобы он небыл переписан на новый
        hi = hModule;
    return TRUE;
}
 
extern "C" __declspec(dllexport) LRESULT CALLBACK DebugProc(int nCode, WPARAM wParam, LPARAM lParam) // вызывается при нажатии или отпускании клавиши
{
    if (nCode == HC_ACTION && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) { // нам нужно только нажатие
        printf("Замечен кейлогер - ");
    }
    return CallNextHookEx(hKeyHook, nCode, wParam, lParam);     // обработали передаем дальше
}
extern "C" __declspec(dllexport) int SetKeyboardHook(void)
{
    hKeyHook = SetWindowsHookEx(WH_DEBUG, &DebugProc, hi, 0);
    return 1;
}
    // конец DLL
Код программы, вызывающей DLL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <locale>
    #include <windows.h>
    
    INT main() {
        setlocale(LC_ALL, "russian");
    HOOKPROC hookfunc;
    LPWSTR name = L"dllmain.dll";
    HMODULE hDLL = LoadLibrary(name);
    hookfunc = (HOOKPROC)GetProcAddress(hDLL, "DebugProc");
    hook = SetWindowsHookExW(WH_DEBUG, hookfunc, LoadLibrary(name), 0);
    while (1) {
    }
        system("pause");
        ExitProcess(0);
    }
Хук из DLL почему-то не срабатывает, хотя должен быть. SetHook() возвращает все как надо, ошибок нет. Почему хук не ставится в DLL? Делал всё по примеру(http://uinc.ru/articles/zametki/001.shtml) (естественно, заменяя нужные моменты). Как нужно изменить код, чтобы хук ставился и отлавливал все WH_KEYBOARD(используется WH_DEBUG и структура PDEBUGHOOKINFO)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2017, 21:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос WH_DEBUG в SetWindowsHookEx не срабатывает (C++ WinAPI):

функция SetWindowsHookEx - C++ WinAPI
Написал небольшую прогу для теса функции: #include &quot;stdafx.h&quot; #include &quot;Keylog.h&quot; MSG msg; std::string str; LRESULT...

SetWindowsHookEx и WM_CREATE - C++ WinAPI
Доброе утро. Необходимо отлавливать создание окон по их заголовкам. Есть файл config.cfg, в котором находится список с заголовками окон...

SetWindowsHookEx + Firefox - C++ WinAPI
Ставлю Hook на Firefox DWORD dwProcessID = 0, AA; DWORD dwThreadID = GetWindowThreadProcessId((HWND)0x1708B4, &amp;dwProcessID);//там...

SetWindowsHookEx - чем вызвать? - C++ WinAPI
сабж. есть программа, перехват осуществляется функцией указанной в сабже. каким образом можно вызывать её? keybd/mouse_event не...

Назначение третьего параметра в SetWindowsHookEx - C++ WinAPI
Создаю хук в консольном приложении, что передать в 3 аргументе функции (должен указатель на DLL) HHOOK hook =...

Изъезженная тема про SetWindowsHookEx и WH_JOURNALPLAYBACK/WH_JOURNALRECORD - C++ WinAPI
Привет всем. Я хочу сделать макрос, считывающий сообщения какого-либо приложения и потом эти сообщения воспроизводящий для этого же...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2017, 21:53
Привет! Вот еще темы с ответами:

SetWindowsHookEx - Visual C++
HOOKPROC hookproc; HHOOK hhook; HINSTANCE lib; lib = LoadLibrary(L&quot;mydll.dll&quot;); // библиотека с KeyboardProc; hookproc =...

SetWindowsHookEx в классе - Delphi
Добрый день. Необходимо глобально перехватывать нажатия клавиш клавиатуры. Задача реализуется без проблем через SetWindowsHookEx, однако...

Что за функция SetWindowsHookEx? - Delphi
Делфи кейлоггер. SetWindowsHookEx поясните простыми словами что это такое и с чем его едят?

Необьявленный идентификатор в SetWindowsHookEx - C++
#include &lt;windows.h&gt; int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { MSG msg; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.