begin process at 2010 02 09 22:10:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

API

 > 

Comment utiliser le HOOK pour capturer les messages Windows


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

Comment utiliser le HOOK pour capturer les messages Windows

samedi 13 septembre 2008 à 03:18:24 | Comment utiliser le HOOK pour capturer les messages Windows

AlexBob789



BobAlex
samedi 13 septembre 2008 à 10:56:10 | Re : Comment utiliser le HOOK pour capturer les messages Windows

MorpionMx

Membre Club Administrateur CodeS-SourceS
Je crois que le message est passé a la trappe ?
Ou alors il faut juste lire le titre ?

Mx
MVP C#
 

samedi 13 septembre 2008 à 21:15:56 | Re : Comment utiliser le HOOK pour capturer les messages Windows

AlexBob789


Bonjour,
Voci le message original:

Voilà cela un moment je tente de capturer les messages windows entrant et sortant de outlook 2003, mais je n'arrive pas. En faite qd l'usager clicque sur le boutton de send ou receive du Menu de Outlook ou qu'un email arrive dans le repertoire Inbox il ya des messages windows qui sont déclenchés, et j'aimerai les capturer.
Pour cela j'utilise la fonction SetWindowsHookEx mais cela ne marche pas. Voici brievement le code:


private IntPtr FindWindHandle(string aProcName)
        {
            IntPtr lProcNameHandle = IntPtr.Zero;
            Process[] processes = Process.GetProcessesByName(aProcName);

            if (processes.Length > 0)
                if (processes[0].Threads.Count > 0)
                    lProcNameHandle = processes[0].Handle;

            return lProcNameHandle;

        }

private IntPtr FindWindThreadIDByGetWindowThreadProcessId()
        {
            return GetWindowThreadProcessId(GetOutlookThread(), IntPtr.Zero);                

        }

private IntPtr GetOutlookThread()        
{
    IntPtr myWindow = IntPtr.Zero;
    Process[] processes = Process.GetProcessesByName("Outlook" );
    foreach (Process p in processes)
    {
         myWindow = p.MainWindowHandle;        
    }
    return myWindow;
}


public void SetHook()
{
IntPtr hook1 = SetWindowsHookEx(HookType.WH_GETMESSAGE, myGetAllMsg, IntPtr.Zero, AppDomain.GetCurrentThreadId()); // hook1 a une valeur mais ne capture pas les messages
      IntPtr outlookThreadId = FindWindThreadIDByGetWindowThreadProcessId(); // me retourne le threadid dans lequel roule Outlook
      HookProc myGetAllMsg = new HookProc(GetAllMsg);
      IntPtr hook2 = SetWindowsHookEx(HookType.WH_GETMESSAGE, myGetAllMsg, IntPtr.Zero, (Int32)outlookThreadId); // Je tente de faire le hook sur le threadID de outlook,  mais Hook2 a la valeur 0, cela veut dire que le hook n'a pas marché
      IntPtr hook3 = SetWindowsHookEx(HookType.WH_GETMESSAGE, myGetAllMsg, FindWindHandle("Outlook" ), 0);  // Je tente de faire le hook sur le handle de outlook, Hook3  a aussi le valeur 0
}

Je ne comprends pas pkoi quand j'utlise AppDomain.GetCurrentThreadId le hook a une valeur mais qd je considère le threadId dans le process Outook roule(j'espère que j'ai le bon threadID)  
Voilà en gros. Votre aide me sera le bienvenu pour m'éclaircir dans cette gymnastique cérébrale du HOOK.

dimanche 14 septembre 2008 à 10:15:21 | Re : Comment utiliser le HOOK pour capturer les messages Windows

Bidou

Administrateur CodeS-SourceS
Hi, Je ne sais pas, mais le code de GetOutlookThread me paraît quelques peu étrange après un rapide coup d'oeil. Seul le dernier IntPtr de la liste de process sera retourné, non?
dimanche 14 septembre 2008 à 15:30:48 | Re : Comment utiliser le HOOK pour capturer les messages Windows

AlexBob789

Tu as raison, mais en faite tu ne peux avoir q'une seule instance de Outlook d'ouvert et dans ce cas c'est l'unique handle de Outlook qui sera retourné, d'où je n'avais pas besoin de l'avoir dans un foreach.

Merci


Cette discussion est classée dans : windows, utiliser, messages, capturer, hook


Répondre à ce message

Sujets en rapport avec ce message

les API windows et c# [ par otofraise ] Bonjour a tous,Habitue au c++, je debute avec c# et je dois dire que je suis pomme .J'aimerais utiliser les api windows mais voila, je ne retrouve pas Post-filtrage des messages Windows [ par DarkenerDaemonEx ] Bonjour,L'interface IMessageFilter permet de pré-filtrer des messages et peut aussi les empêcher d'arriver à destination, mais dans mon cas il faudrai utiliser progressBar dans un sous programme [ par corine ] salut,j'ai créé un windows form en C# avec visual studio. Dans ce windows form j'ai inséré une progressBar.J'ai également mis dans les menus de mon wi Utiliser les icones windows (open, close, save...) [ par iliak ] BonjourJe souhaite utiliser les icônes systèmes (ouvrir, fermer, sauver, imprimer....) dans mon appli C# mais je ne sais pas trop trop comment faire. Masquer les messages d'erreur Windows AU SECOURS !!!! [ par gerbito ] Bonjour,   Quelqu'un connaîtraît-il une méthode valable pour masquer les messages d'erreur Windows ?   En effet j'ai une appli développée en C# dont l [C# => Bar] Interception de messages windows (imprimante, audio, vidéo) [ par magicx92 ] Bonjour à tous.Je suis étudiant en info (5e année) et pour un mémoire de recherche j'ai besoin d'intercepter un certain nombre d'informations de windo trapper les messages sous WinCE 5.0 [ par churrros ] J'ai étudié certains tuto pour essayer d'attrapper les messages envoyés à ma fenêtre et empêcher qu'elle soit déplacée, mais j'y arrive pas. J'utilise Utiliser une application Windows [ par folivan ] Bonjour tout le monde,Je cherche le moyen d'utiliser "Paint" (pbrush.exe) dans mon application en C#.Mon but : Ouvrir "Paint" sans qu'il soit visible net send [ par kedric ] bonjourd je voudrais savoir comment je peut utiliser la commande net send le plus simplement possible on ma dis en une ligne que je pouvais utiliser l API [ par T103 ] je n'arrive po a utiliser l API getcursorposition en C#si kelkun sait komen la declarer et l'utiliser merci beaucoup


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,312 sec (3)

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