Hook clavier pendant progressbar

Résolu
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 3 oct. 2004 à 15:21
cs_sabran Messages postés 10 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 26 juillet 2005 - 6 oct. 2004 à 01:21
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

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

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 15:53
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++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 18:03
En fait je veux empécher un ctrl alt suppr.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 18:12
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++
0

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

Posez votre question
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 18:38
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 ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 18:49
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++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 19:02
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 19:07
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++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 19:13
Ah bon ?
Pourtant j'ai pris ça sur une de tes sources.

Comment je dois faire alors pour empécher un ctrl alt supp ???
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 19:18
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++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 19:20
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.
@++++
0
cs_sabran Messages postés 10 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 26 juillet 2005
3 oct. 2004 à 22:40
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 22:44
Ton hook est bien dans une dll ?

ciao...
BruNews, MVP VC++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
3 oct. 2004 à 23:05
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 oct. 2004 à 23:10
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++
0
cs_sabran Messages postés 10 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 26 juillet 2005
4 oct. 2004 à 00:22
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2004 à 01:17
Je n'ai pas tout compris au but recherche.
Donne cahier des charges precis.

ciao...
BruNews, MVP VC++
0
cs_sabran Messages postés 10 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 26 juillet 2005
4 oct. 2004 à 02:01
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2004 à 10:25
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++
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
4 oct. 2004 à 17:37
Tu crois que c'est dans mes possibilités de hooker la boite de dialogue gestionnaire des taches ???

Faut récuperer son HWND ???
0
Rejoignez-nous