Lo que no comprendo es como puedes llamar a una funcion con 2 argumentos, habiendo sido declarada solo con uno (LocatedWindows)! te dejo un ejemplo un poco distinto y un poco mas "correcto", pues GetWindow te puede retornar el manejador de una insancia anteriormente creada de la misma aplicacion.
Código:
int __stdcall EnumProc(void * hWnd, long lParam)
{
if (IsWindowVisible(hWnd)) // aquí puedes realizar tu comparación si es el caso
SetWindowPos(hWnd, HWND_TOPMOST, lParam, 0, 0, 0, SWP_NOSIZE);
return TRUE;
}
void Exec(AnsiString CommandLine, long Left)
{
STARTUPINFO si = {sizeof si};
PROCESS_INFORMATION pi;
CreateProcessA(NULL, CommandLine.c_str(), NULL, NULL, 0, 0, NULL, NULL, &si, &pi);
WaitForInputIdle(pi.hProcess, INFINITE);
EnumThreadWindows(pi.dwThreadId, (int (__stdcall *)())EnumProc, Left);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Exec("c:\\windows\\notepad.exe", 0);
Exec("c:\\windows\\notepad.exe", 500);
}
Saludos