Вниз
Скачать: CL | DM;

DLL with ASM + Delphi   Найти похожие ветки 

← →
GeX ©   (2004-07-14 22:39) [0]

В чем моя ошибка ?

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\kernel32.lib
includelib \masm32\lib\user32.lib

.data
AppName db "TestApp",0
WM_KEYBHOOK equ WM_USER + 13

.data?
hHook dd ?
hInstance dd ?
bIsInstalled dd ?

; =================================================
.code

MyHookProc proc uses ebx esi edi nCode:DWORD, wParam:WPARAM, lParam:LPARAM
 .if (nCode == HC_ACTION)
   invoke FindWindow, NULL, addr AppName
   .if (eax != 0)  
     invoke SendMessage, eax, WM_KEYBHOOK, wParam, 0
     invoke CallNextHookEx, hHook, nCode, wParam, lParam
   .endif
 .endif
MyHookProc endp

SetKeyboardHook proc
LOCAL DLLInst : DWORD
LOCAL Dummy[1024] : BYTE
 mov hHook, 0
 invoke GetModuleHandle, ADDR Dummy
 mov DLLInst, eax
 invoke SetWindowsHookEx, WH_KEYBOARD, addr MyHookProc, DLLInst, 0
 mov hHook, eax
 mov bIsInstalled, 1
 ret
SetKeyboardHook endp

RemoveKeyboardHook proc
 mov bIsInstalled, 0
 invoke UnhookWindowsHookEx, hHook
 ret
RemoveKeyboardHook endp

LibMain proc hInst:DWORD, reason:DWORD, unused:DWORD
 .if reason == DLL_PROCESS_DETACH
   .if bIsInstalled == 1
    invoke RemoveKeyboardHook
 .endif
 .elseif reason == DLL_PROCESS_ATTACH
   mov eax, hInst
   mov hInstance, eax
 .endif
 mov eax, TRUE
 ret
LibMain Endp

End LibMain

Hook.def
--------------------------------------
LIBRARY HOOK
EXPORTS SetKeyboardHook
EXPORTS RemoveKeyboardHook

Это все что касаеться библиотеки.
Теперь сама прога...

Hook.pas
--------------------------------------
unit Hook;

interface

procedure SetKeyboardHook; stdcall;
procedure RemoveKeyboardHook; stdcall;

implementation

procedure SetKeyboardHook; external "Hook.dll";
procedure RemoveKeyboardHook; external "Hook.dll";

end.

И при вызове функции SetKeyboardHook вылетакет просто ВСЕ включая
Delphi.

Где я ошибся ?


← →
Opilki_Inside   (2004-07-15 12:48) [1]

а зачем так усложнять себе задачу?
Клавиатурные перехватчики легко пишутся и без использования ассемблера.


← →
GeX ©   (2004-07-15 20:43) [2]

Я это знаю..... Но мне нужен маленький размер..... (не для трояна).

Ладно вроде то что спрашивал исправил.... но нашел еще один баг -
если трэйсит в дельфи программу. То Дельфи вылетает. И еще один заключаеться в том что сообщение программе отправляеться ДВА раза :(



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.019 c
4-1087542518
Тимохов
2004-06-18 11:08
2004.08.01
CreateRemoteThread


4-1087814076
Users
2004-06-21 14:34
2004.08.01
CreateFile для привода CD


14-1089551840
SergP
2004-07-11 17:17
2004.08.01
Блочное копирование данных


4-1087374976
DFF
2004-06-16 12:36
2004.08.01
API : Длинна текста и смена шрифта


9-1080574510
TButton
2004-03-29 19:35
2004.08.01
DasTactics




   Наверх