Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хуки, Адрес оконной процедуры для окна 
:(
    Опции темы
Llucas
Дата 17.4.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 29.11.2006
Где: Одесса

Репутация: нет
Всего: нет



Добрый вечер, никак не могу разобраться как выполнить поставленную задачу: Разработать хук который бы в разрабатываемой программе перехватывал сообщения типа активация какого-либо окна и выводил у себя аАдрес оконной процедуры для окна, над которым нажата левая кнопка мыши.

есть наработки:

Это собственно dll_hook.asm
Код


386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

HOOK_CBT equ WM_USER ; для создания пользовательского сообщения

.data
hInstance dd 0

.data?
hHook dd ?
hWnd dd ?

.code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    push hInst
    pop hInstance
       mov  eax,TRUE
       ret
DllEntry Endp

HookProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
    invoke CallNextHookEx,hHook,nCode,wParam,lParam
    mov edx,lParam
              .if nCode==HCBT_ACTIVATE
                   mov eax,wParam
            invoke PostMessage,hWnd,HOOK_CBT,eax,0 ; передаем 0 
             .endif
            assume edx:nothing
;            xor eax,eax
            ret
HookProc endp

InstallHook proc hwnd:DWORD
    push hwnd
    pop hWnd

window_ok:
    invoke SetWindowsHookEx,WH_CBT,addr HookProc,hInstance,NULL ; ставим hook
                                                        ; типа WH_CBT для системы        
    mov hHook,eax
    ret 
InstallHook endp

UninstallHook proc
    invoke UnhookWindowsHookEx,hHook
    ret
UninstallHook endp

End DllEntry


А это оконное приложение:


Код

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib dll_hook.lib

InstallHook proto :DWORD
UninstallHook proto
HookProc proto :DWORD,:DWORD,:DWORD
DlgFunc proto :DWORD,:DWORD,:DWORD,:DWORD

HOOK_CBT    equ    WM_USER

.data
dialog_name   db "DIAL",0
hInstance dd ?
buffer db 128 dup(?)
text_buffer db 'activated window',0

.code
start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,hInstance,addr dialog_name,NULL,addr DlgFunc,NULL
    invoke ExitProcess,NULL

DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

    .if uMsg==WM_CLOSE
                              invoke UninstallHook
        invoke EndDialog,hDlg,NULL    

              .elseif uMsg == WM_INITDIALOG
                 invoke InstallHook,hDlg
                              .if eax == 0
                                 invoke ExitProcess,0
                               .endif

    .elseif uMsg==HOOK_CBT
;        invoke GetClassName,wParam,addr class_name_buffer,128
;        invoke GetWindowText,wParam,addr window_text_buffer,128        
invoke dw2hex, wParam,addr buffer
        invoke    SendDlgItemMessage,    \
            hDlg,            \
            1,        \
            LB_ADDSTRING,        \
            NULL,            \
                        addr buffer

        invoke    SendDlgItemMessage,    \
            hDlg,            \
            1,        \
            LB_ADDSTRING,        \
            NULL,            \
                        addr text_buffer
    .else
        mov eax,FALSE
        ret
    .endif
    mov eax,TRUE
    ret
DlgFunc endp

end start




Буду очень признателен. Спасибо.
PM MAIL WWW   Вверх
dumb
Дата 18.4.2007, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Код

...
    .elseif uMsg==HOOK_CBT
;        invoke GetClassName,wParam,addr class_name_buffer,128
;        invoke GetWindowText,wParam,addr window_text_buffer,128        
invoke GetWindowLong, wParam, GWL_WNDPROC
mov edx, eax
invoke dw2hex, edx, addr buffer
        invoke    SendDlgItemMessage,    \
...

PM MAIL   Вверх
Llucas
Дата 20.4.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 29.11.2006
Где: Одесса

Репутация: нет
Всего: нет



Спасибо помогло...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.