Hallo,
ich möchte die laufenden Tasks wie sie in der Taskbar von Windows angezeigt werden ermitteln. Das habe ich bis jetzt mit folgendem Code versucht:
<PRE>
function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;
begin
Result := True;
if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
(GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
(GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
Form1.Listbox1.Items.Add('Handle: ' + IntToStr(Wnd) + ',Text: ' + GetText(Wnd));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Param: Longint;
begin
ListBox1.Clear;
EnumWindows(@EnumWindowsProc, Param);
end;
</PRE>
Unter Windows 2000 werden auch wirklich nur die Tasks wie sie im Taskmanager stehen angezeigt. Aber wenn ich dasselbe unter WindowsXP teste, stehen da plötzlich noch drei "GDI+ Window" einträge.
Weiß jemand was ich da noch falsch mache oder kennt jemand einen anderen (besseren) Weg um mein Ziel zu erreichen?
ich möchte die laufenden Tasks wie sie in der Taskbar von Windows angezeigt werden ermitteln. Das habe ich bis jetzt mit folgendem Code versucht:
<PRE>
function EnumWindowsProc(Wnd: HWND; lParam: lParam): BOOL; stdcall;
begin
Result := True;
if (IsWindowVisible(Wnd) or IsIconic(wnd)) and
((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
(GetWindowLong(Wnd, GWL_HWNDPARENT) = GetDesktopWindow)) and
(GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
Form1.Listbox1.Items.Add('Handle: ' + IntToStr(Wnd) + ',Text: ' + GetText(Wnd));
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Param: Longint;
begin
ListBox1.Clear;
EnumWindows(@EnumWindowsProc, Param);
end;
</PRE>
Unter Windows 2000 werden auch wirklich nur die Tasks wie sie im Taskmanager stehen angezeigt. Aber wenn ich dasselbe unter WindowsXP teste, stehen da plötzlich noch drei "GDI+ Window" einträge.
Weiß jemand was ich da noch falsch mache oder kennt jemand einen anderen (besseren) Weg um mein Ziel zu erreichen?