Communications exe / dll

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 - 1 juil. 2003 à 15:19
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 9 nov. 2005 à 00:15
Re-bonjour ...

J'utilise ce code dans une dll :

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

HWND hApp = NULL;

LRESULT CALLBACK CBTProc(INT nCode, WPARAM wParam, LPARAM lParam) {
  if (nCode == HCBT_CREATEWND) {
    if (hApp != NULL) PostMessage(hApp, WM_USER+1, 0, 0);
    return 1;
  }
  return 0;
}

VOID WINAPI SetAppWnd(HWND hWnd) {
  hApp = hWnd;
}

BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
  return TRUE;
}


Le but est le suivant : l'application met en place un hook global, destiné à intercepter les appels à CreateWindow et CreateWindowEx ... L'enjeu étant la création d'un antipopup pour Internet Explorer, efficace et surtout gratuit...

Mais lorsque dans mon programme, j'appelle (dynamiquement) la procédure SetAppWnd comme suit (dans le WM_CREATE de la WndProc de ma fenetre):

typedef VOID WINAPI (*SETAPPWND)(HWND);

SETAPPWND SetAppWnd = (SETAPPWND) GetProcAddress(hLib, "SetAppWnd@4"); // hLib étant l'instance de la dll chargée précedemment avec LoadLibrary

SetAppWnd(wndMain); // wndMain étant le HWND de ma fenetre principale


hApp dans la dll vaut toujours NULL, et la dll ne notifie donc pas le programme qu'elle vient de tuer une fenetre...

De plus je comptais communiquer le HHOOK mis en place par le programme à la dll afin de pouvoir appeler CallNextHookEx de manière correcte, mais j'ai le même problème...

Je tiens mes sources à disposition, si vous voulez tester, écrivez-moi un message :)

Merci d'avance !

18 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 15:26
je ne comprends pas ton prob avec CallNextHookEx.
Fais toi creer le hook par la dll et tu n'auras pas a le communiquer. Une simple fonction InitMonHook() et une pour le fermer exportees par la dll devraient suffire.
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 15:56
Pour le hook, ok, mais pour mon passage de paramètres ? :s
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 16:00
faudrait voir ce que tu dois avoir comme communication entre dll et exe.
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 16:11
-------------------------------
Réponse au message :
-------------------------------

> faudrait voir ce que tu dois avoir comme communication entre dll et exe.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Pour le hook, ok, mais pour mon passage de paramètres ? :s
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > je ne comprends pas ton prob avec CallNextHookEx.
> > > Fais toi creer le hook par la dll et tu n'auras pas a le communiquer. Une simple fonction InitMonHook() et une pour le fermer exportees par la dll devraient suffire.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Re-bonjour ...
> > > >
> > > > J'utilise ce code dans une dll :
> > > >
> > > >
> > > > #define WIN32_LEAN_AND_MEAN
> > > > 
> > > > #include <windows.h>
> > > > 
> > > > HWND hApp = NULL;
> > > > 
> > > > LRESULT CALLBACK CBTProc(INT nCode, WPARAM wParam, LPARAM lParam) {
> > > >   if (nCode == HCBT_CREATEWND) {
> > > >     if (hApp != NULL) PostMessage(hApp, WM_USER+1, 0, 0);
> > > >     return 1;
> > > >   }
> > > >   return 0;
> > > > }
> > > > 
> > > > VOID WINAPI SetAppWnd(HWND hWnd) {
> > > >   hApp = hWnd;
> > > > }
> > > > 
> > > > BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
> > > >   return TRUE;
> > > > }
> > > > 

> > > >
> > > > Le but est le suivant : l'application met en place un hook global, destiné à intercepter les appels à CreateWindow et CreateWindowEx ... L'enjeu étant la création d'un antipopup pour Internet Explorer, efficace et surtout gratuit...
> > > >
> > > > Mais lorsque dans mon programme, j'appelle (dynamiquement) la procédure SetAppWnd comme suit (dans le WM_CREATE de la WndProc de ma fenetre):
> > > >
> > > >
> > > > typedef VOID WINAPI (*SETAPPWND)(HWND);
> > > > 
> > > > SETAPPWND SetAppWnd = (SETAPPWND) GetProcAddress(hLib, "SetAppWnd@4"); // hLib étant l'instance de la dll chargée précedemment avec LoadLibrary
> > > > 
> > > > SetAppWnd(wndMain); // wndMain étant le HWND de ma fenetre principale
> > > > 

