C#, interception clavier et reboot ;)

C#, interception clavier et reboot ;) - C#/.NET managed - Programmation

Marsh Posté le 07-04-2003 à 06:32:37    

salut,
 
voila mes 3 questions:
 
- comment je peux faire en C# pour arriver a "monitorer" le clavier depuis mon programme alors qu'il n'a pas le focus? Par exemple, je lance mon appli. C#, et je tape des trucs dans notepad/word/... je voudrais que mon appli recoive egalement les messages d'evenements clavier, meme si j'utilise un autre programme (je suis pas tres clair hein ? ;))
 
- plus simple: comment rebooter/arreter l'ordi en C# :)
 
- (facultatif) vous avez un bon petit site qui parle de la programmation .Net en mixant C#, VB, C++, Perl ... cad, en utilisant un peu de chaque langage dans une appli ?
 
 
merci d'avance  :hello:

Reply

Marsh Posté le 07-04-2003 à 06:32:37   

Reply

Marsh Posté le 07-04-2003 à 09:21:41    

SenG@ a écrit :


- comment je peux faire en C# pour arriver a "monitorer" le clavier depuis mon programme alors qu'il n'a pas le focus? Par exemple, je lance mon appli. C#, et je tape des trucs dans notepad/word/... je voudrais que mon appli recoive egalement les messages d'evenements clavier, meme si j'utilise un autre programme (je suis pas tres clair hein ? ;))


en gros tu veux faire un keylogger, quoi  :sarcastic:

Reply

Marsh Posté le 07-04-2003 à 09:25:59    

SenG@ a écrit :

- comment je peux faire en C# pour arriver a "monitorer" le clavier depuis mon programme alors qu'il n'a pas le focus? Par exemple, je lance mon appli. C#, et je tape des trucs dans notepad/word/... je voudrais que mon appli recoive egalement les messages d'evenements clavier, meme si j'utilise un autre programme (je suis pas tres clair hein ? ;))


Tu dois faire un hook éloigné qui interceptera les évènements clavier pour les envoyer à ton application. Seulement, il y a 2 pbs :
 
- Etant donné que ce hook doit travailler dans des zones mémoires qui ne lui appartiennent pas, il doit résider dans une DLL,
 
- Il est créé via une fonction Win32 (SetWindowsHookEx) qui n'est pas encapsulée par .NET
Tu devras donc le créer "à la main".
 
Pour le reboot, essaie le namespace Management :
 
http://www.c-sharpcorner.com/3/Reb [...] WMIJOD.asp


Message édité par Harkonnen le 07-04-2003 à 09:29:44

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-04-2003 à 09:57:06    

ok, merci pour le reboot.
 
 
par contre, pour le hook, tu veux dire qu'il n'existe pas en .Net, et que je suis oblige de le faire en c++ par exemple ?

Reply

Marsh Posté le 07-04-2003 à 10:05:42    

SenG@ a écrit :

par contre, pour le hook, tu veux dire qu'il n'existe pas en .Net, et que je suis oblige de le faire en c++ par exemple ?


oui, comme indiqué ici :
 
http://support.microsoft.com/defau [...] ;Q318804#3
 
j'ai trouvé ça sur google, peut être que ça peut t'être utile ?

Code :
  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.ServiceProcess;
  7. using System.IO.IsolatedStorage ;
  8. using System.Runtime.InteropServices ;
  9. namespace KeyCapture
  10. {   
  11.       //Hook class using delegates
  12.       public class Win32Hook
  13.       {
  14.             public System.Diagnostics.EventLog eventLog1;
  15.             [DllImport( "user32",
  16. CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
  17.             public static extern int  SetWindowsHookEx(
  18.                   HookType idHook, HOOKPROC lpfn,int hmod,int
  19. dwThreadId);
  20.             public enum HookType
  21.             {
  22.                  WH_KEYBOARD = 2
  23.             }
  24.             public delegate int HOOKPROC(int nCode, int wParam, int 
  25. lParam);
  26.             public Win32Hook ()
  27.             {
  28.                   this.eventLog1 = new System.Diagnostics.EventLog();
  29.                   ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
  30.                   ((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
  31.                   if (!System.Diagnostics.EventLog.SourceExists
  32. ("KeyCaptSource" ))
  33.                   {
  34.                         System.Diagnostics.EventLog.CreateEventSource
  35. ("KeyCaptSource","KeyLogging" ) ;
  36.                   }
  37.                   eventLog1.Source = "KeyCaptSource" ;
  38.                   eventLog1.Log = "KeyLogging" ;
  39.             }
  40.             public void SetHook(int ThreadID)
  41.             {
  42.                   // set the keyboard hook
  43.                   SetWindowsHookEx(HookType.WH_KEYBOARD,
  44.                         new HOOKPROC(this.MyKeyboardProc),
  45.                         0,
  46.                         ThreadID );
  47.             }
  48.             public int MyKeyboardProc(int nCode, int wParam, int
  49. lParam)
  50.             {
  51.                   if ((nCode > 0) && (nCode == 3))
  52.                   {
  53.                         switch (wParam)
  54.                         {
  55.                               case 255 :
  56.                                     switch (lParam)
  57.                                     {
  58.                                           case 22609921 :
  59.                                             eventLog1.WriteEntry
  60. ("Volume Up" ) ;
  61.                                                 break ;
  62.                                           case 21233665 :
  63.                                           eventLog1.WriteEntry
  64. ("Volume Down" ) ;
  65.                                                 break ;
  66.                                           case 22675457 :
  67.                                           eventLog1.WriteEntry ("Mute
  68. Button" ) ;
  69.                                                 break ;
  70.                                     }
  71.                                     return 0 ;
  72.                                     break ;
  73.                               case 16 :
  74.                                     if (lParam == 2752513)
  75.                                     {
  76.                                      eventLog1.WriteEntry ("Close
  77. Button" ) ;
  78.                                     }
  79.                                     return 0 ;
  80.                                     break ;
  81.                               case 17 :
  82.                                     if (lParam == 1900545)
  83.                                     {
  84.                                           eventLog1.WriteEntry ("Help
  85. Button" ) ;
  86.                                     }
  87.                                     return 0 ;
  88.                                     break ;
  89.                               case 112 :
  90.                                     if (lParam == 3866625)
  91.                                     {
  92.                                     eventLog1.WriteEntry ("Left Mouse
  93. Button" ) ;
  94.                                     }
  95.                                     return 0 ;
  96.                                     break ;
  97.                         }
  98.                   }
  99.                   return 0 ;
  100.             }
  101.       }
  102.       public class KeyCapture : System.ServiceProcess.ServiceBase
  103.       {
  104.             public System.ComponentModel.Container components = null;
  105.             [DllImport("kernel32" )]
  106.             public static extern int GetCurrentThreadId();
  107.             public KeyCapture()
  108.             {
  109.                   this.ServiceName = "KeyCapture";
  110.                   InitializeComponent();
  111.             }
  112.             static void Main()
  113.             {
  114.                   System.ServiceProcess.ServiceBase[] ServicesToRun;
  115.                   ServicesToRun = new
  116. System.ServiceProcess.ServiceBase[] { new KeyCapture() };
  117.                   System.ServiceProcess.ServiceBase.Run(ServicesToRun);
  118.             }
  119.             private void InitializeComponent()
  120.             {
  121.             }
  122.             protected override void Dispose( bool disposing )
  123.             {
  124.                   if( disposing )
  125.                   {
  126.                         if (components != null)
  127.                         {
  128.                               components.Dispose();
  129.                         }
  130.                   }
  131.                   base.Dispose( disposing );
  132.             }
  133.             protected override void OnStart(string[] args)
  134.             {
  135.                   //INITIALISING HOOK CLASS ONSTART OF SERVICE
  136.                   Win32Hook hook = new Win32Hook();
  137.                   hook.SetHook(GetCurrentThreadId());
  138.             }
  139.             protected override void OnStop()
  140.             {
  141.             }
  142.             protected override void OnContinue()
  143.             {
  144.             }
  145.       }
  146. }


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-04-2003 à 03:57:55    

cool, c'est deja un bon debut ;)
 
merci...
 
par contre, du coup, il me faudrait la reponse a la question 3 (si kk1 sait ca?)
 
 

Citation :

vous avez un bon petit site qui parle de la programmation .Net en mixant C#, VB, C++, Perl ... cad, en utilisant un peu de chaque langage dans une appli ?

 
 
en gros, comment faire pour integrer par exemple une classe C++ ds un programme en C# ? j'ai deja matte la msdn, mais j'ai pas compris leur exemple :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed