Hi,
mit [Alt]+[Tab] habe ich mich gerade beschäftigt, mit der Taskleiste hat das anscheinend nicht viel zu tun. In dem Fenster erscheinen auch aktive Programme die nicht in der Taskleiste sind.
Folgenden Code habe ich gerade ausprobiert,
Delphi-Quellcode:
function EnumWin(hWnd: THandle; FirstWnd: PCardinal): Boolean; stdcall;
var
WinText: AnsiString;
ProcId : cardinal;
begin
Result := True;
if IsWindowVisible(hwnd) then
begin
if (GetWindowLong(hwnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) <> 0 then
hwnd:= GetWindowLong(hWnd, GWL_HWNDPARENT);
ProcId := GetWindowThreadProcessID(hWnd, nil);
SetLength(WinText, SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0));
SendMessage(hWnd, WM_GETTEXT, Length(WinText) + 1, integer(WinText));
if (length(WinText) > 0) and (FirstWnd^ <> ProcId) then
Form1.ListBox1.Items.Add(WinText);
FirstWnd^ := ProcId;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FirstWnd : cardinal;
begin
ListBox1.Clear;
EnumWindows(@EnumWin, cardinal(@FirstWnd));
end;
bei den Fenster die ich getestet habe ging es, eventuell muss der Code jedoch noch erweitert werden. Auch die angezeigte Reihenfolge stimmte bei mir überein.