J'ai le code ci-dessous :
namespace WindowMover
{
using System.Windows.Forms;
static class Logic
{
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
public static void Move()
{
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
var handle = process.MainWindowHandle;
var form = Control.FromHandle(handle);
if (form == null) continue;
SetWindowPos(handle, 0, 0, 0, form.Bounds.Width, form.Bounds.Height, SWP_NOZORDER | SWP_SHOWWINDOW);
}
}
}
}
Il est censé déplacer toutes les fenêtres de mon bureau à 0,0 (x,y) et conserver les mêmes tailles. Mon problème est que seule l'application appelante (construite en C#) est déplacée.
Dois-je utiliser autre chose que Control.FromHandle(IntPtr) ? Est-ce que cela ne trouvera que les contrôles dotnet ? Je ne sais pas si c'est le cas, mais je ne sais pas si c'est le cas.
De plus, le second 0 dans SetWindowPos était juste un int aléatoire que j'ai collé là, je ne suis pas sûr de ce qu'il faut utiliser pour int hWndInsertAfter
Qu'en est-il des processus avec plusieurs fenêtres comme pidgin ?