begin process at 2010 02 10 06:30:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > HOOK GLOBAL (SYSTEM-WIDE HOOK) - BLOCAGE DE TOUCHES

HOOK GLOBAL (SYSTEM-WIDE HOOK) - BLOCAGE DE TOUCHES


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Source .NET ( DotNet ) Classé sous :hook, global, system, système Niveau :Débutant Date de création :20/02/2004 Date de mise à jour :04/05/2008 16:41:53 Vu / téléchargé :16 694 / 957

Auteur : coq

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

EDIT : la fiche "How to set a Windows hook in Visual C# .NET" (http://support.microsoft.com/kb/318804/en-us) a été mise à jour

Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.

Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.

Concernant les WH_*_LL (NT4 SP3 minimum), je vous invite à jeter un oeil à cet article : http://www.codeproject.com/csharp/globalhook.asp






La solution comprend le projet d'une dll C++ (eh vi j'avais pas le choix) :
"Global Hook Is Not Supported in .NET Framework
You cannot implement global hooks in Microsoft .NET Framework. To install a global hook, a hook must have a native dynamic-link library (DLL) export to inject itself in another process that requires a valid, consistent function to call into. This requires a DLL export, which .NET Framework does not support. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically."

Il faut donc une petite dll, et pas nos chères MSIL :( .
Cependant le hook présenté ici n'est pas ce que je qualifierais de "complet".
En effet le traitement des messages (blocage ou non) est effectué dans le code C++.
Il s'agit donc pour cet exemple de simplement montrer comment faire pour l'utiliser dans notre code C#.

Le code présenté permet donc de lancer un blocage des touches :
- "windows" (celles qui ouvrent/ferment le menu démarrer)
- ctrl+echap (même chose que les touches win)
- alt+tab
- alt+echap (alt+tab-like)


Associé à :
- désactivation du Gestionnaire des taches (a regler via l'execution de gpedit.msc, il y a un reglage pour ctrl+alt+suppr)
- appli en plein ecran
- desactivation de la reduction et du changement de taille (le FormBorder sur None est pas mal dans son genre :) )
- gestion de l'event Closing (mot de passe pour que l'admin puisse quitter mais pas l'utilisateur ?)

=> L'utilisateur est bloqué sur notre appli.

Sous reserve du fait que je n'ai oublier aucune combinaison de touches naturellement... (il y a des raccourcis pour agrandir/reduire ??)

NOTE : le ctrl+alt+suppr n'est apparemment pas desactivable par un hook (sur XP du moins) : le systeme doit probablement se servir en premier ( egoiste !!! ^^ )
donc il faut faire la manip donnée plus haut
ce qui pose encore un probleme : Windows juge bon de dire a l'utilisateur qu'il n'a pas le droit de s'en servir ... par une boite de dialogue ... qui ramene la barre des taches au premier plan :(
d'où l'ajout la désactivation de la barre des taches (ce devrait etre faisable dans le code C# ça mais bon tant que j'étais dans le C++ je l'ai mit dedans ^^ )
donc elle apparait mais ne peut pas recevoir de clics.

Source

  • Voir zip, tout se passe dans le checkBox_CheckedChanged et les DllImport sont juste au dessus.
Voir zip, tout se passe dans le checkBox_CheckedChanged et les DllImport sont juste au dessus.

 Conclusion

Si il vous vient l'idée saugrenue de quitter l'appli de test par une fin de processus (ou si elle plante, je n'ai rien gerer dedans ^^) sans avoir decocher la case auparavant (ce qui desinstalle les blocages) : les blocages de touches sont enlevés mais la barre des taches est toujours inactive.
Il suffira de relancer l'appli, cocher la case et quitter l'appli normalement (le Close appelle la desinstallation du Hook et donc reactive la bdt)
Un bon reboot fera aussi l'affaire mais c'est plus long :)


REFERENCES :

HOW TO: Set a Windows Hook in Visual C# .NET
http://support.microsoft.com/?kbid=318804

Di sabling Keys in Windows XP with TrapKeys (C++, mais sa desactivation du ctrl+alt+suppr marche pas chez moi)
http://msdn.microsoft.com/en-us/magazine/cc18 8951.aspx

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

21 novembre 2005 17:32:50 :
Ajout des mots clés
06 février 2006 12:18:07 :
Ajout du paragraphe "la fiche "How to set a Windows hook in Visual C# .NET" (http://support.microsoft.com/kb/318804/en-us) a été mise à jour"
04 mai 2008 16:41:54 :
Changement liens vers MSDN Magazine, les anciens étant devenus invalides...

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) COQTEXTTOOLS : TRANSFORMATIONS TEXTE SIMPLE ET UTILISATION A...
Source avec Zip Source .NET (Dotnet) XPATH : UTILISEZ DES REQUÊTES PARAMÉTRÉES
Source avec Zip Source .NET (Dotnet) PORTÉE DE LA VALEUR D'UN CHAMP STATIC
Source avec Zip Source .NET (Dotnet) PINVOKE DYNAMIQUE
Source avec Zip Source .NET (Dotnet) MANIPULATION DE LA CORBEILLE (SUPPRESSION, INFORMATIONS, VID...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) UTILISATION DE L'API VIRTUAL DISK IMAGE DE WINDOWS 7 par Willi
Source avec Zip Source .NET (Dotnet) CHESS GAME CORE - LIBRAIRIE JEU D'ÉCHEC EN C# par Bidou
Source .NET (Dotnet) CHANGER LA RESOLUTION DE VOTRE ECRAN, UTILISATION DES API WI... par mechtaly
Source avec Zip Source .NET (Dotnet) CRÉER SON PROPRE DESIGNER COMME CELUI DE VISUAL STUDIO par ShareVB
Source avec Zip Source .NET (Dotnet) CSVSHARP. DLL D'IMPORT/EXPORT DE CONTENU AU FORMAT CSV par heriquet

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) HOOK CLAVIER EN C# par shadow1779
Source avec Zip Source avec une capture Source .NET (Dotnet) INJECTER UNE DLL DANS UN PROCESSUS par Misugii
Source avec Zip Source .NET (Dotnet) GESTIONNAIRE DE PRESSES-PAPIER par Mr.X
Source avec Zip Source .NET (Dotnet) HOOK CLAVIER par damned3
Source avec Zip Source avec une capture Source .NET (Dotnet) DÉSACTIVATION CLAVIER ET SOURIS par Bidou

Commentaires et avis

Commentaire de coq le 20/02/2004 17:14:57 administrateur CS

MAJ du zip (je dois detenir le record du plus court delai post/maj là) :
j'avais un peu mal réglé les dépendances de projet
et mes " dans la cmd post generation s'étaient transformés en " (cool ^^)

Commentaire de coq le 20/02/2004 17:21:13 administrateur CS

grrrrrr
il interprete lol
=> et mes " dans la cmd post generation s'étaient transformés en  & q u o t ;
:)

Commentaire de Alain Proviste le 23/11/2004 19:20:47 administrateur CS

je pensais pas que les hook globaux étaient irréalisables en .net
je suis un peu deçu là.

Commentaire de coq le 23/11/2004 19:49:06 administrateur CS

oui, enfin ce n'est pas incontournable comme problème, c'est déjà ça :)

à voir aussi : http://www.codeproject.com/csharp/GlobalSystemHook.asp

Commentaire de coq le 06/02/2006 10:25:07 administrateur CS

Voir aussi, concernant l'utilisation "spéciale" de WH_MOUSE_LL et WH_KEYBOARD_LL, afin de se passer de l'utilisation de code non managé :
http://www.codeproject.com/csharp/globalhook.asp

Commentaire de bubbathemaster le 08/12/2008 02:54:21

Ca veut pas compiler, ca met l'erreur
error C2371: 'KBDLLHOOKSTRUCT' : redefinition; different basic types

sur
typedef struct {
    DWORD vkCode;
    DWORD scanCode;
    DWORD flags;
    DWORD time;
    ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

Comment faire? :(

Commentaire de coq le 14/12/2008 12:06:21 administrateur CS

Probablement un conflit avec des versions des headers différentes de celles utilisées à la publication de ce code (VS2003), cette structure doit proablement être maintenant définie dans un header inclu directement ou indirectement.

Commentaire de survcopt le 06/02/2009 13:03:31 9/10

Super ça marche nikel

je rajoute
// blocage du alt+F4 (donc si on recoit KEYDOWN pour tab et que flags = LLKHF_ALTDOWN : (alt appuyée))
if ( params->vkCode == VK_F4 && params->flags & LLKHF_ALTDOWN)
return TRUE; // blocage du message

et maintenant j'ai une application complètement verrouillée

Coq t'es au poil ....

Commentaire de coq le 08/02/2009 17:11:03 administrateur CS

Content que ça serve (même 5 ans après :-D)
Par contre c'est vrai que le code C++ n'est probablement pas parfait :-)

Commentaire de ouassit le 06/10/2009 18:28:19

bonjour,
qui peut svp m'envoyer le fichier dll du projet en Visual C.j'arrive à le compiler.

Merci.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

a quoi servent les deux points : [ par sh4gm4 ] salut,j'ai deux cas dans mon code généré par xsd.exe ou je ne comprend pas l'utilisation des :déclaration d'un methode, du moins je crois...public par probleme utilisation string.Split() [ par meliubaf ] Dans une page System.Web.UI.MobileControls.MobilePage  j'appelle une procédure stockée dans une base de données Sybase, et mets le résultat dans un Da System.DATA.dataRowView [ par hicham_899 ] bonjoursj'ai remplis une combobox avec une champs de base de donnée  par le code suivant :  private void AjouterSousFamille_Load(object sender, EventA Comment utiliser le HOOK pour capturer les messages Windows [ par AlexBob789 ] BobAlex Le double buffering pr eliminer les lignes blanches qui apparaissent a lexecution [ par mounal ] Slt,j'ai un prob,cest que j'ai developper une petite application qui affiche un ballon qui se gonfle et qui se degonfle ds un intervalle de temps,j'ai Dataset en mode design [ par thedarkkillerz ] Bonjour,  je développe actuellement une grille liée à un dataset, mais le dataset à un comportement pour le moins étrange..En effet je crée le dataset File System Watcher [ par titi66 ] Bonjourj'ai besoin de surveiller 2 répertoires différents avec FileSystemWatcher : j'en ai mis 2 dans mon Form.le 1° fonctionne nickel, par contre  je


Nos sponsors


Sondage...

Comparez les prix

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