Delphi-PRAXiS

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

MatthiasW 14. Feb 2005 10:01

Re: laufende Tasks
 
als ich gestern den Tipp von "ReDoX" auf meinem Windows2000 Rechner gestestet habe, wurden alle Anwendungen und nur die Anwendungen aus der Taskleiste angezeigt (so wies sein soll). Als ich heute den selben Code auf meiner WindowsXP - Maschine getestet habe wurden noch drei Einträge "GDI+ Window" angezeigt welche nicht im Taskmanager angezeigt werden. Hat jemand ne Idee wie ich die noch ausfiltern kann?

sniper_w 14. Feb 2005 10:55

Re: laufende Tasks
 
Bei mir ist alles in Ordnung. (WinXP)

MatthiasW 14. Feb 2005 11:26

Re: laufende Tasks
 
Seltsam :shock:

Vielleicht sollte ich es mal noch auf meiner WindowsXP - Prof Workstation zusätzlich testen.
Ich verstehe es eh nich ganz warum mir dieser Code Fenster anzeigt die gar nicht sichtbar sind. :gruebel:

MatthiasW 14. Feb 2005 21:37

Re: laufende Tasks
 
habs rausgefunden warum stellenweise noch ein falscher Eintrag mit drinnen stand:

ich habe folgende Zeile auskommentiert und dann gings:

Delphi-Quellcode:
{or IsIconic(wnd)}
es werden trotzdem alle Anwendungen angezeigt auch wenn diese Minimiert sind.

Mfg Matthias


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

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