Manipuler une fenêtre d'un process externe o_O ? [Résolu]

h0peless 2 Messages postés jeudi 10 avril 2008Date d'inscription 27 novembre 2008 Dernière intervention - 26 nov. 2008 à 23:23 - Dernière réponse : cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention
- 27 nov. 2008 à 09:18
Plop all !

J'essaye en C# de redimensionner/déplacer des fenêtres appartenant à des processus externes comme par exemple firefox, notepad, etc... seulement mon code ne marche pas et je ne comprends pas pourquoi =o/

[DllImport("user32.dll")]
static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

Plus loin dans le main...

Process[] localProc = Process.GetProcesses();

 for (int i = 0; i < localProc.Length; i++)
{
                if ( (localProc[i].MainWindowHandle != IntPtr.Zero) && (localProc[i].MainWindowTitle != null) )
                {
                             IntPtr ptrWin = GetWindow(localProc[i].MainWindowHandle, 0);

                             // MoveWindow renvoie true à chaque fois
                             MoveWindow(ptrWin, 0, 0, 512, 512, true);
                }
}

Si vous avez une idée, n'hésitez pas !
merci d'avance !
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 27 nov. 2008 à 00:03
3
Merci
Essayes voire ceci:

    public class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        internal static extern IntPtr GetForegroundWindow();


        [DllImport("user32.dll", SetLastError = true)]
        internal static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);


        [DllImport("user32.dll", SetLastError = true)]
        internal static extern void MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);


        internal struct RECT
        {
            public int left;
            public int top;
            public int right;
            public int bottom;
        }


        public static void Main(string[] args)
        {
            RECT Rect = new RECT();


            Thread.Sleep(2000);


            IntPtr id = GetForegroundWindow();
            Random myRandom = new Random();
            GetWindowRect(id, ref Rect);
            MoveWindow(id, myRandom.Next(1024), myRandom.Next(768), Rect.right - Rect.left, Rect.bottom - Rect.top, true);
        }
    }





<hr />
-Blog-
-Site Perso-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de cs_Bidou
h0peless 2 Messages postés jeudi 10 avril 2008Date d'inscription 27 novembre 2008 Dernière intervention - 27 nov. 2008 à 00:10
0
Merci
Yep ! ce code que j'avais déjà trouvé redimensionne seulement la fenêtre au premier plan !
Soit la console win32 de mon projet test lol ^^

mais finalement je viens de réussir à l'instant =D
enfait il suffisait de mettre à chaque fois un appel à OpenIcon(HWND) de user32.dll qui permet de restaurer une fenêtre correspondant au handle ^^ en gros à chaque processus présent dans la barre de tâche, il faut d'abord faire un OpenIcon puis un MoveWindow ^^

merci d'avoir répondu rapidement =o]
Commenter la réponse de h0peless
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 27 nov. 2008 à 09:18
0
Merci
C'est pour cela qu'il y a un thread.sleep, ca donne le temps de donner la main à un autre programme. Ouvre un notepad, lance le programme, et pendant les 2 secondes, donne la main à ton notepad.
Tu verras que c'est lui qui est déplacé et pas la console....

Maintenant, si la fenêtre n'est pas ouverte mais qu'elle est dans la barre des taches (ce que tu n'avais pas précisé), je me doute qu'il ne puisse pas la déplacée et qu'il faille d'abord l'ouvrir, c'est pas illogique ;-)

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.