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

tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 11 janv. 2007 à 16:21 - Dernière réponse : tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention
- 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 

Votre réponse

21 réponses

Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 12 janv. 2007 à 18:14
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Julien237
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 11 janv. 2007 à 17:23
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 11 janv. 2007 à 18:54
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 12 janv. 2007 à 10:26
0
Utile
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
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 12 janv. 2007 à 14:39
0
Utile
Lol je cherche sur Google et je retombe sur VBFrance...
Voilà un code avec le clavier ici
__________________________
Julien.
Commenter la réponse de Julien237
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 12 janv. 2007 à 16:02
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 15 janv. 2007 à 10:31
0
Utile
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
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 15 janv. 2007 à 14:02
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 15 janv. 2007 à 15:04
0
Utile
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 15 janv. 2007 à 15:12
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 15 janv. 2007 à 15:59
0
Utile
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 15 janv. 2007 à 22:17
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 16 janv. 2007 à 10:46
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 16 janv. 2007 à 11:27
0
Utile
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 janv. 2007 à 11:37
0
Utile
"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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 janv. 2007 à 11:42
0
Utile
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
tigre44 15 Messages postés samedi 20 mai 2006Date d'inscription 19 janvier 2007 Dernière intervention - 16 janv. 2007 à 12:36
0
Utile
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
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 16 janv. 2007 à 12:41
0
Utile
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 16 janv. 2007 à 13:22
0
Utile
"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
Julien237 884 Messages postés vendredi 3 novembre 2000Date d'inscription 3 mars 2009 Dernière intervention - 16 janv. 2007 à 14:34
0
Utile
Oui oui, je voulais juste appuyer ton dire (scuse :p)

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Hook pour intercepter les appels des touches - page 2