begin process at 2012 05 29 09:03:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Hook Global - Répétition de la touche ^


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Hook Global - Répétition de la touche ^

jeudi 12 juillet 2007 à 10:52:34 | Hook Global - Répétition de la touche ^

lol55

    Bonjour à Tous,

Je suis parvenu à créer un Hook pour mon programme avec l'aide des codes qu'il y a sur le site mais lorsque mon Hook est activé, la pression de la touche ^ est doublé automtiquement lorsqu'on appuie une seul fois ! :o

Je viens de terminer mon logiciel et il ne me reste plus que ce beug à corriger. Sauriez-vous comment corriger ce problème !?

Merci Beaucoup pour votre Aide ! ;)
jeudi 12 juillet 2007 à 11:46:48 | Re : Hook Global - Répétition de la touche ^

BruNews

Administrateur CodeS-SourceS

Je lance le prog et je ne note pas de doublage de touche.

DLL:
#include <windows.h>
HINSTANCE thismod = 0;
HHOOK hhk = 0;

#pragma comment(linker, "/entry:myDllMain")
__declspec(naked) int __stdcall myDllMain(HINSTANCE hdll, DWORD dwReason, LPVOID Reserved)
{ // DLL_PROCESS_DETACH = 0, DLL_PROCESS_ATTACH = 1
  __asm {
    mov     eax, [esp+8]  ; dwReason
    mov     edx, [esp+4]  ; hdll
    dec     eax
    jne     short mainRET
    mov     thismod, edx
mainRET:
    mov     eax, 1
    ret     12
  }
}

// TRAITEMENT ULTRA MINIMAL
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  return CallNextHookEx(0, nCode, wParam, lParam);
}


int __stdcall Intercepte()
{
  if(!hhk) {
    hhk  = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, thismod, 0);
  }
  return (int) hhk;
}

void __stdcall Relache()
{
  if(hhk) {
    UnhookWindowsHookEx(hhk); hhk = 0;
  }
}
----------------------
PROG UTILISATEUR:
#include <windows.h>
#include "resource.h"

#pragma comment(lib, "bnkbd.lib")
int __stdcall Intercepte();
void __stdcall Relache();

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      if(!Intercepte()) goto dlgEND;
      SetClassLongPtr(hdlg, GCLP_HICON, (long)LoadIcon(0, IDI_APPLICATION));
      return 1;
    case WM_COMMAND:
      if(wParam != IDCANCEL) break;
      Relache();
  dlgEND:
      EndDialog(hdlg, 0);
     
  }
  return 0;
}

#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
  __asm {
    push    0
    call    dword ptr GetModuleHandle
    push    eax
    push    offset AppDlgProc
    push    0
    push    IDD_APP
    push    eax
    call    dword ptr DialogBoxParam
    push    0
    call    dword ptr ExitProcess
  }
}


ciao...
BruNews, MVP VC++

jeudi 12 juillet 2007 à 12:37:55 | Re : Hook Global - Répétition de la touche ^

lol55

Je ne fais pas le Hook avec une DLL, voici le code :

#define _WIN32_WINNT         0x0600
#define _WIN32_IE            0x0700

#include <windows.h>
#include <stdio.h>

...

__declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);

...

_declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        if(lParam > 0)
        {
            if (wParam == WM_KEYDOWN) // Touche appuyée
            {
                BYTE KeyState[256];
                WORD wBuf;
               
                KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);
               
                GetKeyboardState(KeyState);
               
                ToAscii(hookstruct.vkCode, hookstruct.scanCode, KeyState, &wBuf, 0);
               
                switch(hookstruct.vkCode)
                {
                    case VK_SNAPSHOT :
                         ...
                         break;
                   
                    ...
                   
                    default :
                         break;
                }
            }
           
            else if (wParam == WM_KEYUP) // Touche Relachée
            {
                BYTE KeyState[256];
                WORD wBuf;
               
                KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);
               
                GetKeyboardState(KeyState);
               
                ToAscii(hookstruct.vkCode, hookstruct.scanCode, KeyState, &wBuf, 0);
               
                switch(hookstruct.vkCode)
                {
                    case VK_SNAPSHOT :
                         ...
                         break;
                   
                    ...
                   
                    default :
                         break;
                }
            }
        }
    }
   
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

Et pour l'activer je fais seulement :
instance = GetModuleHandle(NULL);
SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) HookProc, instance, NULL);
Puis pour le désactiver :
UnhookWindowsHookEx(hHook);
Tout marche avec ce code sauf la répétition de la touche ^ lorsque le Hook est activé.

Que pourrais-je essayer ? :/
dimanche 15 juillet 2007 à 02:20:16 | Re : Hook Global - Répétition de la touche ^

lol55

Je bloque toujours sur ce problème !

En plus à part ce beug j'ai entièrement fini mon logiciel ! ^^

Comment pourrais-je corriger cette anomalie de répétition de la touche ^ !?

Merci Beaucoup pour votre Aide ! ;)
vendredi 3 août 2007 à 23:12:05 | Re : Hook Global - Répétition de la touche ^

lol55

Personne n'a déjà eu ce problème ! ?


Cette discussion est classée dans : aide, répétition, touche, hook, global


Répondre à ce message

Sujets en rapport avec ce message

besoin d aide [ par backcpp ] voila j aimerais realiser un logiciel tout simple mais je voulais d abord savoir si je ne vise pas trop haut, donc je vous explique et si vous pouviez Hook sur touche windows [ par hilairenicolas ] Peut on hooker la touche windows et si oui comment ? (elle ne semble pas répondre au hook WH_KEYBOARD)Merci Quels sont les paramètres d'un Hook clavier [ par LaPatoshe ] bonjour et meilleurs voeux.Je viens de créer une DLL contenant un hook interceptant les messages du clavier (WH_KEYBOARD). Losrque l'utilisateur press hook global sans dll en mode fenêtre [ par wallegen ] Je voudrais essayer ce code http://www.cppfrance.com/codes/HOOK-GLOBAL-SANS-DLL_27169.aspx en mode fenêtre afin de mieux le comprendre(et surtout parc Hook global des flux réseaux [ par Taron31 ] Bonjour, je dois effectuer dans un projet un hook global afin de récupérer tous les flux réseaux (passant par plusieurs cartes réseaux).Cependant, je Aide pour automatisation action clavier dans jeux sous activx [ par redus21 ] Bonjour a tous Je tiens déja a préciser que je ne suis ni développeur ni reellement compétent en informatique.Ma fille est handicapée, elle n'a donc p hook global [ par Xentor609 ] Salut,Je sais bien que ca enerve certain les questions sur les hooks, mais al trouve vraiment pas.Je souhaiterais placer un hook sur le clavier, pour Saisir une touche clavier (besoin d aide :) ) [ par vychnou ] Bonjour..je débute en C++, et j'aimerais trouver un moyen(par exemple une fonction)permettant ,sans passer par un cin ,d attendre la saisie d une touc Hook [ par Anacr0x ] Salut tt le monde,j'ai juste une petite question :lorsqu'on crée un hook, on intercepte les message, mais ya-t-il un moyen de les bloqué totalement ?J


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales