Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)


Information sur la source

Catégorie :API Niveau : Débutant Date de création : 16/08/2004 Date de mise à jour : 02/05/2006 00:37:17 Vu / téléchargé: 6 267 / 685

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (42)
Ajouter un commentaire et/ou une note


Description

2 projets dans zip, prog de test et la dll.
DLL exporte Start(HWND) qui init hook clavier et Stop() qui le ferme.
PROG contient la dll en ressource binaire, peut donc se livrer seul.
Il copie la dll dans dossier temp, la charge et la supprime en quittant.

DLL notifie la HWND en cas de SHIFT+CTRL+F11 nimporte ou.
Demo faite sur mesure pour JCDjcd.
La dll de 3.5 Ko dans dossier du prog est celle inseree en ressource binaire, pret a l'emploi pour qui de droit.

 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   Dll
    •   release
      • Jcd.dllTélécharger ce fichier [Réservé aux membres club]24 576 octets
      • Jcd.libTélécharger ce fichier [Réservé aux membres club]1 806 octets
    • Jcd.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 218 octets
    • Jcd.defTélécharger ce fichier [Réservé aux membres club]54 octets
    • Jcd.ncbTélécharger ce fichier [Réservé aux membres club]27 648 octets
    • Jcd.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier895 octets
    • Jcd.suoTélécharger ce fichier [Réservé aux membres club]8 704 octets
    • Jcd.vcprojTélécharger ce fichier [Réservé aux membres club]3 952 octets
  •   Testeur
    •   release
      • Testeur.exeTélécharger ce fichier [Réservé aux membres club]27 648 octets
    • Jcd.dllTélécharger ce fichier [Réservé aux membres club]3 584 octets
    • Jcd.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier158 octets
    • Jcd.libTélécharger ce fichier [Réservé aux membres club]1 806 octets
    • resource.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier633 octets
    • Testeur.apsTélécharger ce fichier [Réservé aux membres club]22 040 octets
    • Testeur.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 146 octets
    • Testeur.ncbTélécharger ce fichier [Réservé aux membres club]60 416 octets
    • Testeur.rcTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 434 octets
    • Testeur.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier903 octets
    • Testeur.suoTélécharger ce fichier [Réservé aux membres club]8 704 octets
    • Testeur.vcprojTélécharger ce fichier [Réservé aux membres club]3 883 octets

Télécharger le zip

Historique

26 octobre 2005 17:16:27 :
site
02 mai 2006 00:37:17 :
commentaire

Commentaires et avis

signaler à un administrateur
Commentaire de JCDjcd le 16/08/2004 18:46:20

oki merci je fais etudier ca (si possible rapidement)

signaler à un administrateur
Commentaire de JCDjcd le 16/08/2004 20:19:23

Je ne comprend pas l'utilisation d'un DLL, pour recupere CTRL+SHIT+F11/12 je peux simplement faire un HHOOK sur le clavier non ?

signaler à un administrateur
Commentaire de BruNews le 16/08/2004 21:30:40 administrateur CS

Doit etre dans une dll si tu veux recup quand ton prog n'a plus le focus. C'est un hook global.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 00:08:43

Si je n'es plus le focus, mon hook ne marche plus ?

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 00:15:32 administrateur CS

S'il n'est pas global (en DLL) ben non.
On le met en dll pour que le systeme puisse en mapper une copie dans chaque processus. Ainsi il s'execute quel que soit le prog de 1er plan.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 00:22:14

donc si on a un nouveau programme est au premier plan, alors on recharge encore la fonction du hook sur clavier ?

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 00:41:20 administrateur CS

Le systeme s'en occupe tout seul. Tu n'appelles le chargement du hook qu'1 seule fois, le systeme mappera dans tout processus en cours comme dans tous ceux qui demarreraient ulterieurement.
C'est magique Windows.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 09:00:01

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
  if(dwReason == DLL_PROCESS_ATTACH) thismod = hDll;
  return 1;
}


***************
si dwReason ne vaut pas , alors thismode vaut NULL, donc pour le reste du programme c'est pas embetant ? et comment on sait ce que faut dwReason ?

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 10:12:50 administrateur CS

dwReason est ATTACH ou DETACH pour PROCESS ou THREAD. Pour rester null faudrait que la dll ne soit pas chargee par un process, le probleme ne se pose donc pas.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 11:49:04