> > > >
> > > > hApp dans la dll vaut toujours NULL, et la dll ne notifie donc pas le programme qu'elle vient de tuer une fenetre...
> > > >
> > > > De plus je comptais communiquer le HHOOK mis en place par le programme à la dll afin de pouvoir appeler CallNextHookEx de manière correcte, mais j'ai le même problème...
> > > >
> > > > Je tiens mes sources à disposition, si vous voulez tester, écrivez-moi un message :)
> > > >
> > > > Merci d'avance !
> > >
> >
>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 16:12
Je voudrais juste que la dll envoie un message à la fenetre principale de l'exe, mais çà merde un poil... Tu veux jeter un oeil sur les sources ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 16:23
PostMessage() ne va pas ?
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 16:28
En théorie oui mais en pratique non, je ne comprend pas ou se situe l'erreur
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 16:33
mets ici juste comment tu envoies ton PostMessage et comment tu le recois dans la wndproc.
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 16:42
Code (complet) de la dll :

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

HWND wnd = NULL;
UINT msg = WM_USER;

LRESULT CALLBACK CBTProc(INT nCode, WPARAM wParam, LPARAM lParam) {
  if (nCode == HCBT_CREATEWND) {
    PostMessage(wnd, msg, 0, 0);
    return 1;
  }
  return 0;
}

VOID WINAPI SetWndApp(HWND hWnd, UINT uMsg) {
  wnd = hWnd;
  msg = uMsg;
}

BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
  return TRUE;
}


Code de la WndProc :

case WM_CREATE:
    SetWndApp(hWnd, WM_USER+1);
    return 0;
case (WM_USER+1):
    TrayIcon.hIcon = xKill;
    lstrcpy(TrayIcon.szTip, "Enragé");
    Shell_NotifyIcon(NIM_MODIFY, &TrayIcon);
    return 0;
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 16:53
UINT msg = WM_USER; dans dll !
et tu testes WM_USER+1 dans wndproc !
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 17:02
Ben oui mais non ... J'appelle SetWndApp qui fixe le message envoyé par la dll à WM_USER+1, et meme en le testant en 'dur' çà merde pareil... de plus, si je fais çà :

#define WIN32_LEAN_AND_MEAN

#include <windows.h>

static HHOOK hHook = NULL;

LRESULT CALLBACK CBTProc(INT nCode, WPARAM wParam, LPARAM lParam) {
  if (nCode == HCBT_CREATEWND) {
    return 1;
  }
  return CallNextHookEx(hHook, nCode, wParam, lParam);
}

VOID WINAPI AddHook(VOID) {  if (hHook NULL) hHook SetWindowsHookEx(WH_CBT, CBTProc, GetCurrentProcess(), 0);
}

VOID WINAPI RemHook(VOID) {
  if (hHook != NULL) UnhookWindowsHookEx(hHook);
}

BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
  return TRUE;
}


Le hook ne s'installe plus (malgré appels aux fonctions idoines dans l'exe)

Au secours *va péter un cable*
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 17:12
Bon tu veux qu'on s'y mette a 2 ?
Tu mes postes le projet complet. Faut aussi bien definir precis le cahier des charges et faudra se coordonner.
BruNews, ciao...
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
1 juil. 2003 à 17:19
oki, renvoie moi ton mail et je t'envoie tout çà :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juil. 2003 à 17:23
c'est fait sur ton mail.
BruNews, ciao...
0
MisterDa Messages postés 2 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 6 avril 2004
6 avril 2004 à 11:28
Bonjour, j'ai aussi un problème de communication exe/dll.
Le but et de capturer les coordonnées de ma souris.

J'ai dans le dll un hook sur ma souris qui des qu'elle bouge poste un message a mon exe :

PostMessage(FenetrePrincipal,WM_MOUSE_CATCHED, wParam, lParam);
avec #define #define WM_MOUSE_CATCHED (WM_USER + 1)

Dans mon exe je récupére le message. recupére le lParam dans une structure mouse.

Tout marche bien quand le curseur est dans la fenetre de mon exe, mais des que je sort de la fenetre tout plante. Visiblement kan je suis en dehors de ma fenetre lParam est vide.

Kk un pourrait m'aider ? merci d'avance

Qu'importe le flacon pour vu qu'on ait l'ivresse
0
MisterDa Messages postés 2 Date d'inscription samedi 13 septembre 2003 Statut Membre Dernière intervention 6 avril 2004
6 avril 2004 à 13:43
Dsl du dérangement j'ai compris mon erreur..., c'est une fois avoir poster que j'ai eu l'illumination.

Qu'importe le flacon pour vu qu'on ait l'ivresse
0
clem0338 Messages postés 65 Date d'inscription mercredi 19 juin 2002 Statut Membre Dernière intervention 9 mars 2008
8 nov. 2005 à 15:34
Bonjour, je suis intervenu dans ce post et j'ai perdu le fil a partir
des mails, je suis dans le meme cas, auriez vous trouvé la solution??



merci par avance

Clem0338
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 nov. 2005 à 00:15
Répondu en MP.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous