Récupérer valeur d'une touche saisi en dehors de l'application c#
snk111
-
3 janv. 2013 à 11:55
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 2021
-
4 janv. 2013 à 09:20
Bonjour,
je souhaiterai récupérer le code ascii ou même la touche tapée n'importe où dans windows et l'intégrer dans la textbox de mon programme c#. Exemple : je suis sur Google je tape "a" et je souhaiterai que la touche "a" apparaisse dans la textbox de mon application.
j'ai essayer :
[DllImport("User32.dll")]
public static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
[DllImport("User32.dll")]
public static extern short GetAsyncKeyState(System.Int32 vKey);
mais rien ne marche
En espérant avoir été assez clair ...
Merci d'avance pour votre aide.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 3 janv. 2013 à 14:05
Salut,
en gros, tu veux faire un HOOK (WH_KEYBOARD_LL).
Cela s'appelle un KeyLogger.
C'est à dire un handle au niveau système qui enverra un message à TON application à chaque fois qu'une touche clavier sera utilisée en dehors de ton application.
Voici les 3 APIs principales et la structure à utiliser :
(pour le reste, beaucoup de boulots en perspective !)
Je te conseille de trouver un code en C/C++ et de le porter en C# via p-invoke.
public struct keyboardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookEx(
int idHook,
keyboardHookProc lpfn,
IntPtr hMod,
uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnhookWindowsHookEx(
IntPtr hhk);
[DllImport("user32.dll")]
public static extern int CallNextHookEx(
IntPtr idHook,
int nCode,
int wParam,
ref keyboardHookStruct lParam);