mais le systems apelle DllMain pou chaque cas, i.e. une fois pour ATTACH et une autre pour DETACH ?

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 11:54:35 administrateur CS

oui, normalement 4 fois.

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 12:06:45 administrateur CS

Regarde Richter chapitre 20, il fait une analyse complete de tout cela.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 15:58:11

mias pour faire tout cela on est oblige d'utiliser des globales ?

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 16:07:49 administrateur CS

Windows est un multitache preemptif ou donc user a toujours priorite. Le systeme va placer les entrees clavier dans la pile d'appels du process de 1er plan.
Si tu masques ta fenetre, il y en aura bien une autre en 1er plan a sa place, ok ? alors tu ne reçois plus les touches, voila pourquoi hook clavier GLOBAL OBLIGATOIRE et par force en dll.

signaler à un administrateur
Commentaire de JCDjcd le 17/08/2004 17:42:56

je parlais de variable globale,i.e. qui ne sont pas variables (pas pusher en pile koi),

signaler à un administrateur
Commentaire de BruNews le 17/08/2004 17:48:03 administrateur CS

Analyse le deroulement et tu verras.

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 22:07:24

Bonjour,

DllMain n'est chargé que si la dll est aloué de façon statique ?
(c'est à dire avec les options dans le linker)

Si on l'ouvre en dynamique comment on fait ?

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 22:15:09 administrateur CS

Rien à voir avec le fait que soit linké ou chargé en dynamique, DllMain sera appelé dans tous les cas.

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 22:24:28

HHOOK hHook;    // Handle du hook global
HINSTANCE hExe; // Handle de notre dll
bool etat_hook=false;

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
  if(dwReason == DLL_PROCESS_ATTACH) hExe = hDll;
  return 1;
}

// Fonction de gestion du hook
LRESULT CALLBACK HookProc ( int nCode,  WPARAM wParam,  LPARAM lParam)
{
                      MessageBox(NULL,"Vous êtes dans un hook","HookProc",0);
// [...]
return CallNextHookEx(hHook,nCode,wParam,lParam);
}
void __declspec(dllexport) DemarrerHook()
{
    if (!etat_hook)
    {
        hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
        MessageBox(NULL,"Hook démarré !","DemarrerHook",0);
        etat_hook=1;//Mettre le flag d'etat à 1 (actif)
    }
}

void __declspec(dllexport) StopperHook()
{
    if (etat_hook)
    {
        UnhookWindowsHookEx(hHook);
        etat_hook=0;// Mettre le flag d'état à 0 (inactif)
    }
}

Voici mon code in DLL et marche pas quand j'appelle DemarrerHook alors que la messagebox comme quoi que le hook est parti s'affiche !

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 22:34:06 administrateur CS

etat_hook est inutile, hHook à zéro fera idem pour test.
Toute procédure de hook doit être le plus rapide possible sinon le système passera son chemin pour ne pas se mettre en péril. Il ne faut donc absolument pas mettre de fonction bloquante comme MessageBox.

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 22:36:00

Oui mais le pb c'est que aucune action n'est effectué ni MsgBox ni printf rien donc il y a qq chose.

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 22:39:26 administrateur CS

Faut mettre un retour sur DemarrerHook() ainsi tu sauras si hook lancé.
Regarde dans mes exemples:
int __stdcall DemarrerHook()
{
  ....
  return (int) hook;
}

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 22:57:41

La fonction renvoie NULL

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 23:03:19 administrateur CS

ben tu vois que y a pas besoin de MessageBox, y a plus qu'à chercher l'erreur.
Le mieux tu mets un de mes exemples à coté de ton code et tu regardes ce qui diffère:
HOOK SYSTEM SUR WM_MOUSEWHEEL (WIN32)
http://www.cppfrance.com/code.aspx?ID=25998
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450
HOOK F11 SUR IE (WIN32)
http://www.cppfrance.com/code.aspx?id=18202
HOOK CLAVIER
http://www.cppfrance.com/code.aspx?id=17818
LIMITE LE NBR DE FENETRES IE V2 (WIN32)
http://www.cppfrance.com/code.aspx?id=17387
etc, etc...

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 23:12:12

