Intercepter les messages Windows

Le
Jag
Bonjour,

Je me permets de créer un nouveau commentaire bien que le dernier date du
05.05.08 et qu'il concerne le même sujet mais avec des petites modifications.
J'ai posté sur plusieurs forums mais sans resultat et ne trouve pas
d'exemples sur le Net.

Je pense que la difficulté est justement de catcher les messages

J'aimerais intercepter les message Windows type WM_NCHITTEST d'une
application externe à ma Form afin de pouvoir le traiter dans WndProc
(NativeWindow) et rendre l'appli externe indeplacable. Voici mon code :

public partial class Form1 : Form
{
IntPtr hwnd;
public Form1()
{
InitializeComponent();
Process[] procs = Process.GetProcessesByName("calc");
if (procs.Length != 0)
{
hwnd = procs[0].MainWindowHandle;
}
else
MessageBox.Show("Calculatrice is not running.");

MyNativeWindow mnw = new MyNativeWindow(hwnd);
}

public class MyNativeWindow : NativeWindow
{
public MyNativeWindow(IntPtr hParent)
{
AssignHandle(hParent);
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x84:
base.WndProc(ref m);
if (m.Result == (IntPtr)2) // 2 = barre de titre
m.Result = (IntPtr)0;
break;
default:
base.WndProc(ref m);
break;
}
}
}
}

Aucun message arrive dans la methode WndProc.
Par contre si j'assigne le Handle de ma Form pour un essai, WndProc
intercepte tous les messages et ma Form devient indéplacable.

Comment intercepter les messages de l'appli externe ? Faut il rajouter un
evenement quelque part ou est ce parce que ce n'est pas le même Thread ?
Faut-il plutot utiliser un Hook global ?

Merci d'avance.

Jag
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
zoltix
Le #12146271
On 15 mai, 16:09, Jag
Bonjour,

Je me permets de créer un nouveau commentaire bien que le dernier date d u
05.05.08 et qu'il concerne le même sujet mais avec des petites modificat ions.
J'ai posté sur plusieurs forums mais sans resultat et ne trouve pas
d'exemples sur le Net.

Je pense que la difficulté est justement de catcher les messages ...

J'aimerais intercepter les message Windows type WM_NCHITTEST d'une
application externe à ma Form afin de pouvoir le traiter dans WndProc
(NativeWindow) et rendre l'appli externe indeplacable. Voici mon code :

public partial class Form1 : Form
{
IntPtr hwnd;
public Form1()
{
InitializeComponent();
Process[] procs = Process.GetProcessesByName("calc");
if (procs.Length != 0)
{
hwnd = procs[0].MainWindowHandle;}

else
MessageBox.Show("Calculatrice is not running.");

MyNativeWindow mnw = new MyNativeWindow(hwnd);

}

public class MyNativeWindow : NativeWindow
{
public MyNativeWindow(IntPtr hParent)
{
AssignHandle(hParent);}

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x84:
base.WndProc(ref m);
if (m.Result == (IntPtr)2) // 2 = barre de titre
m.Result = (IntPtr)0;
break;
default:
base.WndProc(ref m);
break;

}
}
}
}

Aucun message arrive dans la methode WndProc.
Par contre si j'assigne le Handle de ma Form pour un essai, WndProc
intercepte tous les messages et ma Form devient indéplacable.

Comment intercepter les messages de l'appli externe ? Faut il rajouter un
evenement quelque part ou est ce parce que ce n'est pas le même Thread ?
Faut-il plutot utiliser un Hook global ?

Merci d'avance.

Jag



Ca m'interresse aussi .....si tu as des infos.....ne nous oublie pas
Jean-Michel Berthier
Le #12146261
Bonjour,
La réponse est dans la question.
Ce type de bricolage fonctionnait avec Windows 16 bits, mais depuis NT, on
ne peut plus manipuler la boucle de message d'une application externe. Il
faut que l'application externe ait prévu un système de communication
explicite pour cela.




"Jag" news:
Bonjour,

Je me permets de créer un nouveau commentaire bien que le dernier date du
05.05.08 et qu'il concerne le même sujet mais avec des petites
modifications.
J'ai posté sur plusieurs forums mais sans resultat et ne trouve pas
d'exemples sur le Net.

Je pense que la difficulté est justement de catcher les messages ...

J'aimerais intercepter les message Windows type WM_NCHITTEST d'une
application externe à ma Form afin de pouvoir le traiter dans WndProc
(NativeWindow) et rendre l'appli externe indeplacable. Voici mon code :

public partial class Form1 : Form
{
IntPtr hwnd;
public Form1()
{
InitializeComponent();
Process[] procs = Process.GetProcessesByName("calc");
if (procs.Length != 0)
{
hwnd = procs[0].MainWindowHandle;
}
else
MessageBox.Show("Calculatrice is not running.");

MyNativeWindow mnw = new MyNativeWindow(hwnd);
}

public class MyNativeWindow : NativeWindow
{
public MyNativeWindow(IntPtr hParent)
{
AssignHandle(hParent);
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x84:
base.WndProc(ref m);
if (m.Result == (IntPtr)2) // 2 = barre de titre
m.Result = (IntPtr)0;
break;
default:
base.WndProc(ref m);
break;
}
}
}
}

Aucun message arrive dans la methode WndProc.
Par contre si j'assigne le Handle de ma Form pour un essai, WndProc
intercepte tous les messages et ma Form devient indéplacable.

Comment intercepter les messages de l'appli externe ? Faut il rajouter un
evenement quelque part ou est ce parce que ce n'est pas le même Thread ?
Faut-il plutot utiliser un Hook global ?

Merci d'avance.

Jag


Publicité
Poster une réponse
Anonyme