Ich weiß nicht obs auch leichter geht, aber man könnte sich die Fensternamen aller laufenden Handles ausgeben lassen und diese dann mitzählen. Bei mehr als 2 = Exit
Sowas zum beispiel ?!
listbox zum mitlesen der Fensternamen
// nicht getestet
Delphi-Quellcode:
public
{ Public-Deklarationen }
end;
PMyEnumParam = ^TMyEnumParam;
TMyEnumParam = record
lb: TListbox;
end;
...
FUNCTION TfrmMain.getAnzahlProgrammInstanzen(): Integer;
VAR
Param: TMyEnumParam;
I: Integer;
wndHandle : TwndHandle;
meinCounter :integer;
function GetWindows(const hWnd : Longword; Param: PMyEnumParam): LongBool; stdcall;
var
Len : Longint;
S : String;
begin
Result := True;
if not ( IsWindow(hWnd) and IsWindowVisible(hWnd) ) then Exit;
Len := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
if Len > 0 then
begin
SetLength(S, Len);
SendMessage(hWnd, WM_GETTEXT, Len + 1, Longint(Pchar(S)));
Param.lb.Items.Add(Inttostr(hwnd) + '; ' + s);
end;
// mit Result = False kann die Callbackfunktion vorzeitig verlassen werden
end;
BEGIN
ListBox1.Items.Clear;
Param.lb := Listbox1;
Listbox1.Items.clear;
EnumWindows(@GetWindows, LPARAM(@Param));
//F2 aus Taskleiste anzeigen
FOR I := 0 TO ListBox1.Items.Count - 1 DO
BEGIN
//machwas mit den fensternamen
IF Pos('FENSTERNAME', Trim(AnsiUppercase(ListBox1.Items.Strings[i]))) > 0 THEN
inc(meinCounter);
END;
result := meinCounter;
END;