Intercepter les messages windows

Signaler
Messages postés
19
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
24 février 2009
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonjour,

Je me permets de créer un nouveau message bien que le dernier est du
05.05.08 et qu'il concerne le même sujet mais avec des petites modifications (Thème API).
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

1 réponse

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Bonjour,
Je ne suis pas spécialiste des API, mais je pense que tu es obligé de faire un hook global si tu veux empecher le déplacement du fenetre externe à ton application.
En tout cas le WndProc ne sera pas appelé comme tu as pu le constaté dans ton exemple.

<hr />
-My Blog-