retourne 0 avec :
LRESULT CALLBACK kbdProc(int nCode, WPARAM wParam, LPARAM lParam) {
  // VK_F11 = 0x7A, VK_CONTROL = 0x11 , VK_SHIFT = 0x10
  if(nCode < 0)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(wParam != VK_F11)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(!(lParam & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam); // UP pour certitude 1 SEULE FOIS
  if(!(GetKeyState(VK_CONTROL) & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int __declspec(dllexport) DemarrerHook()
{
    if (hHook==0)
    {
         hHook  = SetWindowsHookEx(WH_KEYBOARD, kbdProc, hExe, 0);
    }  
    return (int) hHook;
}

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 23:12:47 administrateur CS

Une idée comme je ne connais pas ton compilo:
HHOOK hHook = 0;
Faut toujours garantir le zéro sinon test ultérieur pas certain.

signaler à un administrateur
Commentaire de BruNews le 28/10/2005 23:22:43 administrateur CS

Ton compilo ne gueule pas pour ta kbdProc(), manque un return final hors de tout if.

signaler à un administrateur
Commentaire de victorcoasne le 28/10/2005 23:27:56

HHOOK hHook = 0;    // Handle du hook global
HINSTANCE hExe; // Handle de notre dll

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
  if(dwReason == DLL_PROCESS_ATTACH) hExe = hDll;
  return 1;
}
LRESULT CALLBACK kbdProc(int nCode, WPARAM wParam, LPARAM lParam) {
  // VK_F11 = 0x7A, VK_CONTROL = 0x11 , VK_SHIFT = 0x10
  if(nCode < 0)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(wParam != VK_F11)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(!(lParam & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam); // UP pour certitude 1 SEULE FOIS
  if(!(GetKeyState(VK_CONTROL) & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  
  return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int __declspec(dllexport) DemarrerHook()
{
    if (hHook==0)
    {
         hHook  = SetWindowsHookEx(WH_KEYBOARD, kbdProc, hExe, 0);
        //hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
        //etat_hook=1;//Mettre le flag d'etat à 1 (actif)
    }  
    return (int) hHook;
}

Voilà le prog me retourne toujours 0 !

signaler à un administrateur
Commentaire de BruNews le 29/10/2005 01:50:20 administrateur CS

Si tu bosses sur VS je peux jeter un oeil à ton projet sinon je ne peux rien y faire, à ce point tout semble pourtant bon.

signaler à un administrateur
Commentaire de victorcoasne le 29/10/2005 11:17:50

ok je suis sous dev mais les différences sont pas énormes si pas de MFC alors voilà la dll (les fonctions qui sont importés sont dans le programme au cas ou le hook marche) :
#include <windows.h>


typedef bool (__stdcall* lpMyCallBack) (LPSTR szMsg);
typedef bool (__stdcall* lpMyCallBack_int) (int szMsg);
typedef bool (__stdcall* lpMyCallBack_char) (char szMsg);
typedef bool (__stdcall* lpMyCallBack_bool) (bool szMsg);

lpMyCallBack envoiedonnee_char;
lpMyCallBack_int envoiedonnee_int,envoiedonneeconvert_int;
lpMyCallBack_char envoiedonneeconvert_char;
lpMyCallBack_bool envoiedonnee_bool,envoiedonneeconvert_bool;
void __declspec(dllexport) initdll(
lpMyCallBack dw_envoiedonnee_char,lpMyCallBack_int dw_envoiedonnee_int,
lpMyCallBack_bool dw_envoiedonnee_bool,lpMyCallBack_int dw_envoiedonneeconvert_int,
lpMyCallBack_char dw_envoiedonneeconvert_char,lpMyCallBack_bool dw_envoiedonneeconvert_bool)
{
    envoiedonnee_char=(lpMyCallBack)dw_envoiedonnee_char;
    envoiedonnee_int=(lpMyCallBack_int)dw_envoiedonnee_int;
    envoiedonnee_bool=(lpMyCallBack_bool)dw_envoiedonnee_bool;
    envoiedonneeconvert_int=(lpMyCallBack_int)dw_envoiedonneeconvert_int;
    envoiedonneeconvert_char=(lpMyCallBack_char)dw_envoiedonneeconvert_char;
    envoiedonneeconvert_bool=(lpMyCallBack_bool)dw_envoiedonneeconvert_bool;
}


HHOOK hHook = 0;    // Handle du hook global
HINSTANCE hExe; // Handle de notre dll

BOOL APIENTRY DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
  if(dwReason == DLL_PROCESS_ATTACH) hExe = hDll;
  return 1;
}

// Fonction de gestion du hook
LRESULT CALLBACK kbdProc(int nCode, WPARAM wParam, LPARAM lParam) {
  // VK_F11 = 0x7A, VK_CONTROL = 0x11 , VK_SHIFT = 0x10
  if(nCode < 0)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(wParam != VK_F11)
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  if(!(lParam & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam); // UP pour certitude 1 SEULE FOIS
  if(!(GetKeyState(VK_CONTROL) & 0x80000000))
  return CallNextHookEx(hHook, nCode, wParam, lParam);
  
  return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int __declspec(dllexport) DemarrerHook()
{
    if (hHook==0)
    {
         hHook  = SetWindowsHookEx(WH_KEYBOARD, kbdProc, hExe, 0);
        //hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hExe, 0);
        //etat_hook=1;//Mettre le flag d'etat à 1 (actif)
    }  
    return (int) hHook;
}

int __declspec(dllexport) StopperHook()
{
    if (hHook!=0)
    {
        UnhookWindowsHookEx(hHook);
        //etat_hook=0;// Mettre le flag d'état à 0 (inactif)
    }
    return (int) hHook;
}

/******** In exe **********/
    typedef void (__stdcall* lpMyCallBack_void) ();
    typedef int (__stdcall* lpMyCallBack_intr) ();
typedef bool (__stdcall* lpMyCallBack) (LPSTR szMsg);
typedef bool (__stdcall* lpMyCallBack_int) (int szMsg);
typedef bool (__stdcall* lpMyCallBack_char) (char szMsg);
typedef bool (__stdcall* lpMyCallBack_bool) (bool szMsg);

typedef void (__stdcall* lpDemandeCallBack_param) (
lpMyCallBack dw_envoiedonnee_char,lpMyCallBack_int dw_envoiedonnee_int,
lpMyCallBack_bool dw_envoiedonnee_bool,lpMyCallBack_int dw_envoiedonneeconvert_int,
lpMyCallBack_char dw_envoiedonneeconvert_char,lpMyCallBack_bool dw_envoiedonneeconvert_bool);
lpMyCallBack_intr DemarrerHook;
lpMyCallBack_intr StopperHook;
lpDemandeCallBack_param initdll;
lpMyCallBack_void test;

bool __stdcall CALLBACK envoiedonnee(char* donnees);
bool __stdcall CALLBACK envoiedonnee(int donnees);
bool __stdcall CALLBACK envoiedonnee(bool donnees);
bool __stdcall CALLBACK envoiedonneeconvert(int donnees);
bool __stdcall CALLBACK envoiedonneeconvert(char donnees);
bool __stdcall CALLBACK envoiedonneeconvert(bool donnees);
HANDLE hDLL = LoadLibrary("VNC.dll");
    if (hDLL==NULL)
    {
    MessageBox(NULL,"VNC.dll est introuvable !",0,16);
    return -1;
    }
    
    DemarrerHook = (lpMyCallBack_intr)
    GetProcAddress((HINSTANCE)hDLL, "_Z12DemarrerHookv");
    if (DemarrerHook == NULL)
    {
    MessageBox(NULL,"DemarrerHook est introuvable dans la DLL VNC.dll",0,16);
    return -1;
    }
    StopperHook = (lpMyCallBack_intr)
    GetProcAddress((HINSTANCE)hDLL, "_Z11StopperHookv");
    if (StopperHook == NULL)
    {
    MessageBox(NULL,"StopperHook est introuvable dans la DLL VNC.dll",0,16);
    return -1;
    }
    
    initdll = (lpDemandeCallBack_param)
    GetProcAddress((HINSTANCE)hDLL, "_Z7initdllPFbPcEPFbiEPFbbES3_PFbcES5_");
    if (initdll == NULL)
    {
    MessageBox(NULL,"initdll est introuvable dans la DLL VNC.dll",0,16);
    return -1;
    }
    
    initdll(&envoiedonnee,&envoiedonnee,&envoiedonnee,    &envoiedonneeconvert,&envoiedonneeconvert,&envoiedonneeconvert);

              if (DemarrerHook()!=0)
              printf("\n\nHook\tOK");
              else
              printf("\n\nHook\tERREUR");

signaler à un administrateur
Commentaire de victorcoasne le 29/10/2005 19:20:52

Bonjour,

J'ai testé et la fonction DLLMain n'est pas appellé en allocation dynamique.

Comment l'apeller en lui donnant un handle global.

J'ai aussi testé que le hook est ok quand je donne l'hinstance du programme mais ne se produit avec WH_KEYBOARD_LL et WH_KEYBOARD de hook.

signaler à un administrateur
Commentaire de BruNews le 29/10/2005 19:34:58 administrateur CS

Dans la source la dll est chargée dynamiquement et DllMain est bien appelée sinon hook ne fonctionnerait pas à cause du hdll qui vaudrait 0.

signaler à un administrateur
Commentaire de victorcoasne le 29/10/2005 19:38:46

C'est ce que je dis la fonction DllMain n'est pas appellée dynamiquement et le hook ne fonctionne pas.
Si je l'appelle avec l'instance du programme puis je fais le hook il est opérationel mais pas global !

signaler à un administrateur
Commentaire de BruNews le 29/10/2005 19:44:25 administrateur CS

Mais l'appel de DllMain n'est pas 'dynamique' ou non, c'est le chargeur du système qui l'appelle, on n'a donc pas à s'en occuper si la dll est construite correctement.

signaler à un administrateur
Commentaire de victorcoasne le 29/10/2005 20:26:14

Oui mais pour te demander comment aloué un handle à la fonction !

signaler à un administrateur
Commentaire de BruNews le 29/10/2005 21:24:19 administrateur CS

C'est le retour de LoadLibrary() qui te le donne, le même que le system enverra à DllMain s'il trouve ce point d'entrée dans la dll. Suffit donc d'exporter une fonction du genre SetHandle(HINSTANCE hDll) et tu envoies ce que t'aura donné LoadLibrary.
Tout ceci ne sera que du bricolage, tu ferais mieux de voir comment on fait une dll correcte avec devcpp sinon tourne toi vers VC.

signaler à un administrateur
Commentaire de victorcoasne le 29/10/2005 23:38:32

Ok mais ça marche pas en global

Je fais un projet dll vierge sous dev et il me donne :
1) dllmain.cpp
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>

DllClass::DllClass()
{

}


DllClass::~DllClass ()
{

}


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

2) dll.h
#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);

  private:

};


#endif /* _DLL_H_ */


Question : C'est quoi et qu'est ce que je supprime et où je mets mon code ?

signaler à un administrateur
Commentaire de BruNews le 29/10/2005 23:49:54 administrateur CS

Vire cette histoire de classe au complet, il n'y a que le DllMain d'intéressant là dedans. Remets normalement tes fonctions à exporter.
Je bosse avec VC, je ne connais donc pas les subtilités de devcpp. Essaie de voir s'il accepte un fichier def pour l'export des fonctions.

signaler à un administrateur
Commentaire de victorcoasne le 30/10/2005 14:01:11

BruNews grâce à sa connaissance en programmation et aux commentaires que je lui ai demandé d'effacer m'as appris des choses que je vous résumes :
1) Normalement si il n'y a pas de problème le point d'entrée de la dll DllMain() est appellé que la dll soit appellée de façon statique ou dynamique
2) Pour savoir si un hook a fonctioné il faut voir si la valeur de retour de la fonction SetWindowsHookEx() est non nulle.
3) La valeur de retour de LoadLibrary() donne le handle attribué par le système à la dll

Merci encore à BruNews et je lui mets 10/10 !

signaler à un administrateur
Commentaire de BruNews le 30/10/2005 14:17:09 administrateur CS

Je laisse le reste des comments, si d'autres ont le même genre de problème on peut espérer que ça leur servira.

signaler à un administrateur
Commentaire de victorcoasne le 30/10/2005 14:20:53

Ok alors je donne l'adresse de la suite de l'histoire avec une dll vierge :
http://www.cppfrance.com/forum.v2.aspx?ID=590493

signaler à un administrateur
Commentaire de darkpoulpo le 02/08/2007 19:13:31

il manque UnlockResource() non?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,42 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS