Hook pour intercepter les appels des touches [Résolu]

Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
- - Dernière réponse : tigre44
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
- 16 janv. 2007 à 15:56
Bonjour à tous,

Je cherche comment faire un hook me permettant de désactiver certaines touches du clavier, telles que Echap, alt ...
J'ai trouvé pas mal d'exemple en VB6, mais un seul en VB.net et je n'arrive pas à le faire fonctionner : http://www.vbfrance.com/codes/HOOK-PB-COMPATIBILITE-NET_38415.aspx
Si vous connaissez des exemples de Hook pour VB.net ou alors des tutoriaux, je suis preneur .
Merci.
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
3
Merci
Alors,
La ligne qui te pose problème :
Elle est pas très importante, elle sert juste à l'affichage de quelque chose (on ne sait pas quoi puisqu'on a pas le code de frm.Affichage et j'ai pas envie d'aller voir dans la source, il s'agit sans doute d'une fonction d'affichage )
Moi j'ai simplement remplacé les lignes 102 et 103 par :
        'Dim frm As Form1 = CType(Form1.ActiveForm, Form1)
        Form1.Text = (nTickActuel - nTickIdle)
La seule différence c'est qu'il ne cherche pas le form actif, mais utilise le form1.
Sinon moi j'ai d'autres problèmes avec son code, mais finalement il marche, je te dis ce que j'ai dû changer :

L 63 : Sa méthode pour acquérir le handle du module ne marche apparemment pas (en tout cas pas chez moi, ca renvoie 0), j'utilise donc
        hInstance =  GetModuleHandle(Process.GetCurrentProcess.MainModule.ModuleName)
à la place qui marche très bien chez moi...
Attention : ajoute la déclaration de GetModuleHandle aux apis :
    Private Declare Function GetModuleHandle Lib "kernel32.dll" Alias "GetModuleHandleA" (ByVal ApplicationFileName As String) As IntPtr

Certains lParam sont en byVal, or il s'agit d'une structure passée par pointeur, tu dois donc changer tout les byVal par des byRef devant lParam (utilise Ctrl-H, rechercher "byval lparam", remplacer par "byref lparam")

Voila, je tappe tout ca sous le code d'un form, je met Hook.Hook() dans form_load et Hook.Unhook quand on quitte, et chez moi ca marche !
(Ajoute ceci Ligne 117 si tu veux tester :             MsgBox(lParam.vkCode))

Julien.

__________________________
Julien.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 134 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Julien237
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Salut,
J'avais fais ce code pour la souris il y a un bout de temps, tu pourras sans doute l'adapter pour le clavier facilement :

Imports System.Runtime.InteropServices

Public Class Form1
   Structure MouseInfos
       Public x As Integer   'Coordonnées absolues
       Public y As Integer
       Public Data As Integer    'Infos sur les boutons supplémentaires
et la roulette
       Public Flags As Integer     'Boh ?
       Public Time As Integer     'Heure d'émission du message
       Public Extra As IntPtr     'Apparemment NULL...
   End Structure

   Public Const WH_MOUSE_LL = 14

   Delegate Function HookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, _
   ByVal lParam As IntPtr) As IntPtr

   Declare Auto Function SetWindowsHookEx Lib "user32.dll" (ByVal idHook As Integer, _
     ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As Integer) As IntPtr
   Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hhk As IntPtr) As Boolean
   Declare Function CallNextHookEx Lib "user32.dll" (ByVal hhk As IntPtr, ByVal nCode As Integer, _
     ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
   Declare Function GetModuleHandle Lib "kernel32.dll" Alias "GetModuleHandleA" _
   (ByVal ApplicationFileName As String) As IntPtr

   Public Hook As IntPtr

   Public Function MouseProc(ByVal idHook As Integer, ByVal wParam AsIntPtr, ByVal lParam As IntPtr) As IntPtr
       If idHook < 0 Then
           MouseProc = CallNextHookEx(Hook, idHook, wParam, lParam)
       Else
           Dim mi As MouseInfos
           mi = Marshal.PtrToStructure(lParam, GetType(MouseInfos))
           Me.Text = idHook & "  " & wParam.ToInt32 & "  " & mi.x & " " & mi.y & "  " & mi.Extra.ToInt32
           MouseProc = CallNextHookEx(Hook, idHook, wParam, lParam)
       End If
   End Function

   Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
       UnhookWindowsHookEx(Hook)
   End Sub

   Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
       Dim h As IntPtr
       h =GetModuleHandle(Process.GetCurrentProcess.MainModule.ModuleName)    'Marshal.GetHINSTANCE(GetType(Form1).Module)
       'MsgBox("HInstance : " & h.ToInt32)
       Hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseProc, h, 0)
       'MsgBox("Hook : " & Hook.ToInt32)
   End Sub
End Class, ----
(Coloration syntaxique automatique par Kenji)

__________________________
Julien.
Commenter la réponse de Julien237
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
Je te remercie pour ton code .
Je vais essayer de l'adapter et je reposterais le code adapté au clavier si j'y arrive.
Bonne soirée.
Commenter la réponse de tigre44
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
Je n'arrive pas à transformer ce code . Il me manque trop d'informations pour les touches.
Personne n'aurait un code utilisant des touches clavier ?
Commenter la réponse de tigre44
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Lol je cherche sur Google et je retombe sur VBFrance...
Voilà un code avec le clavier ici
__________________________
Julien.
Commenter la réponse de Julien237
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
J'avais essayé de tester ce code hier, mais à la ligne 102 ( Dim frm
As Form1 =
CType(Form1.ActiveForm, Form1)
), il me dit qu'il y a une erreur Type 'Form1' non définie.
Pourtant Form1 existe bien, j'ai Form1.vb. En solution, Visual Basic Express 2005 me propose de mettre Form ou Form2. J'ai essayé avec les deux en changeant les erreurs qui en suivait mais ça ne marchait pas non plus. Et comme je ne comprends pas cette ligne .
Commenter la réponse de tigre44
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
Je te remercie pour ta recherche et ton aide, ca marche parfaitement ici .
Sinon, je suis en train d'essayer quand je récupère un numéro de touche, comme par exemple (lParam.vkCode = 46) pour suppr, de passer un autre numéro à Windows pour que cette touche soit non fonctionnelle.
J'ai essayer de modifier les diffèrentes variables utilisées jusqu'à cette ligne du programme, mais ca ne fonctionne pas.
Aurais-tu une idée ?
Commenter la réponse de tigre44
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Alors,
J'ai pas encore tout saisi sur le fonctionnement des hooks :p, mais d'après ce que j'ai compris, dans la procédure ClavierCallBack, tu appelle à la fin CallNextHook... qui va se charger de faire suivre le message. Donc si tu veux empêcher le message de passer, rien de plus simple : tu n'appelle pas CallNextHook, et tu renvoie directement une valeur que je ne sais pas comment tu la pond :p, regarde dans les aides, les tutos sur les hooks et ce que CallNextHook te renvoie d'habitude... (J'espère que je te dis pas de bêtises...)
Voilà, sinon si tu veux juste désactiver une touche dans windows, regarde toujours ceci voir si c'est pas mieux...
__________________________
Julien.
Commenter la réponse de Julien237
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
J'ai modifié un peu la fonction :

Private
Function ClavierCallBack(
ByVal Code
As
Integer,
ByVal wParam
As
Integer,
ByRef lParam
As KBDLLHOOKSTRUCT)
As
Integer

If (Code = HC_ACTION)
ThennTickIdle = Environment.TickCount

End
If

If lParam.vkCode = 27
Or lParam.vkCode = 46
Or lParam.vkCode = 91
Or lParam.vkCode = 92
Or lParam.vkCode = 115
Or lParam.vkCode = 162
Or lParam.vkCode = 163
Or lParam.vkCode = 164
Or lParam.vkCode = 165
ThenlParam.vkCode = 65

End
If

Return (CallNextHookExClavier(hHookClavier, Code, wParam, lParam))

End
FunctionLes numéros correspondants aux touches sont stockés dans vkCode de la structure lParam, je les modifie donc au passage en leur appliquant la valeur de "a". Mais ca ne bloque pas les touches.
Commenter la réponse de tigre44
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Que cherches-tu à bloquer ?
Une séquence (CTRL-ALT-DEL, par exemple) ?

Si c'est celà : abandonne, sauf si tu est avec Win.-9x
Commenter la réponse de jmfmarques
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
Je cherche juste à bloquer des touches simples, aucune combinaison .
Par exemple pour CTRL-ALT-SUPPR, je bloque CTRL, du coup ALT-SUPPR ne fait plus rien.
En fait, ca permettrait de "faire croire" à l'ordinateur que l'on a appuyé sur a-ALT-SUPPR voire a-a-a puisque ca le fera pour chaque touche.
Commenter la réponse de tigre44
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Tu peux toujours continuer à essayer, si tu veux....
Tu n'y parviendras pas plus que tu ne parviendrais à simuler l'envoi d'une séquence CTRL-ALT-DEL... par exemple, ... et pour les mêmes raisons qui sont celles de Windows ...
Voilà plus de 4 ans que  "fortiches and Co." ont longuement cherché.... et abdiqué...


Bonne chance.
Commenter la réponse de jmfmarques
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
J'ai vu plusieurs personnes sur des forums qui ont réussis . Donc c'est que ça doit être possible.
Je viens de trouver un autre code qui apparemment fonctionne, je l'essaye,l'adapte et s'il fonctionne je le posterais.
Commenter la réponse de tigre44
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
Voici le nouveau module Hook2, je l'appelle avec Hook2.KeyboardHook.HookKeyboard() dans ma forme principale. Mais il y a toujours le message "non réussite" au demarrage, et rien n'est bloqué. Je pense que ce ne doit pas être loin . Quelqu'un auraitune petite idée ?










Imports System.Runtime.InteropServices
Imports

System.Reflection
Module

Hook2

Public
Class KeyboardHook

Public
Declare
Function UnhookWindowsHookEx
Lib
"user32" _(

ByVal hHook
As
Integer)
As
Integer

Public
Declare
Function SetWindowsHookEx
Lib
"user32" _

Alias
"SetWindowsHookExA" (
ByVal idHook
As
Integer, _

ByVal lpfn
As KeyboardHookDelegate,
ByVal hmod
As
Integer, _

ByVal dwThreadId
As
Integer)
As
Integer

Private
Declare
Function GetAsyncKeyState
Lib
"user32" _(

ByVal vKey
As
Integer)
As
Integer

Private
Declare
Function CallNextHookEx
Lib
"user32" _(

ByVal hHook
As
Integer, _

ByVal nCode
As
Integer, _

ByVal wParam
As
Integer, _

ByRef lParam
As KBDLLHOOKSTRUCT)
As
Integer

Public
Structure KBDLLHOOKSTRUCT

Public vkCode
As
Integer

Public scanCode
As
Integer

Public flags
As
Integer

Public time
As
Integer

Public dwExtraInfo
As
Integer

End
Structure

' Low-Level Keyboard Constants

Private
Const HC_ACTION
As
Integer = 0

Private
Const LLKHF_EXTENDED
As
Integer = &H1

Private
Const LLKHF_INJECTED
As
Integer = &H10

Private
Const LLKHF_ALTDOWN
As
Integer = &H20

Private
Const LLKHF_UP
As
Integer = &H80

' Virtual Keys

Public
Const VK_TAB = &H9

Public
Const VK_CONTROL = &H11

Public
Const VK_ESCAPE = &H1B

Public
Const VK_DELETE = &H2E

Private
Const WH_KEYBOARD_LL
As
Integer = 13&

Public
Shared KeyboardHandle
As
Integer

' Implement this function to block as many

' key combinations as you'd like

Public
Shared
Function IsHooked( _

ByRef Hookstruct
As KBDLLHOOKSTRUCT)
As
BooleanDebug.WriteLine(

"Hookstruct.vkCode: " & Hookstruct.vkCode)Debug.WriteLine(Hookstruct.vkCode = VK_ESCAPE)

Debug.WriteLine(Hookstruct.vkCode = VK_TAB)

If (Hookstruct.vkCode = VK_ESCAPE)
And _

CBool(GetAsyncKeyState(VK_CONTROL) _

And &H8000)
Then

Call HookedState(
"Ctrl + Esc blocked")

Return
True

End
If

If (Hookstruct.vkCode = VK_TAB)
And _

CBool(Hookstruct.flags
And _LLKHF_ALTDOWN)

Then

Call HookedState(
"Alt + Tab blocked")

Return
True

End
If

If (Hookstruct.vkCode = VK_ESCAPE)
And _

CBool(Hookstruct.flags
And _LLKHF_ALTDOWN)

Then

Call HookedState(
"Alt + Escape blocked")

Return
True

End
If

Return
False

End
Function

Private
Shared
Sub HookedState(
ByVal Text
As
String)Debug.WriteLine(Text)

End
Sub

Public
Shared
Function KeyboardCallback(
ByVal Code
As
Integer, _

ByVal wParam
As
Integer, _

ByRef lParam
As KBDLLHOOKSTRUCT)
As
Integer

If (Code = HC_ACTION)
ThenDebug.WriteLine(

"Calling IsHooked")

If (IsHooked(lParam))
Then

Return 1

End
If

End
If

Return CallNextHookEx(KeyboardHandle, _Code, wParam, lParam)

End
Function

Public
Delegate
Function KeyboardHookDelegate( _

ByVal Code
As
Integer, _

ByVal wParam
As
Integer,
ByRef lParam
As KBDLLHOOKSTRUCT) _

As
Integer<MarshalAs(UnmanagedType.FunctionPtr)> _

Private
Shared callback
As KeyboardHookDelegate

Public
Shared
Sub HookKeyboard()callback =

New KeyboardHookDelegate(
AddressOf KeyboardCallback)KeyboardHandle = SetWindowsHookEx( _

WH_KEYBOARD_LL, callback, _

Marshal.GetHINSTANCE( _

[Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32, 0)

Call CheckHooked()

End
Sub

Public
Shared
Sub CheckHooked()

If (Hooked())
ThenMsgBox(

"Reussite")Debug.WriteLine(

"Keyboard hooked")

ElseMsgBox(

"Non Reussite")Debug.WriteLine(

"Keyboard hook failed: " & Err.LastDllError)

End
If

End
Sub

Private
Shared
Function Hooked()Hooked = KeyboardHandle <> 0

End
Function

Public
Shared
Sub UnhookKeyboard()

If (Hooked())
Then

Call UnhookWindowsHookEx(KeyboardHandle)

End
If

End
Sub

End
ClassEnd

Module
Commenter la réponse de tigre44
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
"Quelqu'un auraitune petite idée ?
"

Oui, moi :

Tu as écrit :

"J'ai vu plusieurs personnes sur des forums qui ont réussis . Donc c'est que ça doit être possible."

Parfait, donc : donne-nous un lien où tu as vu cette chose-la !

Voilà longtemps que plusieurs (et pas des moindres) cherchent... et ils cherchent encore !
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Et surtout, ami Tigre44 : ne pas confondre l'inhibition de séquences avec empêchement de lancement de l'action que lanceraient ces séquences (ce n'est pas la même chose...). Dans ce cas : la séquence est envoyée (pas inhibée) et l'on agit sur le processus qu'elle démarre ...
Commenter la réponse de jmfmarques
Messages postés
15
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
0
Merci
J'ai déjà l'exemple de quelqu'un qui commence à enfin avoir des résultats, moi .
Le code permet de bloquer les boutons alt, ctrld, ctrlg, echap, F4, et les touches windows.
Par contre il ne fonctionne pas avec CTRL-ALT-SUPPR ce qui est ettonant.
Enfin le voilà, c'est une modification du premier, appelé par Hook.Hook(). Je retourne 1 à la fonction qui s'occupe de ces touches. Je le poste à suivre (Désolé pour les longues lignes) :

Imports

System.Runtime.InteropServices
Imports

System.Reflection
Module

Hook#

Region
"APIs"

Private
Declare
Function UnhookWindowsHookEx
Lib
"user32" (
ByVal hHook
As
Integer)
As
Integer

Private
Declare
Function SetWindowsHookExClavier
Lib
"user32"
Alias
"SetWindowsHookExA" (
ByVal idHook
As
Integer,
ByVal lpfn
As HookClavierDelegate,
ByVal hmod
As
Integer,
ByVal dwThreadId
As
Integer)
As
Integer

Private
Declare
Function SetWindowsHookExSouris
Lib
"user32"
Alias
"SetWindowsHookExA" (
ByVal idHook
As
Integer,
ByVal lpfn
As HookSourisDelegate,
ByVal hmod
As
Integer,
ByVal dwThreadId
As
Integer)
As
Integer

Private
Declare
Function GetAsyncKeyState
Lib
"user32" (
ByVal vKey
As
Integer)
As
Integer

Private
Declare
Function CallNextHookExClavier
Lib
"user32"
Alias
"CallNextHookEx" (
ByVal hHook
As
Integer,
ByVal nCode
As
Integer,
ByVal wParam
As
Integer,
ByRef lparam
As KBDLLHOOKSTRUCT)
As
Integer

Private
Declare
Function CallNextHookExSouris
Lib
"user32"
Alias
"CallNextHookEx" (
ByVal hHook
As
Integer,
ByVal nCode
As
Integer,
ByVal wParam
As
Integer,
ByRef lparam
As MSLLHOOKSTRUCT)
As
Integer

Private
Declare
Function GetModuleHandle
Lib
"kernel32.dll"
Alias
"GetModuleHandleA" (
ByVal ApplicationFileName
As
String)
As IntPtr#

End
Region#

Region
"Structures et Constantes"

Private
Structure POINT

Private x
As
Integer

Private y
As
Integer

End
Structure

Private
Structure MSLLHOOKSTRUCT

Public pt
As POINT

Public mouseData
As
Integer

Public flags
As
Integer

Public time
As
Integer

Public dwExtraInfo
As
Integer

End
Structure

Private
Structure KBDLLHOOKSTRUCT

Public vkCode
As
Integer

Public scanCode
As
Integer

Public flags
As
Integer

Public time
As
Integer

Public dwExtraInfo
As
Integer

End
Structure

Private
Const HC_ACTION
As
Integer = 0

Private
Const WH_KEYBOARD_LL
As
Integer = 13

Private
Const WH_MOUSE_LL
As
Integer = 14#

End
Region#

Region
"Delegate"

Private
Delegate
Function HookClavierDelegate(
ByVal Code
As
Integer,
ByVal wParam
As
Integer,
ByRef lParam
As KBDLLHOOKSTRUCT)
As
Integer

Private
Delegate
Function HookSourisDelegate(
ByVal nCode
As
Integer,
ByVal wParam
As
Integer,
ByRef lparam
As MSLLHOOKSTRUCT)
As
Integer<MarshalAs(UnmanagedType.FunctionPtr)>

Private dlgClavierCallBack
As HookClavierDelegate<MarshalAs(UnmanagedType.FunctionPtr)>

Private dlgSourisCallBack
As HookSourisDelegate#

End
Region

Private hHookClavier
As
Integer

Private hHookSouris
As
Integer

Private
WithEvents tmrSeconde
As Timers.Timer

Private nTickIdle
As
Integer

Public
Function Hook()
As
Boolean

Dim hInstance
As
IntegerdlgClavierCallBack =

New HookClavierDelegate(
AddressOf ClavierCallBack)dlgSourisCallBack =

New HookSourisDelegate(
AddressOf SourisCallBack)hInstance = GetModuleHandle(Process.GetCurrentProcess.MainModule.ModuleName)

hHookClavier = SetWindowsHookExClavier(WH_KEYBOARD_LL, dlgClavierCallBack, hInstance, 0)

hHookSouris = SetWindowsHookExSouris(WH_MOUSE_LL, dlgSourisCallBack, hInstance, 0)

If ((hHookClavier <> 0)
AndAlso (hHookSouris <> 0)) ThentmrSeconde New Timers.TimertmrSeconde.AutoReset

TruetmrSeconde.Interval = 100

nTickIdle = Environment.TickCount

tmrSeconde.Start()

Return
True

Else

Return
False

End
If

End
Function

Public
Sub UnHook()

If hHookClavier <> 0
ThenUnhookWindowsHookEx(hHookClavier)

End
If

If hHookSouris <> 0
ThenUnhookWindowsHookEx(hHookSouris)

End
IftmrSeconde.Stop()

tmrSeconde.Close()

hHookClavier = 0

hHookSouris = 0
dlgClavierCallBack NothingdlgSourisCallBack

NothingtmrSeconde =

Nothing

End
Sub

Private
Sub tmrSeconde_Elapsed(
ByVal sender
As
Object,
ByVal e
As Timers.ElapsedEventArgs)
Handles tmrSeconde.Elapsed

Dim nTickActuel
As
Integer = Environment.TickCount

'Delai de l'Idle: 20 minute

'Dim frm As Form1 = CType(Form1.ActiveForm, Form1)

'Form1.Text = (nTickActuel - nTickIdle)

If ((nTickActuel - nTickIdle) / (1000 * 60)) >= 15
Then

'On concidère que l'Idle est suffisant pour declencher le processus UnHook()

Stop

'EVENTS()

End
If

End
Sub#

Region
"Fonctions"

Private
Function ClavierCallBack(
ByVal Code
As
Integer,
ByVal wParam
As
Integer,
ByRef lParam
As KBDLLHOOKSTRUCT)
As
Integer

If (Code = HC_ACTION)
Then

'MsgBox(lParam.vkCode) 'Tester les numéros des touches entréesnTickIdle = Environment.TickCount

End
If

'Si une de ces touches est pressée, le code passe à 65 qui correspond à "a".

If lParam.vkCode = 27
Or lParam.vkCode = 46
Or lParam.vkCode = 91
Or lParam.vkCode = 92
Or lParam.vkCode = 115
Or lParam.vkCode = 162
Or lParam.vkCode = 163
Or lParam.vkCode = 164
Or lParam.vkCode = 165
Then

'wParam = 1

'hHookClavier = 1

'Code = 1

'lParam.vkCode = 1

Return 1

End
If

'On transmet la valeur à Windows.

Return (CallNextHookExClavier(hHookClavier, Code, wParam, lParam))

End
Function

Private
Function SourisCallBack(
ByVal nCode
As
Integer,
ByVal wParam
As
Integer,
ByRef lparam
As MSLLHOOKSTRUCT)
As
Integer

If (nCode = HC_ACTION)
ThennTickIdle = Environment.TickCount

End
If

Return CallNextHookExSouris(hHookSouris, nCode, wParam, lparam)

End
Function#

End
RegionEnd

Module
Commenter la réponse de tigre44
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Ouaip,
Sinon pour ce qui est de Ctrl-Alt-Del, ça m'étonnerais pas que windows gère ça un peu différemment des autres raccourcis.
Exemple dans Oblivion :
Alt-F4 : Marche pas
Alt-Tab : Marche pas
Alt-Esc : Marche pas
Ctrl-Alt-Del : Marche...
Un peu comme si les programmeurs du jeu avais su tout empêcher sauf ça... Ou bien c'est voulu j'en sais rien...
<hr size="2" width="100%" />Julien.
Commenter la réponse de Julien237
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
"Par contre il ne fonctionne pas avec CTRL-ALT-SUPPR ce qui est ettonant."


Euh... c'est toi qui m'étonnes, là !
Je ne cesse de te le répéter !......
Commenter la réponse de jmfmarques
Messages postés
884
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Oui oui, je voulais juste appuyer ton dire (scuse :p)

<hr size="2" width="100%" />Julien.
Commenter la réponse de Julien237