Interessantes Problem! Ich habe seit einiger Zeit keine Low-Level (denke Win32) Windows-Programmierung, aber hier ist, was ich tun würde.
Verwenden Sie eine Named Pipe und lassen Sie Ihre Anwendung darauf hören. Verwenden Sie diese Named Pipe als Kommunikationsmedium, implementieren Sie ein echtes einfaches Protokoll, mit dem Sie die Anwendung nach dem Namen eines Steuerelements abfragen können, wenn Sie HWND oder andere nützliche Dinge verwenden. Stellen Sie sicher, dass das Protokoll reich genug ist, sodass genügend Informationen zwischen Ihrer Anwendung und dem Testframework ausgetauscht werden. Stellen Sie sicher, dass das Testframework nicht zu viel "besonderes Verhalten" von der App liefert, denn dann würden Sie nicht wirklich die Features testen, sondern Ihr Testframework.
Es gibt wahrscheinlich viel elegantere und coolere Möglichkeiten, dies zu implementieren, aber das ist, woran ich mich von ganz oben erinnere, mit nur einfachen Win32 API-Aufrufe.
Ein anderer Ansatz, den wir für unser Produkt bei der Arbeit implementiert haben, besteht darin, Benutzerereignisse wie Mausklicks und Schlüsselereignisse in einem Ereignisskript aufzuzeichnen. Dies sollte reich genug sein, damit Sie die Anwendung abspielen lassen können, indem Sie diese Ereignisse künstlich in die Nachrichtenwarteschlange einfügen und sich so verhalten, wie sie es bei der ersten Aufzeichnung des Skripts getan haben. Sie simulieren grundsätzlich den Benutzer, wenn Sie das Skript wiedergeben.
Darüber hinaus können Sie alle wichtigen Status (Benutzerdokument, Voreinstellungen, GUI-Steuerelemente, Hierarchie usw.) einmal aufzeichnen, wenn Sie das Skript aufzeichnen, und einmal, wenn Sie es wiedergeben. Dies gibt Ihnen zwei Datensätze, die Sie vergleichen können, um sicherzustellen, dass zum Beispiel alles gleich bleibt. Diese Lösung bietet Ihnen Tests, die nicht einfach zu ändern sind (Sie müssen neu aufzeichnen, wenn sich Ihre GUI ändert), aber sie bieten großartige Regressionstests.
(EDIT: Dies ist auch ein tolles QA-Tool während der Beta-Tests, zum Beispiel: einfach Ihre Benutzer ihre Aktionen aufzeichnen, und wenn es einen Absturz gibt, haben Sie eine gute Chance, das Problem einfach durch die Wiedergabe der Skript)
Viel Glück!
Carl