begin process at 2010 02 10 11:54:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

GUI

 > 

Hook et focus


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

Hook et focus

dimanche 3 juin 2007 à 23:41:36 | Hook et focus

krokro6

Salut à tous, j'ai un gros problème depuis que j'ai commencé à utiliser les hooks, le problème est le suivant : pourquoi quand j'apelle ma fonction qui met en place le hook (InitHook) à partir d'un loader le hook ne se place que sur le programme avec lequel j'ai lancé la fonction InitHook ? exemple : http://rafb.net/p/QjV8FS98.html ce code source de hook enregistre les coordonnées de la souris à chaque appui sur le bouton droit de la souris. Une fois ce code compilé j'obtiens ma jolie dll qui marche à merveille mais le problème, c'est qu'elle ne marche que lorsque je fais un click droit sur le programme avec lequel j'ai appellée la fonction InitHook :'(. Personne ne peut m'aider à régler ce problèmpe je vous en supplie :>. Merci à tout ce qui m'aideront.
lundi 4 juin 2007 à 00:16:36 | Re : Hook et focus

BruNews

Administrateur CodeS-SourceS
Un handle de fichier est attribué au processus l'ayant demandé, totalement invalide dans un autre processus.

ciao...
BruNews, MVP VC++
lundi 4 juin 2007 à 12:36:19 | Re : Hook et focus

krokro6

Ah ok, merci, mais je peux faire quoi alors pour que cela marche sur les autre processus stp ?
lundi 4 juin 2007 à 13:13:16 | Re : Hook et focus

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Tu peux par exemple réouvrir le fichier dans ta MouseProc s'il ne l'est pas déjà (Tu teste que l'écriture se fait. Si elle ne se fait pas, tu ouvre le fichier).

Mais je sais pas ce que ça donne, plein de processus écrivant dans le même fichier...

DuplicateHandle permet de générer des handles valides dans les autres processes, mais le souci devient alors de transmettre la valeur de ces handles aux processus.
lundi 4 juin 2007 à 15:34:23 | Re : Hook et focus

BruNews

Administrateur CodeS-SourceS
Inutile le test d'écriture, ne peut pas passer.

Dans la mouseProc:
char buf[100];
DWORD d;
hfl = CreateFile(...); // avec OPEN_ALWAYS
if(hfl == INVALID_HANDLE_VALUE) return;
SetFilePointer(hfl, 0, 0, FILE_END);
// mettre coordonnées à tamponner dans buf (complet avec CRLF en finale)
WriteFile(hfl, buf, strlen(buf), &d, 0);
CloseHandle(hfl);

Ainsi tu vires les stream qui n'ont rien à faire dans du code API. Une DLL de hook doit être la plus légère possible.

ciao...
BruNews, MVP VC++
lundi 4 juin 2007 à 16:36:42 | Re : Hook et focus

rt15

Membre Club Administrateur CodeS-SourceS
Heu... Pourquoi le test ne passerait-il pas ?
La première fois, ok, il ne passe pas, mais pourquoi ne passerait-il pas la deuxième ?

Si après échec d'écriture, on ouvre le fichier avec FILE_SHARE_WRITE et que l'on met son handle dans une variable globale ou statique, pourquoi le handle perdrait sa validité (Ces variables son unique pour chaque processus utilisant la dll.) ?

Je dis ça juste pour éviter le CreateFile à chaque message logué, qui est certainement pas anodain en matière de temps CPU (Vérification des droits...). Et comme on est dans un hook, autant que ça tourne vite.
[ Lien ]

lundi 4 juin 2007 à 18:17:23 | Re : Hook et focus

krokro6

if(wParam == WM_RBUTTONDOWN) { GetCursorPos(&Mouse); char CoordCX[5]; char CoordCY[4]; sprintf(CoordCX, "%ld", Mouse.x); sprintf(CoordCY, "%ld", Mouse.y); DWORD d; HANDLE hfl = CreateFile("C:\\FichierLog.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hfl == INVALID_HANDLE_VALUE) MessageBox(NULL, "Impossible de creer un fichier MAP", "Erreur", MB_ICONERROR); SetFilePointer(hfl, 0, 0, FILE_END); WriteFile(hfl, CoordCX, strlen(CoordCX), &d, 0); WriteFile(hfl, CoordCY, strlen(CoordCY), &d, 0); CloseHandle(hfl); } Ce code ne marche pas :(.
lundi 4 juin 2007 à 18:44:26 | Re : Hook et focus

krokro6

Bon en fait tout marche bien mais le problème c'est que j'obtiens des petits carrés à la place des coordonnées...

if(wParam == WM_RBUTTONDOWN)
{
GetCursorPos(&Mouse);

char CoordCX[5];
char CoordCY[4];

sprintf(CoordCX, "%ld", Mouse.x);
sprintf(CoordCY, "%ld", Mouse.y);

DWORD d;

HANDLE hfl = CreateFile("FichierLog.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if(hfl == INVALID_HANDLE_VALUE)
    MessageBox(NULL, "Impossible de creer un fichier MAP", "Erreur", MB_ICONERROR);

SetFilePointer(hfl, 0, 0, FILE_END); WriteFile(hfl, CoordCX, strlen(CoordCX), &d, 0);

WriteFile(hfl, CoordCX, 5, &d, 0); CloseHandle(hfl);
WriteFile(hfl, CoordCY, 4, &d, 0); CloseHandle(hfl);
}

Voila merci de votre aide.
lundi 4 juin 2007 à 18:48:43 | Re : Hook et focus

krokro6

Arf j'ai mal copié le code, tout ce que vous voyez en double bha n'y faites pas attention.
lundi 4 juin 2007 à 18:53:32 | Re : Hook et focus

BruNews

Administrateur CodeS-SourceS
1 seul WriteFile, dur dur...

char buf[28], *c;
c = bnitoa(Mouse.x, buf);
*c++ = ' '; // SEPARATEUR
c = bnitoa(Mouse.y, c);
WriteFile(hfl, buf, c - buf, &d, 0);
CloseHandle(hfl); // FINI

Tu trouveras bnitoa() ici:
http://www.cppfrance.com/code.aspx?ID=36937

ciao...
BruNews, MVP VC++

1 2

Cette discussion est classée dans : problème, fonction, focus, hook, inithook


Répondre à ce message

Sujets en rapport avec ce message

Instance [ par victorcoasne ] Bonjour,J'ai un programme avec une dll. Sous dev-c++ en compilant la dll comme du C++ la fonction DllMain n'est pas appellée. Je l'appelle donc avec problème avec la fonction InternetConnect [ par progrima ] Salut tout le monde!!! est ce que quelqu'un pourrait m'aider à trouver l'erreur???? l'ouverture de la connexion avec la fonction InternetOpen est bon Question sur les dll [ par flatou ] Salut a tous Je me pose une question : soit un programme qui a effectuer un hook sur une fonction de la dll kernel32.dll. Si mon deuxieme programme co problème avec la fonction pow... [ par othland ] sltau fait, j'arrive pas à interpreter le résultat de la fonction pow:int pk;float num;double pui;pui=pow(num,pk); quand je met pk=23 et num= 15 par e Variable pour un hook [ par ChrOnOs83 ] Bonjour à tous, Il y a un problème sur lequel je bloque depuis déjà plusieurs jours.J'ai créé une dll pour faire un hook clavier. Quand j'appelle la f ShellExecute() [ par ncoder ] Bonjour à tous,J'ai un problème où je n'y comprends rien du tout :J'ai fait un hook global, pour savoir qd un certain type de fenètre s'ouvre.Jusque l Problème avec la fonction OnTimer() sous vc++ [ par Djule01 ] Bonjour, Je réalise actuellemnent un casse-briques sous visual c++ 6.0 et j'ai un problème concernant la fonction OnTimer(). J'en suis au stade ou j Problème suppression fichier [ par GIGN90 ] Bonjour à tous, je suis entrain de développer une application et j'utilise gtkmm pour l'interface graphique.Le souci c'est qu'à un moment je dois supp problème d'une fonction sur vs.net c++ [ par stgi02 ] salut, j 'aimerai avoir des explications sur : char t; // je comprends t = (e->get_KeyChar()); // je comprends this->essai->Write((LPCVOID *)&t,sizeof Problème avec la fonction system() [ par bouba ] Bonjour, dans un programme de dois lancer d'autres exécutables. J'ai utilisé la fonction system() pour réaliser l'exécution des ces progs. Ca marche m


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,733 sec (3)

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