Ciao
Questa è la firma della funzione, sono spiegati anche i parametri:
[DllImport("user32.dll")]
private static extern bool SetWindowPos(
IntPtr hWnd, //L'handle della finestra da spostare
IntPtr hWndInsertAfter, //L'handle della finestra dietro cui spostarla
int x, //La nuova posizione della finestra dal lato sinistro
int y, //La nuova posizione della finestra dall'alto
int cx, //La nuova larghezza della finestra
int cy, //La nuova altezza della finestra
uint uFlags //Specifica quali argomenti devono essere ritenuti validi
//e le impostazioni di spostamento
);
Qui sotto c'è un esempio di come puoi usare la funzione:
//Questi sono alcuni flag che servono per spostare la finestra
private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOACTIVATE = 0x0010;
public void test()
{
Process keyboardProcess = new Process();
keyboardProcess.StartInfo.FileName = @"C:\windows\system32\osk.exe";
keyboardProcess.Start();
//Attende un attimo che venga creata la finestra
keyboardProcess.WaitForInputIdle(100);
SetWindowPos(
keyboardProcess.MainWindowHandle, //Sposta la finestra principale del processo
this.Handle, //la mette dietro alla finestra corrente
200, //coordinate (200, 100)
100,
0, //le nuove dimensioni vengono tralasciate
0, //impostando il flag SWP_NOSIZE
SWP_NOSIZE | SWP_NOACTIVATE //Ignora i parametri cx e cy e non attiva la finestra
);
}
Per portarla in primo piano invece basta che rimuovi il flag SWP_NOACTIVATE e imposti il parametro hWndInsertAfter su (IntPtr)0, che è il valore di HWND_TOP
Luca