Hook clavier pendant progressbar

Résolu
Signaler
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
Messages postés
10
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
26 juillet 2005
-
Salut,

Je voudrais mettre un hook général sur le clavier pendant une progress bar.

J'ai essayé en mettant un WinExec sur un programme trouvé sur ce site qui fait un hook clavier de 15s, mais le problème c'est qu'on ne voit plus avancer la progress bar.

Si je met un hook global directement dans mon code cela devrait il marcher ???

25 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Tu peux mais quand feras tu un FindWindow ???
Exemple complet hook sur gestionnaire des taches est dans mes sources.

ciao...
BruNews, MVP VC++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Quel rapport entre un hook clavier et une progressbar ???
La progressbar avance a coups de SendMessage donc se fout absolument du clavier, non ?

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

En fait je veux empécher un ctrl alt suppr.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
J'ai deja fait des machins de ce genre, va voir dans les sources.
Note que c'etait surtout demo de hook parce que le CTRL-ALT-SUPP ne peut plus se hooker du tout a partir de Server 2003, le systeme bloquant tous les processus illico. Il reste par contre la solution de modif de cle dans la base de registres.

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Ca veut dire que sous windows xp on peut plus hooker le ctrl alt supp ???

Et pour la solution de la base de registre il faut faire quoi ?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Sous XP on peut encore hooker la boite, Server 2003 est apres XP.
HKEY_CURRENT_USER
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System
"DisableTaskMgr" = 1 pour invalider
Supprimer cette valeur pour reactiver.

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Donc j'ai pas besoin de modifier la base de registre alors.

Par contre mon hook marche pas: si je met un hook sur entrer pendant ma progressbar, j'aurais le message du hook seulement quand ma progressbar est arrivé au bout.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Un 'message' de hook ???
Un hook ne doit jamais afficher de messagebox ou autre truc bloquant, il doit repasser la main le plus rapidement possible sinon le systeme passera outre sans en tenir compte.

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Ah bon ?
Pourtant j'ai pris ça sur une de tes sources.

Comment je dois faire alors pour empécher un ctrl alt supp ???
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Un messagebox depuis un hook, surement pas dans mes sources ou alors tu auras lu en diagonale.
Tu peux par contre envoyer un PostMessage(), la pas de prob car non bloquant.

Arrange plutot la source que tu as mise ce jour, il y a du boulot pour la rendre presentable, tu auras tout le temps de voir les hooks plus tard.

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Le problème c'est que j'ai pas tout le temps de voir les hooks car j'ai abslolumet besoin de ça maintenant, mais bon ...

Merci quand même pour ton aide.
@++++
Messages postés
10
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
26 juillet 2005

Salut.

J'ai aussi un problème de hook.

SetWindowsHookEx(WH_KEYBOARD, kbdProc, thismod, 0);

Je fais un postmessage à mon appli et ça marche.

Mais je ne peux pas faire une détection de touche en dehors de mon application.

Mon but c'est de faire un switch entre mon appli et une autre appli à laquelle je n'ai pas accès au code. Je veux changer de fenêtre à volonté avec F11 et F12.

J'utilise SetForegroundWindow, je peux aller à l'application Calculatrice par exemple, mais pas revenir de calculatrice à mon appli.

C'est comme si le hook marche juste sur mon appli mais pourtant le dernier param de mon Hook est 0, donc devrait marcher...

Quelq'un à une idée?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Ton hook est bien dans une dll ?

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Désolé de te déranger encore Brunews mais j'ai juste une petite question .

Pourquoi lorsque je met un hook sur CTRL, si je met un messagbox pour contoler si ça marche c'est ok, mais par contre ça me bloque pas la touche ?

C'est à dire que si j'appuie sur CTRL ALT SUPP ça m'affiche la messagebox mais ça ouvre quand même le gestionnaire des taches.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
CTRL-ALT-SUPP a un statut special et est traite malgre le hook, tu reçois les codes de touche mais le systeme transmet dans tous les cas.
Faut hooker la creation de la boite.

ciao...
BruNews, MVP VC++
Messages postés
10
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
26 juillet 2005

Oui Brunews, le hook est le même que ton exemple.

Au départ j'ai essayé SetForegroundWindow directement dans le proc de la dll. J'ai vu ton message ici qui dit qu'il est mieux de passer par un PostMessage alors je l'ai fait.

Un truc : Je pouvais détecter F12 pour envoyer un msgbox quand je le faisais dans le proc de la dll. À partir de n'importe où. Mais pour SetForegroundWindow, ShowWindow, nada. Ça ne marche que si mon appli à le focus, pas ailleurs.

J'initialise la dll :

hnotify = FindWindow(NULL, "Virgo");

if(!hhk) hhk = SetWindowsHookEx(WH_KEYBOARD, kbdProc, thismod, 0);
return (int) hhk;

Dans le proc de la dll :

//touche F12
if(wParam == VK_F12) {
PostMessage(hnotify, JCD_SHOW, 0, 0);
}

Dans mon appli (dans le proc) :

//message reçu de la dll
case JCD_SHOW:
//SetForegroundWindow(hwndCible); //fonctionne
SetForegroundWindow(hwnd); //fonctionne pas
break;

Je me sert de la calculatrice pour tester.

Alors je peut donner le focus à la calc à partir de mon appli mais pas le contraire.

Merci si tu peux m'aider.

maintenant avec postmessage même les msgbox ne marche plus à l'extérieur de mon application
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Je n'ai pas tout compris au but recherche.
Donne cahier des charges precis.

ciao...
BruNews, MVP VC++
Messages postés
10
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
26 juillet 2005

Je veux un hook global sur le clavier. Ça me permet d'afficher ma fenêtre avec F12 et d'afficher une autre fenêtre avec F11.

D'un côté mon application et de l'autre l'application client.

Je veux être child-window du client et pouvoir soi cacher(F11) soi afficher ma fenêtre(F12).

C'est une application qu'il y a à mon travail. Je vais sauver du temps si je fais faire par mon programme des choses que l'application du travail ne fait pas. Je pourrais changer de fenêtre avec la souris mais je tape toujours au clavier alors ça irais mieux.

Je procède comme ça.

Je fais une dll que je compile sous vc++. Il y a à l'intérieur le hook. Au touche F11 et F12, un PostMessage est envoyé à mon programme.

Mon problème est que je n'arrive pas à agir de l'extérieur de ma fenêtre. Il faut absolument que ma fenêtre soi active pour que le hook agisse.

Sais-tu comment je peux faire ça? Je veux juste pouvoir changer entre deux fenêtre celle qui est active à l'aide des touches du clavier.

Ensuite je vais devoir envoyer des touches clavier au programme du travail pour y entrer les données.

Merci
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Va voir ici
http://www.cppfrance.com/code.aspx?ID=25238
il y a procedure complete qui ramene une instance de prog au 1er plan (celle dans vesion dialogbox).

ciao...
BruNews, MVP VC++
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Tu crois que c'est dans mes possibilités de hooker la boite de dialogue gestionnaire des taches ???

Faut récuperer son HWND ???