Hook sans dll, c'est possible , mais comment ?

Résolu
jace1975
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
- 3 nov. 2005 à 20:34
jace1975
Messages postés
81
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
12 octobre 2007
- 5 nov. 2005 à 15:34
salut à tous

je travaille actuellement sur une application, pour me permettre notamment de killer immédiatement le processus en cours via un raccourci clavier (genre shift F4 et le jeu auquel vous jouez se ferme immédiatement juste quand le boss rentre dans le bureau )

Je m'inspire en fait d'une application qu'un collègue m'as passé et qui se revèle indispensable très rapidement(Si vous souhaitez l'avoir demander moi par mail) , auquel je voudrais rajouter quelques fonctionnalités (que j'ai dejà dvlpé mais il me manque le principal )
Deux problèmes pour le développement :

- J'aimerais, à l'instar de l'appli que je cite briévement, me passer de toutes dll (après de longues recherche sur internet je n'ai pas réussi à trouver le début d'une piste pour m'en passer). si quelqu'un a une idée je suis preneur

- je n'arrive pas à récupérer le processus de l'application en cours, la procédure que j'utilise me renvoie systématiquement mon programme à cause je pense du hook et de son implémentation dans mon pgm. Si quelqu'un c'est faire ça, qu'il n'hésites pas à répondre , je galère depuis un bout de temps.

Thxs par avance

5 réponses

WhiteHippo
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
4 nov. 2005 à 00:15
Après quelques tests rapides, voilà ce à quoi j'ai abouti :

type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT ;
KBDLLHOOKSTRUCT = record
vkCode : DWORD ;
scanCode : DWORD ;
flags : DWORD ;
time : DWORD ;
dwExtraInfo : PULONG ;
end ;


var
HookClavier : HHOOK ;


function MonGestionnaireClavier(code: Integer; w: WPARAM; l: LPARAM):LRESULT; stdcall ;
var
infos : PKBDLLHOOKSTRUCT ;
begin
infos := PKBDLLHOOKSTRUCT(L) ;
if ( Code>=0) then
begin
// ici ton code de gestion du clavier
// Par exemple : Form1.Memo1.Text := inttostr(infos^.vkCode);
end ;
Result:= CallNextHookEx(HookClavier, Code, w, l);
end ;


function InstallationDuHook : HHOOK ;
const
WH_KEYBOARD_LL = 13 ;
begin
Result := SetWindowsHookEx ( WH_KEYBOARD_LL, @MonGestionnaireClavier, GetModuleHandle(NIL), 0 ) ;
end ;


procedure RetraitDuHook ( Hook : HHOOK ) ;
begin
UnhookWindowsHookEx( Hook ) ;
end ;


// Exemple d'appel pour l'installation du hook :
// HookClavier := InstallationDuHook ;
//
// Exemple d'appel pour le retrait du hook :
// RetraitDuHook ( HookClavier ) ;


Ceci n'est qu'une ébauche, facilement extensible en fonction de tes besoins.

N.B. La structure KBDLLHOOKSTRUCT est détaillée ici :

=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/kbdllhookstruct.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/kbdllhookstruct.asp

Cordialement.



<HR>



Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
3