Comment intercepter le message WM_WINDOWPOSCHANGING ?

jagxx Messages postés 19 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 24 février 2009 - 5 mai 2008 à 16:17
jagxx Messages postés 19 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 24 février 2009 - 10 mai 2008 à 22:34
Bonjour,

J'aimerais intercepter le message WM_WINDOWPOSCHANGING d'une fenêtre externe (Titre : "window2") à mon application afin d'en interdire le deplacement. Je recupere le handle de "window2" avec la fonction API FindWindow(null, "window2"). Je pense qu'il faut ensuite utiliser la fonction C# WndProc, mais je suis un peu perdu. Quelqu'un pourrait il m'aider svp ?

Merci d'avance

Jag

3 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 mai 2008 à 10:25
En fait... sur le principe, tu n'es pas loin.

Il faut que tu crées une classe héritant de NativeWindow.
Ensuite, tu lui assignes le handle de "window2" avec la méthode AssignHandle... et ensuite tu surcharges la méthode WndProc pour intercepter le message WM_WINDOWSPOSCHANGING.

Un conseil, crée un destructeur sur ta classe pour appeler la méthode ReleaseHandle().

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
jagxx Messages postés 19 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 24 février 2009
9 mai 2008 à 20:28
Je cré une classe héritant de NativeWindow... Faut-il ensuite que j'instancie un objet dans la classe Form1 du projet Windows? J'ai essaié plusieurs scénario mais je n'y arrive pas. Help me, please :) Merci

Jagxx
0
jagxx Messages postés 19 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 24 février 2009
10 mai 2008 à 22:34
Voici le code qui ne fonctionne pas :

public partial class Form1 : Form
{
[DllImport("User32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName);

public Form1()
{
InitializeComponent();
MyNativWindow mnw = new MyNativWindow();
mnw.AssignHandle((IntPtr)FindWindow(null, "Calculatrice"));
}
}

public class MyNativWindow : NativeWindow
{
const int WM_WINDOWPOSCHANGING = 0x0046;

protected override void WndProc(ref Message m)
{
base.WndProc(ref m);

if (m.Msg == WM_WINDOWPOSCHANGING)
{
MessageBox.Show("a");
}
}
}

Quelqu'un a t-il une idée ?
0
Rejoignez-nous