Réponse acceptée !
not (winrect.Top=0) and (winrect.left=0)
Avec des tests multiples, il faut faire attention aux parenthèses ou bien connaitre la priorité des opérateurs.
Le not pourrait aussi bien s'appliquer sur le (winrect.Top=0) que sur le ((winrect.Top=0) and (winrect.left=0))
La première solution a plusieurs avantages :
Elle marche quel que soit le langage.
Ceux qui lisent le code et qui ne connaissent pas l'ordre de priorité (Moi par exemple

) comprennent quand même.
Elle ne prend pas de place dans le cerveau.

Donc pour lever l'ambiguité :
not ((winrect.Top=0) and (winrect.left=0))
Plus généralement, tu devrais acquérir les méthodes te permettant de te dépatouiller de ce genre de problème tout seul.
Delphi possède un débogueur permettant par exemple de faire du pas à pas dans les instructions, et d'espionner les valeurs des variables.
Bon, c'est vrai que dans ton cas, c'est un peu compliqué car tu dois avoir le lecteur en plein écran... Mais rien ne t'empèche d'écrire manuellement les valeurs de winrect dans un TMemo par exemple.
Pour finir, que tu ne tiennes pas compte de ma remarque sur la comparaison de chaîne, je l'admet... Certaines personne pourraient la contester.
Par contre, concernant le test du retour de FindWindow, là y a pas photo -> faut tester !

On emploit pas une handle (Ou une variable...) si on est pas sûr qu'il est OK.