mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010
-
14 avril 2007 à 17:13
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010
-
4 mai 2007 à 20:10
bonjours,
je voulais savoir si le hook clavier fonctionne normalement sur n'importe quelles applications, que ce soit un jeu ou un programme de traitement de texte....etc.
Bref est-ce universel
Je pose cette question car j'ai créer un programme qui émule certaine touches du clavier spécialement pour des jeux vidéo. Ceci me permet d'utiliser un joystick de ma fabrication qui se branche sur le port série. Il fonctionne parfaitement avec un de mes jeux mais pas avec l'autre. POURQUOI
C'est cette ligne de code précisément qui remplit la fonction d'émulation:
keybd_event((strtoint(label11.caption )) ,0,1,0); // le label contient le code touche.
Avant de poser une telle question, il aurait mieux valu que tu prennes la peine de te demander comment fonctionne un hook et quel est son principe : voir google entre autre.
En tapant simplement hook clavier sur google, on lit cela :
"BeLZeL.Free.Fr - Home | Langage C | Hook Clavier Global ...
Ce programme intercepte toutes les touches du clavier sur lesquelles vous tapez, quelle que soit l'application (d'où sa globalité). ...
belzel.free.fr/hook/index.html - 4k - En cache - Pages similaires"
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010 15 avril 2007 à 01:34
j'ai fait une recherche sur google avant de poser la question. c'est ce que je fait systématiquement avant de poser une question.
mais mes recherches ne m'ont pas aider a trouver la solution (s'il y en a une)c'est pourquoi je demande sur ce forum.
Quand tu tapes Hook sous google, tu le vois associer à Keylogger : donc je te laisse soin de trouver la réponse à ta question car elle me semble évidente
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 20 avril 2007 à 18:42
Salut,
Je crois pas que ça marche pour les jeux utilisant DirectInput (C'est à dire la majorité des jeux récents).
Je n'ai jamais fait de hook clavier.
Par contre, j'ai d'éjà essayé spy++, un utilitaire de Visual Studio qui
capture les messages de Windows. Et il était manifeste qu'il avait bien
du mal à récupérer des messages intéressant de la part d'une appli
utilisant DirectInput... Et il serait logique que DirectInput
courcircuite le traitement habituel des messges pour accélérer le
traitement. Donc...
Vous n’avez pas trouvé la réponse que vous recherchez ?
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010 21 avril 2007 à 10:29
bonjour,
Hé bien à moi l'explication ne me semble pas évidente. Je ne voit pas ce qu'un enregistreur de touche vient faire là dedans! Et pourtant c'est pas faute d'avoir cherché.
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010 27 avril 2007 à 19:12
salut RT15, quand je disait: "Hé bien à moi l'explication ne me semble pas évidente. Je ne voit pas
ce qu'un enregistreur de touche vient faire là dedans! Et pourtant
c'est pas faute d'avoir cherché." ça n'était pas destiné a ta reponse sur DirectInput qui est trés clair mais a franky.... ki trouve que la solution a mon probléme est évidente (avis que je suis loin de partagé).
Oupss tu es sur d'avoir cherché ? je ne pense pas.
un keylogger est tout simplement un hook clavier.
tout message windows est intercepté par un hook clavier de ce fait ca marche pour toute les applications.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 28 avril 2007 à 15:49
On est pas du tout d'accord francki lol.
Je te propose un rendez vous dans une ruelle sombre. Au bazooka, ça te va ?
Pourquoi MS se serait embèté à faire un DirectInput si c'était pour que ça fasse comme le win32 ?
J'ai fait les essais via ce source (tronqué, mais c'est la partie DirectInput):
(Header DX : http://www.clootie.ru/delphi/download_dx92.html)
Faut passer DirectInput un handle de fenêtre plein écran pour que ça bloque (Encore que la mienne se prend un Direct3D en plus dans les dents).
Mais bon, c'est un plutôt très lourd pour un petit éssai, je te l'accorde...
type TInputDevice = (IND_None, IND_KeyBoard, IND_Mouse, IND_Joystick);
type TInputDescription = record
uDevice: TInputDevice;
nKey: Integer;
end;
function EXzde_Input_IsActionPressed(const nActionNum: Integer): Tsup_Result; stdcall;
function EXzde_Input_IsActionDown(const nActionNum: Integer): Tsup_Result; stdcall;
function Input_OnResetDevice(const hDC: Integer; const sIniFile: String): Tsup_Result;
function Input_OnMove(const hWindow: Integer): Tsup_Result;
function Input_OnLostDevice(): Tsup_Result;
function GetNextKeyOrButtonDown(const hDC: Integer; var nKeyOrButtonIndex: Integer; var uDevice: TInputDevice): Tsup_Result;
var
fuDirectInput: IDirectInput; // Objet principal
fuDirectInputKeyBoard: IDirectInputDevice; // Device du clavier
fuDirectInputMouse: IDirectInputDevice; // Device de la souris
fAnKeyboardState: array[0..255] of Byte; // L'état du clavier
fAnKeyPressed: array[1..10] of Integer; // Touches appuyées
fnNumberOfKeyPressed: Cardinal; // Nombre de touches appuyées
fuMouseState: DIMOUSESTATE2; // L'etat de la souris
fAnMouseButtonPressed: array[1..10] of Integer; // Nombre d'évènements souris
fnNumberOfMouseButtonPressed: Cardinal; // Nombre d'évènements souris
fAuKeyMap: array of TInputDescription; // Les actions et leurs boutons
implementation
//______________________________________________________________________________
// Renvoie vrai si la touche ou le bouton à été appuyé puis relaché.
function EXzde_Input_IsActionPressed(const nActionNum: Integer): Tsup_Result; stdcall;
var
nI: Integer;
begin
Result:= SUP_RES_False;
if fAuKeyMap[nActionNum].uDevice = IND_KeyBoard then
begin
for nI:= 1 to fnNumberOfKeyPressed do
if fAnKeyPressed[nI] = fAuKeyMap[nActionNum].nKey then
begin
Result:= SUP_RES_True;
Exit;
end;
end
else if fAuKeyMap[nActionNum].uDevice = IND_Mouse then
begin
if fAuKeyMap[nActionNum].nKey < 8 then
begin
for nI:= 1 to fnNumberOfMouseButtonPressed do
if fAnMouseButtonPressed[nI] = fAuKeyMap[nActionNum].nKey then
begin
Result:= SUP_RES_True;
Exit;
end;
end
else
begin
if (fAuKeyMap[nActionNum].nKey = 8) and (fuMouseState.lZ > 0) then Result:= SUP_RES_True
else if (fAuKeyMap[nActionNum].nKey = 9) and (fuMouseState.lZ < 0) then Result:= SUP_RES_True;
end;
end
else
begin
end;
end;
//______________________________________________________________________________
// Renvoie vrai si la touche ou le bouton est actuellement appuyé.
function EXzde_Input_IsActionDown(const nActionNum: Integer): Tsup_Result; stdcall;
begin
Result:= SUP_RES_False;
if fAuKeyMap[nActionNum].uDevice = IND_KeyBoard then
begin
if (fAnKeyboardState[fAuKeyMap[nActionNum].nKey] and $80) <> 0 then
Result:= SUP_RES_True;
end
else if fAuKeyMap[nActionNum].uDevice = IND_Mouse then
begin
if (fAuKeyMap[nActionNum].nKey < 8) and ((fuMouseState.rgbButtons[fAuKeyMap[nActionNum].nKey] and $80) <> 0) then
Result:= SUP_RES_True;
end
else
begin
end;
end;
//______________________________________________________________________________
// Initialisation de DirectInput.
function Input_OnResetDevice(const hDC: Integer; const sIniFile: String): Tsup_Result;
var
uDeviceDWORDProperty: DIPROPDWORD; // Pour modifier les options
uIni: TIniFile; // Chargement de la config
nDevice: Integer; // Device de l'action
nI: integer;
begin
// Création de l'objet principal
DirectInput8Create(GetModuleHandle('EX_ZZ3DEngine.dll'), DIRECTINPUT_VERSION, IID_IDirectInput8, fuDirectInput, nil);
// Préparation de l'enregistrement qui vat permettre de modifier la taille des buffers
with uDeviceDWORDProperty do
begin
dwData:= 10;
diph.dwSize:= SizeOf(DIPROPDWORD);
diph.dwHeaderSize:= SizeOf(DIPROPHEADER);
diph.dwObj:= 0;
diph.dwHow:= DIPH_DEVICE;
end;
// Device du clavier
fuDirectInput.CreateDevice(GUID_SysKeyboard, fuDirectInputKeyBoard, nil);
fuDirectInputKeyBoard.SetDataFormat(c_dfDIKeyboard);
fuDirectInputKeyBoard.SetCooperativeLevel(hDC, DISCL_FOREGROUND or DISCL_EXCLUSIVE);
fuDirectInputKeyBoard.SetProperty(DIPROP_BUFFERSIZE, uDeviceDWORDProperty.diph);
fuDirectInputKeyBoard.Acquire;
// Device de la souris
fuDirectInput.CreateDevice(GUID_SysMouse, fuDirectInputMouse, nil);
fuDirectInputMouse.SetDataFormat(c_dfDIMouse2);
fuDirectInputMouse.SetCooperativeLevel(hDC, DISCL_FOREGROUND or DISCL_EXCLUSIVE);
fuDirectInputMouse.SetProperty(DIPROP_BUFFERSIZE, uDeviceDWORDProperty.diph);
fuDirectInputMouse.Acquire;
////////////////////////////////////////////////////////////////////////////////
// TODO: Création du device du joystick
////////////////////////////////////////////////////////////////////////////////
// Initialisation des infos sur les états
ZeroMemory(@fAnKeyboardState, SizeOf(fAnKeyboardState));
fnNumberOfKeyPressed:= 0;
ZeroMemory(@fuMouseState, SizeOf(fuMouseState));
fnNumberOfMouseButtonPressed:= 0;
////////////////////////////////////////////////////////////////////////////////
// TODO: Initialisation de l'état du jostick
////////////////////////////////////////////////////////////////////////////////
// Chargement des touches associées aux évènements
SetLength(fAuKeyMap, 0);
nI:= 0;
uIni:= TIniFile.Create(sIniFile);
try
// Tant que l'on trouve des actions
while uIni.ReadString('Actions', IntToStr(nI), '') <> '' do
begin
SetLength(fAuKeyMap, Length(fAuKeyMap) + 1);
// Récupération du device
nDevice:= uIni.ReadInteger('DeviceOfAction', IntToStr(nI), 0);
if (nDevice < 1) or (nDevice > 3) then
begin
fAuKeyMap[nI].uDevice:= IND_None;
fAuKeyMap[nI].nKey:= 0;
end
else
begin
// Le device étant OK, on passe à la vérification des touches
fAuKeyMap[nI].uDevice:= TInputDevice(nDevice);
fAuKeyMap[nI].nKey:= uIni.ReadInteger('KeyOfAction', IntToStr(nI), -1);
if (fAuKeyMap[nI].nKey < 0) or
((fAuKeyMap[nI].uDevice = IND_KeyBoard) and (fAuKeyMap[nI].nKey > 255)) or
((fAuKeyMap[nI].uDevice = IND_Mouse) and (fAuKeyMap[nI].nKey > 9)) or
((fAuKeyMap[nI].uDevice = IND_Joystick) and (fAuKeyMap[nI].nKey > 127)) then
begin
fAuKeyMap[nI].uDevice:= IND_None;
fAuKeyMap[nI].nKey:= 0;
end
end;
// Passage à l'action suivante
Inc(nI);
end;
finally
uIni.Free;
end;
Result:= SUP_RES_Ok;
end;
//______________________________________________________________________________
// Destruction de DirectInput.
function Input_OnLostDevice(): Tsup_Result;
begin
////////////////////////////////////////////////////////////////////////////////
// TODO: Libération du device du joystick
////////////////////////////////////////////////////////////////////////////////
if Assigned(fuDirectInputMouse) then
fuDirectInputMouse.Unacquire;
fuDirectInputMouse:= nil;
if Assigned(fuDirectInputKeyBoard) then
fuDirectInputKeyBoard.Unacquire;
fuDirectInputKeyBoard:= nil;
fuDirectInput:= nil;
Result:= SUP_RES_Ok;
end;
//______________________________________________________________________________
// Récupération des évènements utilisateur.
function Input_OnMove(const hWindow: Integer): Tsup_Result;
var
uEventBuffer: array[1..10] of DIDEVICEOBJECTDATA; // Récupération des évènements
nI: Integer;
begin
// Vérification que l'on est sur la bonne fenêtre
if GetForegroundWindow <> hWindow then
begin
fuDirectInputMouse.Unacquire;
fuDirectInputKeyBoard.Unacquire;
Result:= SUP_RES_Ok;
Exit;
end;
// Récupération de l'état de la souris
if fuDirectInputMouse.GetDeviceState(SizeOf(fuMouseState), @fuMouseState) = DIERR_INPUTLOST then
begin
ZeroMemory(@fuMouseState, SizeOf(fuMouseState));
fuDirectInputMouse.Acquire;
end;
// Récupération d'un éventuel évènement souris
fnNumberOfMouseButtonPressed:= 10;
if fuDirectInputMouse.GetDeviceData(SizeOf(DIDEVICEOBJECTDATA), @uEventBuffer, fnNumberOfMouseButtonPressed, 0) = DIERR_INPUTLOST then
begin
fnNumberOfMouseButtonPressed:= 0;
fuDirectInputMouse.Acquire;
end
else
begin
for nI:= 1 to fnNumberOfMouseButtonPressed do
begin
fAnMouseButtonPressed[nI]:= -1;
if uEventBuffer[nI].dwOfs >= DIMOFS_BUTTON0 then
if (uEventBuffer[nI].dwData and $80) = 0 then
fAnMouseButtonPressed[nI]:= uEventBuffer[nI].dwOfs - DIMOFS_BUTTON0;
end;
end;
// Récupération de l'état du clavier
if fuDirectInputKeyBoard.GetDeviceState(SizeOf(fAnKeyboardState), @fAnKeyboardState) = DIERR_INPUTLOST then
begin
ZeroMemory(@fAnKeyboardState, SizeOf(fAnKeyboardState));
fuDirectInputKeyBoard.Acquire;
end;
// Récupération d'un éventuel évènement clavier
fnNumberOfKeyPressed:= 10;
if fuDirectInputKeyBoard.GetDeviceData(SizeOf(DIDEVICEOBJECTDATA), @uEventBuffer, fnNumberOfKeyPressed, 0) = DIERR_INPUTLOST then
begin
fnNumberOfKeyPressed:= 0;
fuDirectInputKeyBoard.Acquire;
end
else
begin
for nI:= 1 to fnNumberOfKeyPressed do
if (uEventBuffer[nI].dwData and $80) = 0 then
fAnKeyPressed[nI]:= uEventBuffer[nI].dwOfs
else
fAnKeyPressed[nI]:= -1;
end;
////////////////////////////////////////////////////////////////////////////////
// TODO: Mise à jour de l'état du joystick
////////////////////////////////////////////////////////////////////////////////
Result:= SUP_RES_Ok;
end;
//______________________________________________________________________________
// Récupère le numéro et le device de la touche que l'utilisateur va appuyer.
function GetNextKeyOrButtonDown(const hDC: Integer; var nKeyOrButtonIndex: Integer; var uDevice: TInputDevice): Tsup_Result;
var
uTempDirectInput: IDirectInput; // Objet principal
uTempDirectInputKeyBoard: IDirectInputDevice; // Device du clavier
uTempDirectInputMouse: IDirectInputDevice; // Device de la souris
AnTempKeyboardState: array[0..255] of Byte; // L'état du clavier
uTempMouseState: DIMOUSESTATE2; // L'etat de la souris
bContinue: WordBool; // Encore aucune touche d'appuyée
nI: Integer;
begin
// Création de l'objet principal
DirectInput8Create(GetModuleHandle('EX_ZZ3DEngine.dll'), DIRECTINPUT_VERSION, IID_IDirectInput8, uTempDirectInput, nil);
// Création du device du clavier
uTempDirectInput.CreateDevice(GUID_SysKeyboard, uTempDirectInputKeyBoard, nil);
uTempDirectInputKeyBoard.SetDataFormat(c_dfDIKeyboard);
uTempDirectInputKeyBoard.SetCooperativeLevel(hDC, DISCL_FOREGROUND or DISCL_EXCLUSIVE);
uTempDirectInputKeyBoard.Acquire;
// Création du device de la souris
uTempDirectInput.CreateDevice(GUID_SysMouse, uTempDirectInputMouse, nil);
uTempDirectInputMouse.SetDataFormat(c_dfDIMouse2);
uTempDirectInputMouse.SetCooperativeLevel(hDC, DISCL_FOREGROUND or DISCL_EXCLUSIVE);
uTempDirectInputMouse.Acquire;
////////////////////////////////////////////////////////////////////////////////
// TODO: Création du device du joystick
////////////////////////////////////////////////////////////////////////////////
// Initialisation des états des devices
ZeroMemory(@uTempMouseState, SizeOf(uTempMouseState));
ZeroMemory(@AnTempKeyboardState, SizeOf(AnTempKeyboardState));
////////////////////////////////////////////////////////////////////////////////
// TODO: Initialisation de l'état du joystick
////////////////////////////////////////////////////////////////////////////////
// Attente de la pression d'une touche
bContinue:= True;
while bContinue do
begin
// Récupération de l'état de la souris
if uTempDirectInputMouse.GetDeviceState(SizeOf(uTempMouseState), @uTempMouseState) = DIERR_INPUTLOST then
begin
ZeroMemory(@uTempMouseState, SizeOf(uTempMouseState));
fuDirectInputMouse.Acquire;
end;
for nI:= 0 to 7 do
if (uTempMouseState.rgbButtons[nI] and $80) <> 0 then
begin
nKeyOrButtonIndex:= nI;
uDevice:= IND_Mouse;
bContinue:= False;
Break;
end;
if uTempMouseState.lZ > 0 then
begin
nKeyOrButtonIndex:= 8;
uDevice:= IND_Mouse;
bContinue:= False;
end
else if uTempMouseState.lZ < 0 then
begin
nKeyOrButtonIndex:= 9;
uDevice:= IND_Mouse;
bContinue:= False;
end;
// Récupération de l'état du clavier
if uTempDirectInputKeyBoard.GetDeviceState(SizeOf(AnTempKeyboardState), @AnTempKeyboardState) = DIERR_INPUTLOST then
begin
ZeroMemory(@AnTempKeyboardState, SizeOf(AnTempKeyboardState));
fuDirectInputKeyBoard.Acquire;
end;
for nI:= 0 to 255 do
if (AnTempKeyboardState[nI] and $80) <> 0 then
begin
nKeyOrButtonIndex:= nI;
uDevice:= IND_KeyBoard;
bContinue:= False;
Break;
end;
////////////////////////////////////////////////////////////////////////////////
// TODO: Récupération de l'état du joystick
////////////////////////////////////////////////////////////////////////////////
end;
// Libération de l'objet principal et des devices
////////////////////////////////////////////////////////////////////////////////
// TODO: Libération du device du joystick
////////////////////////////////////////////////////////////////////////////////
"On est pas du tout d'accord francki lol." : tu veux une fessée ?
Rt15 je te crois sur parole : cependant la question de ce Monsieur était est ce qu'un hook fonctionne pour toutes les applications et :"je voulais savoir si le hook clavier fonctionne normalement sur n'importe quelles applications, que ce soit un jeu ou un programme de traitement de texte....etc."
Hormis ce cas exceptionnel la réponse est oui.
Si je t'ai dis de chercher c'est qu'un Hook clavier intercepte les messages. Avec une simple recherche sur la notion de messages il aurait compris que la notion de message est indépendante de la notion de type d'applications. Et j'irai meme jusqu'à dire que c'est marqué dans tout les liens traitant de ce sujet : c''est meme l'une des premieres choses qui est écritent sur le sujet. Dans tout les cas, un semblant de recherche sur la notion de messages aurait répondu immédiatement à sa question.
Maintenant dans ce cas de figure que je connaissais pas il y a un binze mais je pense pas que c'était sa question
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010 29 avril 2007 à 13:24
Franky.... pour la Niéme fois: oui G cherché et si les hook claviers fonctonnaient pour toutes les application cette discution n'aurait jamais eu lieu d'être.
RT15 je te remercie grandement pour ton aide c'est super sympas. Ton code...enfin ta partie de code est énorme mais c'est pas grave lol je vais me pencher dessus dés que j'aurai un peut de temps pour le faire. Je tiendrai au courant de l'état d'avancement, ça pourra peut étre servir à quelqu'un d'autre on ne sait jamais.
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 29 avril 2007 à 15:16
Ah la la,
Au lieu de vous criez dessus, commencez par être précis dans votre façon de vous exprimer.
Savez-vous ce qu'est un hook ? Je n'en ai pas l'impression ...
Un hook est une façon pour un module d'intercepter les messages Windows autrement qu'avec la méthode *traditionnelle*.
Pour info, la méthode traditionnelle, c'est avec WaitMessage(), GetMessage() et PeekMessage(), voir le code de Forms.TApplication.Run() pour mieux comprendre.
Un hook permet d'intercepter les messages. C'est un peu différent car les messages interceptés par les hooks parviennent quand même aux destinataires si rien n'est fait pour les arrêter. Un hook peut être global, c'est à dire intercepter TOUS les messages du système ou de se limiter à un certain Handle. Il se met en place à l'aide de SetWindowsHookEx()
Bon, je n'ai vu aucune référence à toutes les fonctions que je viens de citer, comment alors pouvez-vous parler de hooks ?
Keybd_Event() est une procédure d'EMULATION. Il ne s'agit pas ici d'intercepter quelque message que ce soit mais tout l'inverse. Cette procédure permet de simuler un appui ou relâchement de touche sur le clavier.
Je ne connais rien sur DirectInput, n'ayant jamais programmé de jeu. Mais apparament, cette API outrepasse les méthodes classiques de récupération d'état pour avoir une fréquence de traitement plus rapide (ex: la souris ne transmet pas assez d'infos par messages pour suffire à un jeu 3d).
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 2 mai 2007 à 09:36
florenth -> Fonctionne "des fois" je pense. Pour le hook, c'est vrai que l'on se demande un peu ce qu'il vient faire dans le titre. Mais il semblerait que les hooks ne fonctionnent pas dans les mêmes cas ou Keybd_event ne fonctionnne pas.
mighty_warrior -> Ce n'est malheurement pas avec mon source que tu pourras envoyer des pressions de touches à une application thiers utilisant DirectInput...
La seul solution qui me paraît avoir une chance de marcher mais qui est très compliquée, ce serait de faire un hook (mais d'API cette fois) des méthodes GetDeviceData et GetDeviceState du clavier. Globalement, il s'agit de remplacer ces méthode par les tiennes dans le jeu à l'execution.
L'algo est simple, la réalisation est nettement plus complexe :
1 Appel de l'exe à GetDeviceData.
2 Ca passe par ta méthode qui appel le vrai GetDeviceData de DirectInput.
3 DirectInput récupère les "vrais" entrées clavier, puis redonne l'execution à ta méthode.
4 Ta méthode modifie les données renvoyée par DirectInput et les remonte au jeu.
5 Le jeu récupère les entrées comme si elle venait effectivement toutes de DirectInput.
@Florenth : Un hook est une façon pour un module d'intercepter les messages Windows autrement qu'avec la méthode *traditionnelle*. C'est un peu différent car les messages interceptés par les hooks parviennent quand même aux destinataires si rien n'est fait pour les arrêter. Un hook peut être global, c'est à dire intercepter TOUS les messages du système ou de se limiter à un certain Handle.
Donc on en revient bien à ce que je disais :
1)Principe d'un keylogger
2)Que tout les messages systèmes sont interceptés
3)Que l'auteur n'a pas cherché pour la simple raison raison qu'effectivement il confond hook et simulation de clavier.
Si un hook ne pouvait pas intercépter tout les messages systemes, on ne pourrait pas faire de keylogger : ce n'est pas à défaut de le mettre sur la voix.
Voila une question mal posée et une récherche de mauvaise qualité qui ont induit une question en totale décalage avec la problématique et un dialogue de sourd suite à l'incapacité du posteur de se remettre en question suite aux différentes remarques qui ont été faites.
Seul intéret de RT15 est la remarque qu'il a fait sur DirectInput : mais je pense pas que l'auteur du message avait pris connaissance de ce fait. Heureusement que certaines personnes ont l'esprit visionnaire
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 2 mai 2007 à 13:15
C'est vrai que celui qui pose mal sa question reçoit forcément des réponses à côté de la plaque. Mais qu'il ne vienne pas s'en plaindre non plus ! Il n'avait qu'a parler français comme tout le monde !
@Francky: ce qu'il faut savoir, c'est qu'il y a toujours au moins deux méthodes pour récupérer qqch dans Windows:
- Utiliser les API de haut niveau (les messages en font partie)
- Chercher directement du côté du matériel.
Et à mon, avis, vu comme je connais M$, ça m'étonnerait pas que ce soit le 2ème méthode qui soit utilisée, ce qui veut dire que DirectInput serait capable de récupérer l'état des touches sans utiliser les messages...
Et si c'est le cas, ça va être problématique: il faudrait injecter du code dans DirectX pour faire croire qu'il y a eu une interruption du CPU ... bonne chance quoi ...
"Heureusement que certaines personnes ont l'esprit visionnaire"
=> Mme Irma est mon idole !!! lol
Au fait, et si on laissait ce *warrior* répondre un peu: après tout c'est SON problème, à lui de le préciser, non ?
mighty_warrior
Messages postés123Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention 9 février 2010 4 mai 2007 à 20:10
Je ne pose pas de questions dans le but de "me faire tailler un short"!
Voici quelques phrases qui vont faire plaisir a franky machin chose:
oui tu as raison!
Non , je n'ai rien chercher sur google, www.developpez.com ou sur delphifr avant de poster ce message.
Je ne sait pas titrer mes messages en rapport avec le contenu.
Je suis un abrutis doublé d'un incompétant.
je n'ai pas l'esprit visionaire (dire le contraire serait prétentieux).
Ce que j'ai compris:
Ce message n'aboutira jamais a rien de concret
Inutile que je repose une question sur le théme du....enfin de l'émulation de clavier avant quelques années
Comme il me reste une qualité qui est la politesse je vous dit tout de même: