Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738

Хук на скролл чужого окна

11.01.2018, 23:16. Показов 1855. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи.
Необходимо отследить события от скролла в чужом окне.
Есть dll в которой устанавливается хук для выбранного окна. Если ставлю хук на WH_MOUSE, то все события перехватываются, но если ставлю хук на WH_MSGFILTER, но никаких событий не происходит.
Подскажите что я упустил, как мне проверить правильность установки хука?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <windows.h>
#include "HookSpyDll.h"
 
#pragma data_seg (".shared")
HWND    g_hWnd = 0;     // control containing the password
HHOOK   g_hHook = 0;
HHOOK   g_hMouseHook = 0;
UINT    WM_HOOKSPY = 0;
UINT    WM_MOUSEHOOKSPY = 0;
char    g_szPassword[128] = { '\0' };
#pragma data_seg ()
 
#pragma comment(linker,"/SECTION:.shared,RWS") 
 
 
//-------------------------------------------------------
// global variables (unshared!)
//
HINSTANCE hDll;
 
//-------------------------------------------------------
// DllMain
//
BOOL APIENTRY DllMain(HANDLE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    hDll = (HINSTANCE)hModule;
    return TRUE;
}
 
 
//-------------------------------------------------------
// HookProc
// Notice: - executed by the "remote" instance of "HookSpy.dll";
//         - unhooks itself right after it gets the password;
//
#define pCW ((CWPSTRUCT*)lParam)
 
 
LRESULT MouseHookProc(
    int code,       // hook code
    WPARAM wParam,  // virtual-key code
    LPARAM lParam   // keystroke-message information
)
{
    UINT Temp = pCW->message;
    if (Temp == WM_MOUSEHOOKSPY) {
        ::MessageBeep(MB_OK);
        //::SendMessage(g_hWnd, WM_GETTEXT, 128, (LPARAM)g_szPassword);
        ::PostMessage(g_hWnd, WM_GETTEXT, 128, (LPARAM)g_szPassword);
        ::UnhookWindowsHookEx(g_hMouseHook);
    }
    else {
        //::MessageBeep(MB_OK);
        //::SendMessage(g_hWnd, WM_GETTEXT, 128, lParam);
        //::UnhookWindowsHookEx(g_hMouseHook);
        ::PostMessage(g_hWnd, WM_GETTEXT, 128, lParam);
    }
    //OutputDebugString("lParam = " + lParam);
 
    return ::CallNextHookEx(g_hMouseHook, code, wParam, lParam);
}
//==========================================================
 
int SetMSGFILTERHook(HWND hWnd, LPSTR lpString)
{
    g_hWnd = hWnd;
 
    g_hMouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseHookProc, hDll, GetWindowThreadProcessId(hWnd, NULL));
    if (g_hMouseHook == NULL) {
        return 0;
    }
 
    if (WM_MOUSEHOOKSPY == NULL) WM_MOUSEHOOKSPY = ::RegisterWindowMessage("WM_MOUSEHOOK");
 
    // By the time SendMessage returns
    SendMessage(hWnd, WM_MOUSEHOOKSPY, 0, 0);
 
 
    return NULL;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2018, 23:16
Ответы с готовыми решениями:

WH_KEYBOARD_LL Хук, русские буквы из чужого окна
Всем привет! Перехватываю нажатия клавиш... но к сожалению не получается перехватить буквы с разной раскладкой =( если печатаю в...

Хук окна
Скажите пожалуйста какой хук устанавливать и какое событие этого хука отслеживать что бы корректно перехватить создание окна чужой...

Прозрачность чужого окна
Если не ошибаюсь на API есть возможность изменить прозрачность окна стороннего приложения. Как это можно реализовать на C# ? Заранее...

6
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
13.01.2018, 20:29  [ТС]
Неужели никто ничего не посоветует?
0
7 / 7 / 4
Регистрация: 10.05.2015
Сообщений: 55
17.01.2018, 15:25
1. События скролла - это что? просто скролл мышью или скролл в окне?
2. Тут можно попробовать поставить немного другой хук SetWinEventHook и настроить на отлов вот такого вот события EVENT_OBJECT_CONTENTSCROLLED - срабатывание скроллбара в окне
Либо нужно фильтровать только по wParam== WM_MOUSEWHEEL
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
19.01.2018, 21:59  [ТС]
Нужен скролл окна, тоесть отследить пролистывание в чужом окне.
Но похоже я не инжектировал длл. Так как хук на скрол моего окна работает нормально, а чужого никак...
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
25.01.2018, 01:21  [ТС]
Был неверно сделанный инжект.
Переделал процедуру инжекта, теперь ДЛЛ находится в памяти нужного приложения.
Подскажите как можно обмениваться данными с инжектированной ДЛЛ и вызывать ее функции.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
29.01.2018, 01:32  [ТС]
Подскажите, как вытащить значения скроллов в обработчике хука?
Видимо я что-то делаю не так, так как структура SCROLLINFO возвращает какую-то ерунду.
hook code == MSGF_SCROLLBAR
CWPSTRUCT->message == HTHSCROLL либо HTVSCROLL
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
31.01.2018, 23:52  [ТС]
Подскажите, что я делаю не так. В ддл обрабатываю сообщения от скролла. При манипуляции со скроллами сообщение ловится, но значения nPos всегда хаотичные. Подозреваю что неправильно получаю структуру SCROLLINFO, но как именно неправильно ума не приложу. Ниже код ловушки из длл.
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
LRESULT ScrollHookProc(int code, WPARAM wParam, LPARAM lParam )
{
    if (code < 0)
    {
        return CallNextHookEx(g_hHook, code, wParam, lParam);
    }
    
    if (code == MSGF_SCROLLBAR)
    {
        UINT Temp = pCW->message;
 
        SCROLLINFO *si = (SCROLLINFO*)lParam;
        int nPos = si->nPos;
 
        wchar_t buffer[256];
        wsprintfW(buffer, L"%d", nPos);
 
        if (Temp == SB_HORZ)
        {
            MessageBoxW(NULL, buffer, L"DllMain HSCROLL", MB_OK);
        }
        else if (Temp == SB_VERT)
        {
            MessageBoxW(NULL, buffer, L"DllMain VSCROLL", MB_OK);
        }
    }
    return ::CallNextHookEx(g_hMouseHook, code, wParam, lParam);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2018, 23:52
Помогаю со студенческими работами здесь

Handle чужого окна
Всем привет. Проблема в следующем: Есть окно посторонней программы, на ней расположено 2 поля для ввода текста (возможно не edit) и...

Закрытие чужого окна
Код: #include &lt;windows.h&gt; # include &lt;vcl.h&gt; #pragma hdrstop # include &lt;Mmsystem.h&gt; HWND MainWnd; ; LRESULT CALLBACK...

Хук создания окна
сам хук я установил public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) это функция хука по каким параметрам и...

Хук, скрытие окна
установил хук на окно. заметил следующее. используя функцию ShowWindows если я хочу задать стиль отличный от SW_HIDE то всё проходит. а...

Обрезка части чужого окна
Как из чужого окна взять какую-то часть. Ну, к примеру в Google Chrome. Взять часть панели которая показывает страницы. Возможно ли...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru