Einzelnen Beitrag anzeigen

H3llsing

Registriert seit: 12. Nov 2008
96 Beiträge
 
Delphi 2010 Enterprise
 
#11

AW: Programmposition beim Doppelaufruf ändern?

  Alt 9. Dez 2010, 15:59
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;
  Mit Zitat antworten Zitat