iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 2008
-
21 oct. 2006 à 20:05
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 2008
-
23 oct. 2006 à 18:01
Bonjour,
J'ai trouvé sur le site de microsoft un exemple qui permeté de mettre en place un hook sur la souris, j'ai essayé de le modifié pour faire un hook sur un clavier mais ça ne marche pas
voici l'erreur :
L'exception System.AccessViolationException n'a pas été gérée
Message="Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée."
Source="System.Windows.Forms"
StackTrace:
à System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type)
à System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
à System.Windows.Forms.MessageBox.Show(String text)
à WindowsApplication1.Form1.KeyboardHookProc(Int32 nCode, IntPtr wParam, IntPtr lParam) dans C:\Documents and Settings\thom\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.cs:ligne 86
à System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type)
à System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
à System.Windows.Forms.MessageBox.Show(String text)
à WindowsApplication1.Form1.KeyboardHookProc(Int32 nCode, IntPtr wParam, IntPtr lParam) dans C:\Documents and Settings\thom\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.cs:ligne 86
à System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.Run(Form mainForm)
à WindowsApplication1.Program.Main() dans C:\Documents and Settings\thom\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Program.cs:ligne 17
à System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
<hr />
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 22 oct. 2006 à 00:21
Non entièrement en C#.. tu peux t'inspirer du hook pour la souris que j'ai posté >ici< Il y'a deux ou trois petites choses à modifier, MSLLHOOKSTRUCT qu'il faut remplacer par KBDLLHOOKSTRUCT et le type de hook WH_MOUSE_LL à remplacé par WH_KEYBOARD_LL.
Vous n’avez pas trouvé la réponse que vous recherchez ?
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 22 oct. 2006 à 11:44
J'ai mis WH_KEYBOARD_LL à 13 j'ai refactorisé le code pour changer KBDLLHOOKSTRUCT
Seulement je ne sais pas quoi mettre pour que lorsqu'une touche est enfoncé une messageBox nous informe quel touche on vient de presser
[ StructLayout( LayoutKind.Sequential ) ]
protected struct KBDLLHOOKSTRUCT
{
public int Key;
public int Code;
public int Flags;
public int Time;
public UIntPtr Extra;
}
Si tu n'as pas l'habitude du code unsafe tu peux passer Marshal.PtrToStructure comme tu faisais dans ton premier exemple.
De mémoire comme ça je pense qu'il n y a pas d'autres différences entre un hook clavier et un hook souris mais comme ça fait longtemps que j'ai pas codé de hook pour le clavier je te conseille quand même de relire la MSDN ici :
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 22 oct. 2006 à 19:46
Une fois pour la touche pressée et une fois pour la touche relachée je pense ^^
wParam contient le message WM_KEYDOWN ou WM_KEYUP etc.. et lParam contient la structure, enfin tout ça c'est expliqué dans les liens que je t'ai donné.