Entwickler-Ecke

Windows API - Fenster eindeutig identifizieren


MisterCP - Mi 30.05.12 13:21
Titel: Fenster eindeutig identifizieren
Hallo,

ich muß ein fremdes Programm (c#) auf einem Touch-PC laufen lassen und möchte beim öffnen des ort integrierten Logins ein OnScreenKeyboard einblenden.

Wenn das Loginfenster geöffnet wird, erkenne ich das in meinem Delphi-Programm über den Klassennamen nur bedingt, weil sich auch andere Fenster des C-Programms mit diesem Klassennamen melden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function EnumWindowsProc(wHandle: HWND): Bool; stdcallexport;
var
  Title, ClassName: array[0..255of char;
  strClassName : String;
begin
  Result := True;
  GetWindowText(wHandle, Title, 255);
  GetClassName(wHandle, ClassName, 255);
  StrClassName := ClassName;
  if ((strClassName = 'AfxFrameOrView70u'and (IsWindowVisible(wHandle))) then begin
     AISLoginFound := True
  end;{if}
end;


Den Fenstertitel kann ich ebenfalls nicht zur Identifizierung nutzen, weil der sich gelegentlich ändert, spätestens, wenn die Oberflächensprache umgeschaltet wird.

Gibt es auch irgendeinen Befehl, wie ich etwas anderes eindeutiges, z.B. den Objektnamen zur Entwurfszeit oder ähnl. herausbekommen könnte?

Vielen Dank für eure Hilfe

Moderiert von user profile iconMartok: Code- durch Delphi-Tags ersetzt


bummi - Mi 30.05.12 23:43

Vielleicht wir es über die enthaltenen ChildControls eindeutig identifizierbar ...


MisterCP - Do 31.05.12 07:47

hatte ich auch gehofft, aber leider Fehlanzeige.
Es sind lediglich ein Eingabefeld für das Passwort sowie drei Tasten (Anmelden, Abmelden, Abbrechen) enthalten. Letztere ändern, ebenso wie das Fenster selbst, beim Wechsel der Oberflächensprache, ihre Caption, so daß ich auch hier einen konkreten, nicht änderbaren Namen bräuchte.

Falls die Idee auftauchen sollte, doch einfach auf mehrere (fremdsprachige) Captions abzufragen: Dies würde daran scheitern, daß die fremdsprachigen Texte vom Bediener beliebig manipuliert/eingegeben werden können. Die Recoucendatei liegt dann zwar immer mit im Programmverzeichnis, aber deren Aufbau kenne ich nicht, bzw. ich kann den gerade verwendeten Text für die Captions dort nicht auslesen.


bummi - Do 31.05.12 08:12

Die Klassenkombinationen sind auch nicht eindeutig?