Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi laufende Tasks (https://www.delphipraxis.net/40278-laufende-tasks.html)

MatthiasW 13. Feb 2005 17:09


laufende Tasks
 
ich möchte die Anwendungen (also die die ein sichtbares Fenster haben und im Taskmanager angezeigt werden) ermitteln. Ich habe code hier aus dem Forum um alle Processe zu ermitteln. Aber nach welchen Kriterien kann ich jetzt die Prozesse ausfiltern die im Taskmanager und im zeiten Fall als Symbol im Systray zu sehen sind? Das ganze soll nur unter Windows 2000/XP funzen.

Gibts da ProzessID's die für sichtbare Applicationen/ oder im Systray stehen?

sniper_w 13. Feb 2005 17:50

Re: laufende Tasks
 
Delphi-Quellcode:
function Getwin(Handle: THandle; List: TStringList): boolean; stdcall;
var
  Buffer : array[0..255] of Char;
begin
  //get the window caption
  SendMessage(Handle, WM_GETTEXT, 255, integer(@Buffer[0]));
  List.Add(Buffer);
  //continue enumeration
  Result :=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ListBox1.Clear;
 EnumWindows(@Getwin, LParam(ListBox1.Items));
end;
Ich glaube, das sollte ausreichen. :mrgreen:

MatthiasW 13. Feb 2005 20:45

Re: laufende Tasks
 
durch diese Funktion werden aber nicht nur die Anwendungen aus der Taskbar gefunden sondern auch eine ganze Menge anderer unsichtbarer Fenster.

sniper_w 13. Feb 2005 21:25

Re: laufende Tasks
 
Delphi-Quellcode:
function EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
var
 WinCaption : string;
 Len: integer;
begin
 Result := True;
 Len := GetWindowTextLength(Wnd);
 SetLength(WinCaption, Len);
 GetWindowText(Wnd, PChar(WinCaption), Len+1);
 if Trim(WinCaption) <> '' then
   Form1.Listbox1.Items.Add(Format('%.6x : %s', [Wnd, WinCaption]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@EnumWinProc, 0);
end;
Das könnte eine schnelle Lösung sein.

MatthiasW 13. Feb 2005 22:20

Re: laufende Tasks
 
Liste der Anhänge anzeigen (Anzahl: 1)
komisch der angegebene Code liefert bei mir das in dem Bild gezeigte Ergebnis. Wieso bekomme ich immer alle Fenster angezeigt

sniper_w 13. Feb 2005 22:28

Re: laufende Tasks
 
Warum alle Fenster?
Alles was ein Handle (typ HWND) und keine leere Caption besizt wird angezeigt, egal sichtbar oder nicht.
Zitat:

The EnumWindows function enumerates all top-level windows on the screen by passing the handle of each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.

Remarks

The EnumWindows function does not enumerate child windows.

Sprint 13. Feb 2005 22:28

Re: laufende Tasks
 
Zitat:

Zitat von MatthiasW
Wieso bekomme ich immer alle Fenster angezeigt

Weil EnumWindows nun mal alle TopLevel Fenster ermittelt.

MatthiasW 13. Feb 2005 22:42

Re: laufende Tasks
 
ja, aber mit welcher Funktion kann ich nun nur die in der Taskbar sichtbaren Applicationen ermitteln?

ReDoX 13. Feb 2005 23:35

Re: laufende Tasks
 
Wenn ich verstehe was du meinst dann ist das ,dass richtige für dich http://www.swissdelphicenter.com/de/showcode.php?id=485
Mfg ReDoX

MatthiasW 13. Feb 2005 23:57

Re: laufende Tasks
 
Danke für den Link, das ist genau das was ich gesucht habe :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz