IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

réaliser un Hook de type WH_CALLWNDPROC


Sujet :

Windows

  1. #1
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut réaliser un Hook de type WH_CALLWNDPROC
    Bonsoir,

    Je reviens vers vous afin de trouver une aide salvatrice. Je me suis mis en tête de placer dans une .DLL qq fonctions effectuant un travail sur la 'zone non-cliente' de la TForm appellante.
    J'en suis venu a penser que je devais passer par des Hooks pour gérer le dessin et les évènements (clavier ou souris) tout au long de la 'vie' de la form.
    Pour ce qui est des Hooks claviers et souris, pas vraimment de gros problèmes puisqu'il 'suffit' de suivre le tuto de gRRosminet ici.
    Mais, je cherche a assurer le travail dans la zone non-cliente automatiquement et je pensais devoir passer par un Hook de type WH_CALLWNDPROC.
    Dèja, première question : suis je sur la bonne piste ?
    Ensuite, même si j'obtiens l'effet recherché a première vue (durant les premiers instants), j'obtiens en réalité un tres beau plantage du plus bel effet (qui m'oblige même dans certains cas a rebooter ma machine ! ) ... dois donc y avoir un problème qq part.
    Je touche ici aux limites de mes maigres connaissances, aucune formation théorique ... que voulez vous ...
    Voici je tout petit bout de code concernant le hook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    LRESULT CALLBACK CallWndProc(int nCode,	WPARAM wParam,	LPARAM lParam)
    {
    if (nCode < 0)
    {
    	return CallNextHookEx(VueDonnees->CWHookHandle,nCode,wParam,lParam);
    }
    else
    {
    CWPSTRUCT *msg = (CWPSTRUCT *)lParam;
    	switch (nCode)
    	{
    	case HC_ACTION:
    		if (msg->message == WM_NCPAINT )
    		{
    			if (Bloquer != true)
    			{
    				//'fonctions de dessin' dans la zone non cliente...
    			}
    		}
    		break;
    	default:
    		break;
    	}
    return CallNextHookEx(VueDonnees->CWHookHandle,nCode,wParam,lParam);
    }
    }
    Je ne sais pas trop comment m'en sortir ... ni ce qui est faux dans ce que je fais. J'ai vu qu'il y a des appels possibles a des fonctions telles que VirtualProtect et cie, mais j'avoue être un peu pommé ...

    Merci par avance pour vos conseils,

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Sunchaser.
    Je ne connais pas non plus mais apparement ca semble coller avec la Doc et l'aide en ligne, mais pour planter Windows est tu sur des Handlers que tu passe.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,
    A priori, je dirais qu'il n'y a pas de pointeur 'NULL' a ce stade ... les seuls messages d'erreur que j'ai pu entrevoir ne laissent d'ailleurs pas présager ce
    genre de cas.
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Personne ne l'aime mon grand méchant hook ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    J'aurais peut être du poser cette question dans la rubrique 'Developpement Windows' moi, au fait ... Je suis venu ici presque 'machinalement' mais bon.
    Faut peut être que je demande a ce que qqu'un déplace le sujet, non ?

    Merci,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Citation Envoyé par Sunchaser
    qqu'un déplace le sujet
    Fait
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Sunchaser.
    J'ai trouve un lien sur ce Forum il donne aussi un lien sur MSN.
    A+
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    premier plantages que j'avais sur mes hooks c'était parce que je voulais le forcer sans passer par une dll. Deuxieme plantage c'est parce que dans mon callback (pour toi CallWndProc) les pointeurs de mes classes étaient vues à NULL donc quand je faisais ma_class->fonction() plantage. En gros je me suis rendu compte qu'il y a un souci avec le partage mémoire pour les variables globals voir ce topic
    http://www.developpez.net/forums/sho...d.php?t=222002 si tu trouve une solution je suis tres preneur...

  9. #9
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    J'ai une question subsidiaire qui pourrait peut être éclairer ma lanterne finalement ...
    Je teste un petit hook sur la souris ainsi (pour la procédure en tout cas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    MOUSEHOOKSTRUCT *mousepos = (MOUSEHOOKSTRUCT*)lParam;
    	 //NC bouton gauche enfoncé
    	 if (wParam == WM_NCLBUTTONDOWN)
    	 {
    		ScreenToClient(baseForm->Handle, &mousepos->pt);
    		if (mousepos->pt.x > StockRect.left && mousepos->pt.x < StockRect.right)
    		{
    			DessinBouton(1);
    		}
    		else
    		{
    			DessinBouton(0);
    		}
    	 }
    	 //NC bouton gauche relaché
    	 if (wParam == WM_NCLBUTTONUP)
    	 {
    		ScreenToClient(baseForm->Handle, &mousepos->pt);
    		if (mousepos->pt.x > StockRect.left && mousepos->pt.x < StockRect.right)
    		{
    			DessinBouton(0);
    		}
    	 }
    	 //NC mouse move
    	 if (wParam == WM_NCMOUSEMOVE)
    	 {
    		ScreenToClient(baseForm->Handle, &mousepos->pt);
    		if (mousepos->pt.x > StockRect.left && mousepos->pt.x < StockRect.right)
    		{
    			DessinBouton(0);
    		}
    	 }
    return CallNextHookEx(VueDonnees->MouseHookHandle,nCode,wParam,lParam);
    }
    Le problème : Si j'agrandis la fenêtre, ou que je la reduis puis la restaure par exemple, je ne capte plus les messages indiqués ... .
    Plus du tout...

    Que se passe t il ?
    D'ou proviens ce phénomène ?
    Il y a forcement qqchose que n'ais pas pigé, je sais.
    Et cela est de même pour le hook WH_CALLWNDPROC ...

    Merci d'avance pour vos conseils éclairés,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Sunchaser.
    Est ce que le fait de reduire ou restaurer ne modifierait pas le Handler de la fenetre, ces types de modifications detruisent et recree peut etre un nouveau Handle.
    Ca serait peut etre interressant de tester le Handle avant modif puis apres modif pour etre sur.
    A+
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Citation Envoyé par Sunchaser
    Bonsoir,
    Le problème : Si j'agrandis la fenêtre, ou que je la reduis puis la restaure par exemple, je ne capte plus les messages indiqués ... .
    Plus du tout...
    @ +
    Je me cite tout seul, j'adore ... tout cela pour dire que je viens de tester et que par exemple : si je 'maximise' la fenêtre puis la remet a sa taille initiale, on dirait que le hook n'existe plus.
    J'ai testé avec un bon truc bien 'bourrin', c'est a dire des ShowMessage par exemple (rien avoir avec des 'chauds mais sages', rien a voir...) et je puis vous assurer que même si au début les hooks sont actifs, apres redimensionnement il ne le sont plus.

    Dur, dur pour mon petit cerveau ...

    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  12. #12
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Sunchaser.
    Si j'ai bien lut au debut ton Hook est dans une DLL.
    J'ai trouve dans ma doc un exemple que j'ai telecharge je ne sais plus ou je le joind si ca peu aider.
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  13. #13
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut


    Merci beaucoup, je vais jeter un oeil.
    J'ai vraimment du mal a tout comprendre...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  14. #14
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,

    Bon a priori, j'ai résolu mon problème ... Il s'agirait de, comment dire, d'un problème de 'portée' des hooks.
    Pour lancer mes hooks, j'ai donc écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ThId = GetCurrentThreadId();
    	 VueDonnees->MouseHookHandle = SetWindowsHookEx(WH_MOUSE,
    											 (HOOKPROC)MouseProc,
    											 NULL,
    											 ThId);
    	 VueDonnees->GMHookHandle = SetWindowsHookEx(WH_GETMESSAGE,
    											 (HOOKPROC)GetMsgProc,
    												 NULL,
    											 ThId);
    C'est peut être idiot pour ceux qui savent 'hooker', mais bon, j'ai ramé ...
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. [WD16] Réaliser un graphe de type courbe ou nuage en fonction du temps
    Par law56100 dans le forum WinDev
    Réponses: 2
    Dernier message: 16/11/2011, 15h11
  3. comment réaliser une animation du type leral.sn
    Par papisdoums dans le forum Flash/Flex
    Réponses: 1
    Dernier message: 11/03/2010, 23h51
  4. Réalisation d'une sélection type lasso
    Par LaDeveloppeuse dans le forum OpenGL
    Réponses: 4
    Dernier message: 18/01/2010, 20h33
  5. [VB.NET] Direction à choisir pour réaliser ce type de Form?
    Par jazz matazz dans le forum Windows Forms
    Réponses: 14
    Dernier message: 21/04/2006, 03h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo