begin process at 2012 05 29 09:02:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[HOOK]Encore le meme probleme..


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

[HOOK]Encore le meme probleme..

dimanche 9 novembre 2003 à 00:25:35 | [HOOK]Encore le meme probleme..

bdkiller

Salut,

Bon, après pas mal d'heures passés là-dessus, j'ai la DLL qui se compile sans erreurs, l'appli principale qui se compile sans erreurs également!! Super, génial!! Pas d'erreurs = signe de progression 8) Mais bon, j'ai toujours un problème.. ca ne marche pas!!

Je file voir le code, ca ce trouve j'ai encore fait des conneries:

[color=blue]Code de la DLL:[/color]

#include <stdio.h>
#include <vcl.h>
#include <windows.h>
#include "wkh.h"
#pragma hdrstop

// VARIABLES GLOBALES

static HHOOK gos_kbdHK;
static HINSTANCE hDLL;

// FONCTIONS USUELLES ( DECLARATION )
void Logkbd(int code, WPARAM *wParam,LPARAM lParam);

// FONCTIONS USUELLES ( DEFINITION )
void
Logkbd(int code, WPARAM *wParam,LPARAM lParam)
{
//Definitions des commandes de WinAMP
#define WINAMP_PREV 40044
#define WINAMP_PLAY 40045
#define WINAMP_PAUSE 40046
#define WINAMP_STOP 40047
#define WINAMP_NEXT 40048
#define WINAMP_VOLUME_UP 40058
#define WINAMP_VOLUME_DOWN 40059

//on trouve WinAMP
//"v1.x" on peux mettre "v2.x", mais
//c'est la question de compatibilité
HWND winamp = FindWindow("Winamp v1.x", 0);

LPMSG pMsg=(LPMSG)lParam;
if (pMsg->message == WM_KEYDOWN)
{
if ((pMsg->wParam == VK_F8))
{
SendMessage(winamp,WM_COMMAND,WINAMP_PLAY,0);
}
}
}

// DEFINITION DES FONCTION DE FILTRE

LRESULT CALLBACK kbdHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if(! ( (DWORD)lParam & 0x40000000))
return CallNextHookEx(gos_kbdHK,code,wParam,lParam);

Logkbd(code,&wParam,lParam);


return CallNextHookEx(gos_kbdHK,code,wParam,lParam);
}

_declspec(dllexport) bool SetkbdHook()
{
gos_kbdHK = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)kbdHookProc,hDLL,0);
return( (gos_kbdHK != 0) ? 1:0);
}

_declspec(dllexport) void UnSetkbdHook()
{
UnhookWindowsHookEx(gos_kbdHK);
}

BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpVoid)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
hDLL = hInstance;
break;

case DLL_PROCESS_DETACH:
UnSetkbdHook();
break;

case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}


[color=darkblue]Bon, j'ai fait les définitions et tout le bordel pour trouver la fenêtre de WinAMP, j'ai laissé la touche F8 pour faire au moins un test, voir si ca marche.. Je compile la DLL - pas de problèmes, aucun warning, ni error.. je suis content, je me dis que ca va marcher je passe au code de l'appli..[/color]

[color=blue]Code de l'appli:[/color]

//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <windows.h>
#include "Main.h"
#include "stdafx.h"

#pragma hdrstop
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TMainForm *MainForm;

typedef bool (*SKH) (void);
typedef void (*USKH) (void);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
SKH skh;
USKH uskh;

HMODULE hDLL;

char DLLname[256] = "wkh.dll";

char toaff[1024];

if(!(hDLL = LoadLibrary(DLLname)))
{
wsprintf(toaff,"Impossible de charger %s\nL'application va se términer",DLLname);
MessageBox(NULL,toaff,"ERREUR FATALE",MB_OK);
return 0;
}

skh = (SKH) GetProcAddress(hDLL,"SetkbdHook");
if( !skh ) MessageBox(NULL,"Impossible de charger la fonction exportee SetkbdHook()","ERREUR",MB_OK);
else
{
bool res = skh();
if( ! res ) MessageBox(NULL,"Impossible de définir les Hooks clavier....","ERREUR",MB_OK);
}

MessageBox(NULL,"Appuyez sur OK pour terminer le processus","INFO",MB_OK | MB_ICONINFORMATION);


uskh = (USKH) GetProcAddress(hDLL,"UnSetkbdHook");
if (uskh) uskh();
FreeLibrary(hDLL);

return 0;
}
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//----------------------------------------------------------------------------


[color=darkblue]Bon, la compilation du prog s'effectue correctement, pas de warnings, ni errors.. le prog se lance.. et je ne vois même pas de messages définis (en cas ou la DLL se chargerait pas, afficher nia nia nia erreure), là j'suis super content, je me dis: ca y est! c'est fait, wow! Je m'apprete à appuier sur la touche F8 pour tester play.. et là.. (vous imaginez moi en train de bouffer mes doigts et tirer mes cheveux) :cry: [/color]

