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 !

Sujet : Hooks [ Windows / System ] (M5i9k)

lundi 7 août 2006 à 00:24:57 | Hooks

M5i9k

Bonsoir,

je voulais savoir si il était possible de creer un hook lors du chargement d'un dll c'est à dire dans la fonction DllMain d'un dll, j'essaye de le faire mais n'y arrive pas :

#include "windows.h"

HHOOK hKeyb;
HINSTANCE hDll;

LRESULT CALLBACK KeybProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0)  // do not process message
        return CallNextHookEx(hKeyb, nCode, wParam, lParam);

    MessageBox(NULL, "Appui", "Message", MB_OK);

    return CallNextHookEx(hKeyb, nCode, wParam, lParam);
}

void Hook()
{
   
    hKeyb = SetWindowsHookEx(WH_KEYBOARD, KeybProc, hDll, 0);
    if(!hKeyb)
        MessageBox(NULL, "Erreur", "Erreur", MB_OK);
}

void UnHook()
{
    if(hKeyb)
        UnhookWindowsHookEx(hKeyb);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    hDll = hinstDLL;
    if(fdwReason == DLL_PROCESS_ATTACH)
    {
        Hook();
    }
   
    if(fdwReason == DLL_PROCESS_DETACH)
    {
        UnHook();
    }

    return TRUE;
}


lundi 7 août 2006 à 09:45:49 | Re : Hooks

nightlord666

Membre Club
Il ne faut jamais utiliser de fonctions bloquantes comme MessageBox dans un hook, car sinon le système d'exploitation ne va pas effectuer le hook. Essaie plutôt un fopen/fwrite à la place, et donne nous le résultat.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.

lundi 7 août 2006 à 12:27:28 | Re : Hooks

M5i9k

Voila, j'ai réecris ma fonction :

LRESULT CALLBACK KeybProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0)  // do not process message
        return CallNextHookEx(hKeyb, nCode, wParam, lParam);

    // Sauvegarde dans le fichier
    ofstream fichier;
    fichier.open("c:\\log.txt", ios::out);
    fichier << "touche appuyée" << endl;
    fichier.close();

    return CallNextHookEx(hKeyb, nCode, wParam, lParam);
}

Resultat : rien du tout...
En fait je voudrais creer seulement le hook sur le processus qui charge la dll plutot qu'un hook global si possible.

lundi 7 août 2006 à 13:32:42 | Re : Hooks

elguevel

Salut,

Désolé je ne fait pas de C (enfin pas pour les DLL) mais en Delphi le DLLMain ne se déclenche pas de lui meme, il faut le lancer via un autre point d'entré qui indiquera au passage l'etat de la DLL :

Voila un morceau de code que j'utilise dans une de mes appli (Dll) Delphi :

------

procedure Main( Reason : Integer ) ;  <= Ton DllMain Ici
begin

  case reason of  <= ici fait un switch c'est plus prope !

    DLL_PROCESS_DETACH: // DLL Se ferme
    begin
        // Traiter evenement à la fermeture
    end;

    DLL_PROCESS_ATTACH: // DLL Se lance
    begin
      // Traiter evenement au lancement
    end;

  end;

end;

begin                  <= là on est dans le programme principal, 
                        . et c'est ce qui nous sert d'entry point
   DllProc := @Main;   
   DllProc(DLL_PROCESS_ATTACH);   <= appel du DLLMain !
end.

------

Enfin voila pour te donner une idée, cherche l'équivalent en C/C++.

A+


lundi 7 août 2006 à 14:31:23 | Re : Hooks

nightlord666

Membre Club
Non son code C est correct pour le DllMain.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.

lundi 7 août 2006 à 15:11:33 | Re : Hooks

elguevel

Bon ba désolé je vois pas alors... mais fait quand meme un switch dans ton DLLMain :-)


lundi 7 août 2006 à 15:16:03 | Re : Hooks

M5i9k

C'est fait :

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)

{

switch(fdwReason)

{

case DLL_PROCESS_ATTACH:

hDll = hinstDLL;

Hook();

break;

case DLL_PROCESS_DETACH:

UnHook();

break;

}

return TRUE;

}

Le hook s'installe bien mais on dirais que la fonction ne s'execute jamais :s


lundi 7 août 2006 à 15:22:53 | Re : Hooks

nightlord666

Membre Club
Pour elguevel :
En C++, lors du chargement d'une DLL, Windows va aller automatiquement exécuter la fonction DllMain, avec la raison donnée dans le deuxième paramètre (fdwReason).


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.

jeudi 10 août 2006 à 11:12:16 | Re : Hooks

elguevel

Merci pour cette precision ... ;-)


jeudi 10 août 2006 à 13:03:59 | Re : Hooks

nightlord666

Membre Club
Essaie d'enlever le Unhook de ton DllMain, je pense que ton problème doit venir de là.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.


1 2

Cette discussion est classé dans : dll, wparam, lparam, ncode, hkeyb


Répondre à ce message

Sujets en rapport avec ce message

Annuler Action Menu en Hookant [ par Zootella ] Hello, j'ai cette procédure hook: LRESULT CALLBACK HookMenuMessage(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode == HC_ACTION) { vs2005 kbdhook [ par Sebopop2 ] bonjour,j'ai cree une app avec une dll pour faire un hook global clavier, malheureusement celui ci ne fonctionne pas.#include"toolbox.h"</f Hook clavier et fenêtre premier plan [ par krokro6 ] Salut à tous, j'ai un petit problème avec ce code la : #include #include #include #include using namespace std;#define DLLEXPORT  __declsp Problème de reconnaissance d'un type [ par max12 ] #include "main.h"#define _WIN32_WINNT 0x0400#include // Fonction de gestion du hook <font color="#0000 Je trouve pas le bon code [ par vah bi ] Bonjour à tous , voilà je débute en c et comme editeur j'ai le visual c++.Je  fais actuellement une application avec l'api de visual c++  mais en lang Comment faire pour re_afficher un dialogue apres "RedrawWindow" API sous DEV cpp [ par LouisJean ] louisjean dev cpp Bonjours a tous!Comment faire pour remontrer le dialogue "Mon_DIALOG" en API wind32 sous DEV transcodage arabe anglais [ par elmarokinho ] bonjour, je suis en DUT 2e année ... je dois réaliser un projet pr la mi-mars  ;:realisation d'un logiciel de transcodage anglais/arabe ...<br Problème sous-classement [ par Albanderuaz ] Bonjour !J'ai un petit problème avec ce code qui est censé, grâce à un sous-classement, modifier le texte de tous les boutons grâce à un hook global. Sous classement foireux [ par HeavenForsaker ] Mon sous classement n'a pas l'air de fonctionner correctement, je voudrais receptionner le message WM_MOVING lors du déplacement de ma fenêtre. Voila


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.