begin process at 2012 05 29 12:51:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

MFC

 > 

MouseHook avec DialogBox


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

MouseHook avec DialogBox

jeudi 4 août 2011 à 19:08:27 | MouseHook avec DialogBox

mouloudh


Bonjour la communauté,
Je désespère. Voilà plus d'un mois que je cherchais une solution pour un programme (une souris visuelle qui doit rester toujours visible)-
Cela m'a amené à la découverte du Hook. Un membre du forum m'avait conseillé une doc pour Win32.
J'ai récupéré un source sur le forum (cppfrance_DISTANCE-PARCOURRUE-SOURIS-WIN32-HOOK___Page.zip). Je l'ai modifié comme suit:

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID lpReserved)
{
// si attachée par un nouveau processus, sauvegarder l'instance de la librarie,
// rechercher la fenêtre destinatrice des messages et récupérer l'Id du message
// (unique dans le système)
if(fdwReason == DLL_PROCESS_ATTACH)
{
m_hDllInstance = hInstance;
m_hWndDest = FindWindow(_T("VMouse_MainFrame"), NULL);
m_MsgMouseHook = RegisterWindowMessage(MSG_MOUSEHOOK);
m_dwProcessId = GetCurrentProcessId();
}

// retour
return TRUE;
}

BOOL MOUSEHOOKAPI InstallHook(HWND hWnd)
{
// si hook déjà installé
if(m_hHook != NULL)
return FALSE;
// installation hook
m_hWndDest = hWnd;
m_hHook = SetWindowsHookEx(WH_MOUSE, MouseProc, m_hDllInstance, 0);
return (m_hHook != NULL);
}
BOOL MOUSEHOOKAPI RemoveHook()
{
// si pas de hook installé
if(m_hHook == NULL)
return TRUE;

// suppression hook
return UnhookWindowsHookEx(m_hHook);
}


LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// en fonction du code
if(nCode == HC_ACTION)
{
if(m_hWndDest && (wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN))
{
// récupération coordonnées de la souris
LPMOUSEHOOKSTRUCT lpmhs = (LPMOUSEHOOKSTRUCT) lParam;
PostMessage(m_hWndDest, m_MsgMouseHook, wParam, 0);
}
}
// retour
return CallNextHookEx(m_hHook, nCode, wParam, lParam);
}

Avec toutes les variables en static, comme à l'origine.
Depuis 2 mois que je cherche à modifier le code de la fenêtre cible, sans succès. Je suis parvenu à vérifier que mon Hook génère le bon code (dans un EditBox), sans plus. Le traitement graphique, echec total.

J'ai décidé de travailler avec un DialogBox pour me simplifier les traitements graphiques, et toujours sans succès! Je ne détecte pas le message du Hook. Je l'ai placé dans OnPaint, toujours rien.
extrait de OnPaint()
.
.
.
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(message == m_MsgMouseHook)
MsgMouseHook(wParam, lParam);
CDialog::OnPaint();
}
}

void CVMouseDlg::MsgMouseHook(WPARAM wParam, LPARAM lParam)
{
if(message == m_MsgMouseHook)
{
switch(wParam)
{
case WM_LBUTTONDOWN :
m_CValue = "Left";
DisplayButton(m_CValue);
UpdateData();
break; //Edit_SetText(m_hEdit,"Right")
case WM_RBUTTONDOWN :
m_CValue = "Right";
DisplayButton(m_CValue);
UpdateData();
break; //Edit_SetText(m_hEdit,"Right")
}
}
}


Là, je commence à saturer!
Merci infiniment pour toute aide! si plus de code est nécessaire, évidemment n'hésitez pas! C'est sûr, il est loin d'être parfait.

Make it simple, keep it easy !
vendredi 5 août 2011 à 09:34:23 | Re : MouseHook avec DialogBox

buno

Administrateur CodeS-SourceS
Hello,
Je pense que tu parles de cette source.
Que cherches-tu à faire exactement?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 5 août 2011 à 23:05:25 | Re : MouseHook avec DialogBox

mouloudh


Bonjour,
Il s'agit bien de cette source. Ce que je souhaite faire est ceci:
au repos, ma souris est:

[ ][ ]
[____]
au clic gauche, je dois avoir:

[X][ ]
[____]


et au clic droit:

[ ][X]
[____]

J'ai réussi à modifier le code du Hook pour détecter le bon clic, puis l'afficher dans l'EditBox, mais ce je souhaite faire, c'est superposer des images bmp, les unes sur les autres. Après tant d'essais, je crois que le mieux pour moi, serait de tenter les Dialog box en MFC, et encore les plus simples, c'est à dire, sans les DocumentViews etc..Mais alors, où, intégrer l'appel du Hook? J'ai essayé dans la classe MyDialog::OnPaint() en y insérant le test if(message == m_MsgMouseHook)
MsgMouseHook(wParam, lParam);

sans succès, MsgMouseHook rends une valeur, et il ne faudrait pas! Enfin, je m'y perds en GROS!

Que faut-il modifier dans le DialogBox pour que Hook soit pris en compte?

Dans la version Win32, j'ai réussi à afficher la première image (aucun clic). J'ai ajouté 2 ou 3 booléens que je modifie par la fonction MsgMouseHook, ensuite je récupère leurs valeurs dans WndProc (où j'ai réussi à mettre le premier affichage), et je pensais qu'avec l'aide des booléens, je pourrais choisir l'image à afficher, une manière d'effacer l'image initiale, puis de mettre à la place la bonne image etc...Mais toujours pas! Et voilà toute l'histoire de ce programme! Encore mille merci pour toute aide.

Make it simple, keep it easy !


Cette discussion est classée dans : wparam, hook, lparam, if, msgmousehook


Répondre à ce message

Sujets en rapport avec ce message

HOOK - Help [DevCPP] [ par guitoulefoux ] Bonjour,J'essaye de faire un hook (mon 1er) mais a chaque fois qu'il se lance j'ai un pb d'affectation mémoire.en fait le HOOK récupère les actions cl Combo des touches dans un Hook [ par bdkiller ] Salut,encore moi avec les Hooks xDJ'arrive à mettre les hook en place, ca marche, sauf que je sais pas comment faire pour intercepter la combinaison d Hook clavier sous windows [ par gamani5 ] sltje sais il y a deja beaucoup de tuto sur le sujet mais j en ai lu plein mais j ai toujours un probleme, j arrive a detecter l utilisation d une tou Hook messages de windows [ par deck_bsd ] Bonjour a tous,Voila je suis sur le point de finir mon 1er hook, mais voila , il ne fonctionne que une fois. Il intercepte une fois le message voulu ( 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 Windows Message OnNotifyIcon [ par unionx ] bonjourje veux savoir ou je vais trouver la fonction ::OnNotifyIcon(WPARAM wParam, LPARAM lParam) j'ai bien chercher dans la partie ClassWizard et eve lparam wparam [ par sokotanic ] salut a quoi cert wpara et lparam , s'il vous plait je veux l'explication de quelqu'un qui avais d'experience pas de msdn ou d'une autre documentati Combox me bloquant l'appli [ par SnOOpss ] Bonjour j'ai essayé de simplifier au maximum mon code mais meme codé comme cela j'ai le meme probleme. Tant que je clique par sur le comboBox tout est Hooks [ par 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 d Boite de dialogue [ par bioopovega ] Bonjour,J'ai un petit probleme, quand je créer une boite de dialogue dans le fichier main.cpp, je n'est pas d'erreur, mais quand je veux inclure la cr


Nos sponsors


Sondage...

Comparez les prix

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,437 sec (4)

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