Voilà voilà.. je sais pas il est ou le problème ici??! Tout se compile pafaitement, mais rien qui marche!! wouaaaaaaa!!
Sérieusement, quelqu'un peut-il résoudre ce problème?! Car je suis dessus dépuis déjà pas mal de temps, jour et nuit et je n'arrive à rien.. :roll: Je dois être un gros noOb de chez noobs.. mais bon, je vous prie de m'aider:

[color=red]AU SECOURS[/color]

En attendant une réponse,
ZiKO.
dimanche 9 novembre 2003 à 11:47:36 | Re : [HOOK]Encore le meme probleme..

BruNews

Administrateur CodeS-SourceS
Je te corrigerais bien ton prog mais je bosse sur VS...
C'est bien un hook systeme global que tu veux et non local de ton prog, on est d'accord.
Alors si oui procede ainsi:
Tu vires GetProcAddress etc de ton exe, tu lies la dll avec un h et un lib.
Exporte une func d'initialisation du hook depuis la dll et une pour stopper, tout doit se traiter en interne. Prends aussi l'habitude d'exporter en __stdcall et extern "C".
BruNews, ciao...
dimanche 9 novembre 2003 à 16:29:26 | Re : [HOOK]Encore le meme probleme..

bdkiller

Merci pour ta réponse, mais.. regarde:

Le header de la dll:

LRESULT CALLBACK kbdHookProc(int, WPARAM, LPARAM);

extern "C"
{
_declspec(dllexport) bool SetkbdHook();
_declspec(dllexport) void UnSetkbdHook();
}


Je sais pas quel hook, vu que je m'y connais pas - je ne vois pas de difference local, global.. Il me faut juste que quand je joue, pouvoir controller winamp sans faire ALT-TAB pour sortir du jeu..

Sur le forum de developpez.com quelqu'un m'as repondu en me disant qu'il fait virrer ceci de la dll:
case DLL_PROCESS_DETACH:
UnSetkbdHook();
break;

dimanche 9 novembre 2003 à 16:40:19 | Re : [HOOK]Encore le meme probleme..

BruNews

Administrateur CodeS-SourceS
Je pense aussi que ce n'est pas sa place car sur un hook global cela serait appele pour chaque processus finissant.
C'est au prog ayant cree le hook de l'enlever, et cela depuis l'exe qui doit appeler la fonction exportee par la dll a cet effet.
BruNews, ciao...
dimanche 9 novembre 2003 à 20:43:45 | Re : [HOOK]Encore le meme probleme..

bdkiller

je comprends le fonctionnement maintenant un peu mieux.. les evenements lors des appuis sont dans la dll, dll installe le hook.. mais je ne sais pas mettre tout ca en oeuvre.. :(
tu peux pas me corriger mon code stp?
dimanche 9 novembre 2003 à 20:54:20 | Re : [HOOK]Encore le meme probleme..

BruNews

Administrateur CodeS-SourceS
Il me faudrait le but exact de cette dll, je prefere l'ecrire moi meme que corriger, c'est moins long.
BruNews, ciao...
dimanche 9 novembre 2003 à 22:52:46 | Re : [HOOK]Encore le meme probleme..

BruNews

Administrateur CodeS-SourceS
Je t'ai fait exemple complet, DLL + exe avec boutons pour hook et unhook.
Mon exemple insere la date dans la 1ere fenetre Notepad trouvee (je n'ai pas WinAmp) quand on appuie sur F8. Simplement suffit d'envoyer F5 sur la Notepad.
Je pose exemple en source, tu iras prendre.
BruNews, ciao...
lundi 10 novembre 2003 à 00:46:39 | Re : [HOOK]Encore le meme probleme..

bdkiller

Merci beacoup! Je vais voir la source.
Le but de la DLL et/ou de prog:

Prog se lance, je lance aussi WinAmp. Ensuite je lance mon jeu, donc mon prog part en arrière plan, mais il surveille l'appui sur la touche F8 pour lancer la lecture à winamp, tout en arrière plan (car le jeu est en premier plan).
lundi 10 novembre 2003 à 01:07:45 | Re : [HOOK]Encore le meme probleme..

bdkiller

Superbe source BruNews! Merci beacoup! J'ai testé et ça marche parfaitement, ce que j'ai besoin!!

Juste une petite question:

Comment dans ce cas:
if(wParam != VK_F8)

mettre des "macros", du style VK_MENU + 41 ?

Merci encore milliard de fois!
lundi 10 novembre 2003 à 09:14:57 | Re : [HOOK]Encore le meme probleme..

BruNews

Administrateur CodeS-SourceS
Combinaisons de touche, tu dois tester GetAsyncKeyState ou GetKeyState.
BruNews, ciao...


Cette discussion est classée dans : code, wparam, color, winamp, lparam


Répondre à ce message

Sujets en rapport avec ce message

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 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 ( 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 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 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 Programmation C++ [ par spiky31 ] Bonjour Un peu de code d'abord : class A { public : LRESULT CALLBACK proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); A() { Win32 problème. [ par TeniX ] Salut, Voila j'ai crée de maniere simple une source qui exprime mon problème , je trouve pas la source du problème , enfaite quand les fenêtres sont l PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ] bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe 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 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


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 : 1,248 sec (4)

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