Hook clavier en c#

Soyez le premier à donner votre avis sur cette source.

Vue 15 783 fois - Téléchargée 1 619 fois

Description

Ce programme montre (de facon simple) comment réaliser un systême de Hook clavier de manière complètement Asynchrone, et ceci en utilisant les API de Windows. Même si ce programme peut-être utilisé de manière illégal, il est néanmoins un bon exemple afin de montrer comment capter les saisies utilisateurs (par exemple pour faire un robot, ou encore comme dans mon cas pour faire un algorithme d'"IA" se basant sur la probabilité de tapper tel ou tel texte en fonction de l'application, et de proposer différents choix pré-enregistré.

Cette version de la classe de hook est encore bien sommaire et sera améliorée prochainement, néanmoins elle reste fonctionnelle.

Mise a jour a venir:
- Log dans un fichier texte du hook
- Amélioration du formulaire et accès aux données (avec un peu de Linq) afin de pouvoir voir les hook par applications, et les séquences les plus tappées
- Prise en charge de l'ensemble des controles claviers et souris (alphabets russe et arabe, symboles mathématiques)

Source / Exemple :


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;

namespace NetKeylogger
{
    public partial class mainForm : Form
    {

        private Boolean isCaptureEnabled = false;
        private System.Timers.Timer timerUI = new System.Timers.Timer();
        private Keylogger keylog = new Keylogger();

        public mainForm()
        {
            InitializeComponent();

            this.timerUI.Enabled = false;
            this.timerUI.Elapsed += new System.Timers.ElapsedEventHandler(this.timerUI_Elapsed);
            this.timerUI.Interval = 10;
        }

        private void btnCapture_Click(object sender, EventArgs e)
        {
            if (!isCaptureEnabled)
            {
                btnCapture.Text = "Mettre fin a la capture";
                txtLog.Text = "=========================\r\nDébut de la capture\r\n=========================\r\n\r\n";
                keylog.startCapture();
                timerUI.Enabled = true;
                isCaptureEnabled = true;
            }
            else
            {
                btnCapture.Text = "Capturer les saisies utilisateur";
                txtLog.Text += "\r\n\r\n=========================\r\nFin de la capture\r\n=========================\r\n";
                keylog.stopCapture();
                timerUI.Enabled = false;
                isCaptureEnabled = false;
            }

        }

        private void timerUI_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            // on récupère le contenu du buffer
            string temp = this.keylog.getBuffer();

            // s'il est différent de ce qui est déja existant on ajoute a la textbox
            txtLog.Text += temp;
        }

        private void mainForm_Load(object sender, EventArgs e)
        {

        }

    }
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
63
Date d'inscription
jeudi 12 août 2010
Statut
Membre
Dernière intervention
26 mars 2012

ça marche pas chez moi :/
Messages postés
6
Date d'inscription
samedi 27 février 2010
Statut
Membre
Dernière intervention
11 janvier 2011

j'ai essayé le programme mais j'ai remarquer que le programme ne detecte pas la frappe de la touche entrer
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
Ce n'est absolument pas un hook =/ Je te conseille de renommer ta source ...
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
90
Bonjour,

L'utilisation de System.Timers.Timer implique la levée de l'event Elapsed dans un thread du pool de thread (dans lequel s'exécutera donc le code du gestionnaire d'évènement timerUI_Elapsed), donc dans un autre thread que celui du GUI. D'où l'avertissement.
Messages postés
2
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
22 août 2009

j'ai le même message d'erreur que MATHMAX
Afficher les 9 commentaires

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.