Newsgroup: it.comp.programmare.win32
Titolo: Loggers Dll Parametri in Cppbuilder e quant'altro...

Volevo provare a crere un keylogger, ora che ho imparato qualcosina sui
messaggi, ma non c'è modo di riuscirci in c++Builder... cioè il keylogger lo
faccio, ma la dll me la devo fare in delphi o in visual c++ perchè la
funzione apposita SetWindowsHookEx mi da l'errore
[C++ Error] UnitDll.cpp(70): E2034 Cannot convert 'long (__stdcall
*)(int,unsigned int,long)' to 'int (__stdcall *)()'
e poi ovviamente:
[C++ Error] UnitDll.cpp(70): E2342 Type mismatch in parameter 'lpfn' (wanted
'int (__stdcall *)()', got 'long (__stdcall *)(int,unsigned int,long)')
ora vi faccio vedere a quale funzione mi rifersico, in c++Builder uso quella
che funziona in Visual C++.
in Visual C++ faccio (per catturare la tastiera):
  handhook = SetWindowsHookEx(WH_KEYBOARD, hcall, (HINSTANCE) hMod, 0);
dove hcall è ovviamente
  LRESULT CALLBACK hcall(int nCode, WPARAM wParam, LPARAM lParam);
(Funziona)
Se la uso in c++Builder mi dice che hcall non va bene perchè ha dei
parametri. Ma perchè visual c++ lo compila? Quale è lo standard? E si può
castizzare in qualche modo su C++Builder? Perchè io ho provato (int
(__stdcall*)()) hcall, ma intanto c++Builder vedere LRESULT come un long, e
poi comunque quando la uso mi da eccezioni dappertutto sull'indirizzo 0.
in Delphi faccio pressochè la stessa cosa:
  handhook := SetWindowsHookEx(WH_KEYBOARD, @hcall,
GetModuleHandle('EKeylog.dll'),  0);
dove hcall è
  function hcall(Code: Integer; wp: WPARAM; lp: LPARAM): LRESULT; stdcall;
(Funziona)
Mi aiutate?
Ciao...
Ely

 
[...]
Sembra che C++Builder definisca il prototipo della funzione 
SetWindowsHookEx alla "vecchia" maniera, senza forzare i controlli di 
tipo. 
In questo modo HOOKPROC (che è il tipo corretto della tua funzione) 
deve essere castato a FARPROC (generico puntatore a funzione callback). 
Questo non dovrebbe comportare problemi in fase di esecuzione poichè il 
passaggio dei parametri viene effettuato nel modo corretto (3 parametri 
e valore di ritorno long).
Per utilizzare i controlli in fase di compilazione (soluzione migliore 
rispetto al cast "brutale") devi definire il simbolo STRICT del 
preprocessore (Visual C++ lo fa di default dalla versione 6). 
Inserendo una #define STRICT all'inizio del file "incriminato" oppure 
(meglio) impostando la corrispondente opzione di compilazione (che non 
conosco non essendo un utente di C++ Builder) il codice dovrebbe essere 
compilato regolarmente.
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 Questo non dovrebbe comportare problemi in fase di esecuzione poichč il


 ma non fuori.
L'handle che ti ha tornato la SetWindowsHook lo devi memorizzare e 
passare in qualche modo alla funzione hook.
Se vuoi installare un hook globale (che catturi i tasti per tutte le 
applicazioni) devi mettere la tua funzione in una DLL e trovare un modo 
di passare l'hook alla DLL in modo che sia condiviso tra le varie 
istanze (ad esempio con un area di memoria condivisa).
Avevo iniziato a scrivere un hook che permetteva di muovere il mouse 
usando la tastiera quando avevo una caviglia ingessata e non potevo 
raggiungere comodamente il sorcio. 
Però sono guarito prima dalla distorsione che dalla pigrizia cronica e 
i sorgenti (C++) di quel progetto mezzo finito sono da qualche parte 
sul mio PC di casa...
Prova a dare un'occhiata a questo keylogger che era stato postato da 
Andrea Laforgia su questo ng:
http://www.geocities.com/andrealaforgia/keylogger.zip
P.S. quando rispondi a un messaggio evita di riportare tutto il 
messsaggio a cui rispondi e, se devi riportarne delle parti, mettile 
_prima_ dei tuoi commenti.
Quoting: 
http://www.uwasa.fi/~ts/http/quote.html
