Ok ho risolto creando a mano il processo con CreateProcess, ma qualcosa non va.

La finestra che voglio aprire, purtroppo, non sembra funzionare.
Sto provando con un semplice notepad per vedere come spostare la posizione:

codice:
	HWND desktop = GetDesktopWindow();
	HWND childwindow;
	DWORD ProcessID;
	PROCESS_INFORMATION ProcInfo;
	STARTUPINFO si;
	unsigned int x;
	unsigned int y;

	ZeroMemory(&si,sizeof(STARTUPINFO));
	si.cb = sizeof(STARTUPINFO);

	CreateProcess(NULL,"notepad.exe",NULL,NULL,false,0,NULL,NULL,&si,&ProcInfo);

	childwindow = GetWindow(desktop,GW_CHILD);

	while (childwindow != NULL)
		{
			GetWindowThreadProcessId(childwindow,&ProcessID);

				if ( ProcessID == ProcInfo.dwProcessId )
					break;

			childwindow = GetWindow(childwindow,GW_HWNDNEXT);
		}

	if (childwindow == NULL)
		return;				//Il software non è stato aperto. Non dovrebbe mai accadere.

//	CloseHandle(ProcInfo.hProcess); //Devo chiuderli??
//	CloseHandle(ProcInfo.hThread);
	
	x = GetSystemMetrics(SM_CXSCREEN);
	y = GetSystemMetrics(SM_CYSCREEN);

	SetWindowPos(childwindow,HWND_TOP,0,0,x-100,y-100,SWP_SHOWWINDOW);
Se premo sul notepad, una volta completato, appare solo una schermata nera che non funziona (il sistema non si blocca, comunque).
Sia se chiudo o non chiudo i 2 handle (comunque da una ricerca su msdn sembra che debbano essere chiusi poichè non rappresentano il processo in se e per se, ma è solo un riferimento).

Altra cosa strana: se vado in debug e faccio aprire il processo, ovviamente il notepad salta sul desktop avanti Visual Studio.
Per continuare il debug ovviamente sposto la mia attenzione sulla finestra di Visual Studio e continuo a debuggare, e il tutto continua.

Se invece avvio il programma senza debug, mi appare semplicemente il notepad e non sembra fare i suoi compiti (inutili i breakpoints: l'ultimo funzionante è sul confronto degli ID dei processi).

La finestra, ad ogni modo, sembra ignorare anche chiamate del tipo ShowWindow e SetWindowText