Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
1

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

11.01.2018, 23:16. Показов 1024. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2018, 23:16
Ответы с готовыми решениями:

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

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

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

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

6
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
13.01.2018, 20:29  [ТС] 2
Неужели никто ничего не посоветует?
0
7 / 7 / 4
Регистрация: 10.05.2015
Сообщений: 55
17.01.2018, 15:25 3
1. События скролла - это что? просто скролл мышью или скролл в окне?
2. Тут можно попробовать поставить немного другой хук SetWinEventHook и настроить на отлов вот такого вот события EVENT_OBJECT_CONTENTSCROLLED - срабатывание скроллбара в окне
Либо нужно фильтровать только по wParam== WM_MOUSEWHEEL
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
19.01.2018, 21:59  [ТС] 4
Нужен скролл окна, тоесть отследить пролистывание в чужом окне.
Но похоже я не инжектировал длл. Так как хук на скрол моего окна работает нормально, а чужого никак...
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
25.01.2018, 01:21  [ТС] 5
Был неверно сделанный инжект.
Переделал процедуру инжекта, теперь ДЛЛ находится в памяти нужного приложения.
Подскажите как можно обмениваться данными с инжектированной ДЛЛ и вызывать ее функции.
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
29.01.2018, 01:32  [ТС] 6
Подскажите, как вытащить значения скроллов в обработчике хука?
Видимо я что-то делаю не так, так как структура SCROLLINFO возвращает какую-то ерунду.
hook code == MSGF_SCROLLBAR
CWPSTRUCT->message == HTHSCROLL либо HTVSCROLL
0
152 / 119 / 11
Регистрация: 16.08.2013
Сообщений: 576
31.01.2018, 23:52  [ТС] 7
Подскажите, что я делаю не так. В ддл обрабатываю сообщения от скролла. При манипуляции со скроллами сообщение ловится, но значения 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2018, 23:52

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru