Soyez le premier à donner votre avis sur cette source.
Vue 10 754 fois - Téléchargée 603 fois
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
http://sourceforge.net/projects/supercopier/
supercopier est un logiciel qui est un des plus avancé en OpenSource à ce sujet.
Je vous souhaite bonne lecture et avant tte question sachez que les fonctions appelées en C/C++ sont TRES souvent retrouvées sous forme d'API sous vb/VB.net en excluant ttes celles deja integrées au framework donc posé pas de question avant d'avoir été tappé le nom de la fonction directemnt dans la case "RECHERCHE" de :
www.msdn.com
qui je le rapelle contient TOUTE LA DOC ONLINE MSDN donc les reponse sont dessus (et oui lire fait partit de l'apprentissage meme en coding) aussi bien .net que C++.
(écrire aussi j'ai un peu de mal à cette heure la à alligner les phrase xD)
Google est ton ami
http://msdn2.microsoft.com/fr-fr/library/ms242202(VS.80).aspx
Lien instructif sur la chose :)
++
qu'est ce que cela fait réellement et est ce que ca risuqe d'altérer ou d'empecher le debugage de certaine ligne
Merci, PBeuz je viens de tester ta solution et ç'est effectivement ce paramétrage qui bloqué le débuggueur...
Tu viens de m'enlever une épine dans le pied ;)
Merci à toi et bonne prog.
++
Quand l'option est désactivée la fonction SetWindowsHookEx() fonctionne correctement avec le debugger
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.