h0peless
Messages postés2Date d'inscriptionjeudi 10 avril 2008StatutMembreDernière intervention27 novembre 2008
-
26 nov. 2008 à 23:23
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
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 !
[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);
}
}
h0peless
Messages postés2Date d'inscriptionjeudi 10 avril 2008StatutMembreDernière intervention27 novembre 2008 27 nov. 2008 à 00:10
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 ^^
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 27 nov. 2008 à 09:18
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 ;-)