FindWindow gibt immer nur das zuerst gefundene
Handle zurück. Und weil das so ist, ist das für dich hier auch nicht geeignet ...eben weil Du immer nach Windows suchen musst, die bzgl. ihres Class-Namens und bzgl. ihres Title-Textes quasi zueinander identische Windows sind.
Mit FindWindowEx geht das aber. Dabei muss der erste Parameter immer die Null sein, was soviel heißt wie: Es werden immer Windows gesucht, die gerade auf dem Desktop laufen ...wobei für alle diese auf dem Desktop laufenden Windows dann gilt, dass sie damit auch quasi Child-Windows dieses Desktops sind. Ergo wirst Du mit
Prog1 := FindWindowEx(0,0,ClassName,TitleText);
dann auch das erste von dir gesuchte Window finden. Und für die Suche nach dem zweiten solchen Window musst Du jetzt einfach nur hinter diesem ersten Fund mit der Suche weitermachen, also:
Prog2 := FindWindowEx(0,Prog1,ClassName,TitleText);
usw. usf...
Und genauso suchst Du dann natürlich auch immer nach einer bestimmten
Handle, von der Du z.B. wissen willst, ob es sie denn überhaupt noch gibt (bzw. ob das dazugehörende Programm noch läuft)...