Accueil > > > HOOK : PB DE COMPATIBILITÉ .NET 1.1 ET 2.0
HOOK : PB DE COMPATIBILITÉ .NET 1.1 ET 2.0
Information sur la source
Description
Voici un code de hook Clavier + Souris devellopé en vb.net 1.1 et le même en 2.0 Avant tte remarque du style "ouin ouin ... yen a deja plein" le but de ce post n'est pas exculsivment de montrer comment on hook mais de mettre a jour et de m'aider à résoudre un soucis a savoir : Le code .net 1.1 tourne avec VS 2003 fonctionnent bien actuellemnt (XP pro, avec VS 2003 + VS 2005 + framework 1.1 et framework 2.0 installer sur la meme machine), le bouton "Hook/UnHook" met en route une surveillance clavier souris et le timer dans el label indique depuis combien de temps le clavier et la souris n'ont pas été utiliser (il repars a zéro des qu'on y touche) => l'IdleTime en somme. Ceci avec une limite maximal reglable dans le module a la ligne suivante : If ((nTickActuel - nTickIdle) / (1000 * 60)) >= 15 Then ici la limite est donc de 15 minutes
Source
- 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, ByVal 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, ByVal lParam As MSLLHOOKSTRUCT) As Integer
-
- #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, ByVal 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 Integer
-
- dlgClavierCallBack = New HookClavierDelegate(AddressOf ClavierCallBack)
- dlgSourisCallBack = New HookSourisDelegate(AddressOf SourisCallBack)
-
- hInstance = Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32
-
- hHookClavier = SetWindowsHookExClavier(WH_KEYBOARD_LL, dlgClavierCallBack, hInstance, 0)
- hHookSouris = SetWindowsHookExSouris(WH_MOUSE_LL, dlgSourisCallBack, hInstance, 0)
-
- If ((hHookClavier <> 0) AndAlso (hHookSouris <> 0)) Then
- tmrSeconde = New Timers.Timer
- tmrSeconde.AutoReset = True
- tmrSeconde.Interval = 100
- nTickIdle = Environment.TickCount
- tmrSeconde.Start()
- Return True
- Else
- Return False
- End If
- End Function
-
- Public Sub UnHook()
- If hHookClavier <> 0 Then
- UnhookWindowsHookEx(hHookClavier)
- End If
- If hHookSouris <> 0 Then
- UnhookWindowsHookEx(hHookSouris)
- End If
-
- tmrSeconde.Stop()
- tmrSeconde.Close()
-
- hHookClavier = 0
- hHookSouris = 0
-
- dlgClavierCallBack = Nothing
- dlgSourisCallBack = Nothing
- tmrSeconde = 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)
- frm.Affichage(nTickActuel - nTickIdle)
- If ((nTickActuel - nTickIdle) / (1000 * 60)) >= 15 Then
- 'On concidère que l'Idle est suffisant pour declenché le processus
- UnHook()
- Stop
- 'EVENTS()
- End If
- End Sub
-
- #Region "CallBack"
-
- Private Function ClavierCallBack(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
-
- If (Code = HC_ACTION) Then
- nTickIdle = Environment.TickCount
- End If
-
- Return CallNextHookExClavier(hHookClavier, Code, wParam, lParam)
- End Function
-
- Private Function SourisCallBack(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As MSLLHOOKSTRUCT) As Integer
-
- If (nCode = HC_ACTION) Then
- nTickIdle = Environment.TickCount
- End If
-
- Return CallNextHookExSouris(hHookSouris, nCode, wParam, lParam)
- End Function
-
- #End Region
-
- End Module
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, ByVal 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, ByVal lParam As MSLLHOOKSTRUCT) As Integer
#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, ByVal 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 Integer
dlgClavierCallBack = New HookClavierDelegate(AddressOf ClavierCallBack)
dlgSourisCallBack = New HookSourisDelegate(AddressOf SourisCallBack)
hInstance = Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32
hHookClavier = SetWindowsHookExClavier(WH_KEYBOARD_LL, dlgClavierCallBack, hInstance, 0)
hHookSouris = SetWindowsHookExSouris(WH_MOUSE_LL, dlgSourisCallBack, hInstance, 0)
If ((hHookClavier <> 0) AndAlso (hHookSouris <> 0)) Then
tmrSeconde = New Timers.Timer
tmrSeconde.AutoReset = True
tmrSeconde.Interval = 100
nTickIdle = Environment.TickCount
tmrSeconde.Start()
Return True
Else
Return False
End If
End Function
Public Sub UnHook()
If hHookClavier <> 0 Then
UnhookWindowsHookEx(hHookClavier)
End If
If hHookSouris <> 0 Then
UnhookWindowsHookEx(hHookSouris)
End If
tmrSeconde.Stop()
tmrSeconde.Close()
hHookClavier = 0
hHookSouris = 0
dlgClavierCallBack = Nothing
dlgSourisCallBack = Nothing
tmrSeconde = 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)
frm.Affichage(nTickActuel - nTickIdle)
If ((nTickActuel - nTickIdle) / (1000 * 60)) >= 15 Then
'On concidère que l'Idle est suffisant pour declenché le processus
UnHook()
Stop
'EVENTS()
End If
End Sub
#Region "CallBack"
Private Function ClavierCallBack(ByVal Code As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
If (Code = HC_ACTION) Then
nTickIdle = Environment.TickCount
End If
Return CallNextHookExClavier(hHookClavier, Code, wParam, lParam)
End Function
Private Function SourisCallBack(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As MSLLHOOKSTRUCT) As Integer
If (nCode = HC_ACTION) Then
nTickIdle = Environment.TickCount
End If
Return CallNextHookExSouris(hHookSouris, nCode, wParam, lParam)
End Function
#End Region
End Module
Conclusion
Qu'est ce qui ne va pas ? j'ai créé un nouveau projet sous VS2005 (.net 2.0) meme nom de form, de boutton, de label, de module copier coller dans les procédures
précompilateur => 0 messages, warnings, erreurs compilateur => 0 messages, warnings, erreurs éxecution => 0 excpetions
travail demandé => pas fait du tout
localisation du pb : [...] Private hHookClavier As Integer Private hHookSouris As Integer [...] hHookClavier = SetWindowsHookExClavier(WH_KEYBOARD_LL, dlgClavierCallBack, hInstance, 0) hHookSouris = SetWindowsHookExSouris(WH_MOUSE_LL, dlgSourisCallBack, hInstance, 0) [...]
quand le code marche "hHookClavier" et "hHookSouris" sont censé recevoir le numero du handle du hook (un identifiant système unique qui permet de savoir que ca a marcher en somme), la doc de "SetWindowsHookExA" indique :
Return Value If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. To get extended error information, call GetLastError.
autre passage de la doc MSDN : Visual Basic: Applications should call err.LastDllError instead of GetLastError.
ici les 2 integer resultants sont NULL, donc il c'est produit une erreur durant l'appelle, au débugage j'ai donc rajouté 2 ligne : hHookClavier = SetWindowsHookExClavier(WH_KEYBOARD_LL, dlgClavierCallBack, hInstance, 0) Dim nBug1 As Integer = Err.LastDllError hHookSouris = SetWindowsHookExSouris(WH_MOUSE_LL, dlgSourisCallBack, hInstance, 0) Dim nBug2 As Integer = Err.LastDllError
et la "nBug1" et "nBug2" sont tout les 2 égale a 0 et quoi qu'il en soit Err n'est meme pas remplis qqsoti le champs
en somme : SetWindowsHookEx dit qu'il y a une erreur et en même temps le service d'erreur windows me dit qu'il n'y en a pas.
je suis donc actuellment assez embetté, je ne sais pas ocmment résoudre ce pb : * Faut il changer la manière/Méthode/Syntaxe des délégué sous .net 2.0 pour le cas ici présent * Le handle de l'instance est il tjs correct sous .Net 2.0 * Autre ...
enfin si qqun pouvais m'aider a résoudre ce pb ca m'aiderai bcp merci d'avance
Fichier Zip
Sources du même auteur
GÉNÉRATION DOCUMENT WORD PAR INTEROP (GESTION DES PARAGRAPHE...GÉNÉRATION DOCUMENT WORD PAR INTEROP (GESTION DES PARAGRAPHES, BORDURES, COLONNES, COULLEURS, GRAS, ITALIC, POLICE, TAILLE, TABSTOPS ET TABULATION, ENTETES ET PIED DA PAGE .....)Ces code génère aléatoirement un certain nombre d'enregistrement quiseront par la suite mis aenpage dans word, avec des separation pour chaque groupe ...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
ne pas faire lager souris - hook clavier/souris [ par Children ]
Bonjours, j'ai actuellement un hook souris/clavier, le seul problème est que je traite pas mal d'information en même temps, et même en utilisant un th
bloquer le clavier et le souris [ par kinggnl ]
comment je peut acceder a un poste de mon reseau est bloquer le clavier et le souris dans le VB.net ?
Clavier er souris remarque [ par robapt ]
Salut ,je voudrait savoir si c'était possible de bloquer que le clavier ou que la souris parce que je n'ai pas trouvé de source sur le site
hook souris et clipboard [ par ayarikhaoula ]
salut tou le monde . j é 1 problème de détéction du text séléctionné par la souris .jé télécharger un prg de vbfrance qui détécte le text séléctionné
texte séléctionné [ par ayarikhaoula ]
salut tout le monde . je souhaite trouver un programme qui détecte le texte sélectionné n'importe ou.pour se faire j'ai entendu parler du hook souris.
simuler touche clavier / souris !? [ par Claiyah ]
bsr tout le mondesvp est ce c'est possible de simuler le click de la souris ou clavier et afficher le résultat dans un msgbox ou text... meme quand l'
hook clavier [ par jocou ]
Bonjour à tousPetite question aux spécialistes : Lorsqu'on positionne un hook clavier local (donc sur un thread particulier), est-ce que : - l'appli
comment emuler un clavier a l'aide d'une souris!!! [ par oussamad00 ]
slut a tous!!!!!!!! genre: deplacer ma souris comme si j'appuyais sur les fleche si vous voyez ce que je veux dire.
Hook clavier et plus [ par jbphp ]
Bonjour,je demmande votre sur les interaction clavier avec vb2005.netMon but: rediriger une frappe: atl+f4, ctrl+alt+suppr. et touche windows;plus con
Hook de la souris sur une fenêtre issue d'un objet COM [ par chris_brabant ]
Bonjouren vb.NET, j'utilise l'API SetWindowsHookEx, au travers d'une DLL en C, pour capturer les évènements de type souris sur une fenê
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|