Hallo Socke,
hmm, da habe ich wohl etwas falsch verstanden.
Ich dachte, dass man mit Lazarus grundsätzlich Anwendungen für ein fensterorientiertes Betriebssystem schreibt. Natürlich gibt es Konsolenanwendungen in jedem BS aber das Gros dürfte sich doch einer grafischen Oberfläche bedienen.
Ich würde eine Anwendung schon plattformunabhängig nennen, wenn sie jeweils unter Windows, Linux/KDE/Gnome und Mac innerhalb der grafischen Oberfläche läuft. Aber ist schon klar, dass Lazarus da vielleicht einen höheren Anspruch hat.
FindWindow bezieht sich doch eindeutig auf eine grafische Oberfläche. In einer WinConsoleApp kann man damit auch nichts anfangen.
Hast du nicht grundsätzlich das Problem, dass mehrere Instanzen deiner zu suchenden Anwendung (und damit des Fensters) existieren können?
Nein, in diesem Fall nicht. Es handelt sich um eine Anwendung, die nur einmal gestartet sein kann. Sie benutzt auch den FindWindow-Mechanismus. Wäre es anders, müsste man natürlich auch anders vorgehen.
Verwendet man unter Delphi pro Anwendung einen eigenen Klassennamen für das Hauptfenster, dann lassen sich mit FindWindow(Classname, nil) alle Instanzen einer
bestimmten Anwendung finden. Da es in diesem Fall nur eine Instanz der Anwendung geben kann, hat man damit das richtige Handle gefunden und kann mit der Anwendung "reden". Unter Lazarus heißen
alle Lazarusanwendungen 'Window' womit diese Möglichkeit leider nicht existiert.
Das ist das ganze Problem. Lazarus erzeugt Windows-Fenster einfach anders als Delphi. Mit Delphi ist die Abfrage ob eine Anwendung, die nur einmal laufen soll, schon läuft, auf diese Weise eben sehr einfach. Gleiches gilt, wenn man das Fensterhandle für andere Dinge benötigt (z.B.: PostMessage).
Bleibt halt die Frage warum die Lazarusentwickler Windows-Fenster mit einem nutzlosen Klassennamen versehen anstatt darüber dem Anwendungsentwickler eine Unterscheidungsmöglichkeit der verschiedenen Anwendungen zu ermöglichen?
Eventuell mag dir auch dein Widgetset weiterhelfen (aber eher unwahrscheinlich).
Was genau ist denn ein Widgetset? Habe ich jetzt schon mehrmals gelesen...
Grüße,
Uwe