Hallöchen.
Irgendwie bin ich scheinbar zu blöd
Ich möchte eine Taskliste wie sie bei ALT-Tab angezeigt wird ermitteln und die eigene Anwendung dabei ignorieren.
Dies sollte ja eigentlich über das
Handle ganz einfach möglich sein, ABER irgendwie gibt in dem Fall der Vergleich zweier
Handle (die bei Debuggen exakt gleich sind) immer dass sie ungleich wären.
Ich verwende den hier im Forum gefundenen und minimal abgeänderten Code:
Code:
function myTasksListUpdate(ExcludeWindow: HWnd): Boolean;
function EnumWin(wHdl: HWnd; FirstWnd: PCardinal): Boolean; stdcall;
var WinText : AnsiString;
ProcId : cardinal;
f : Boolean;
begin
Result := True;
if IsWindowVisible(wHdl) then begin
if (GetWindowLong(wHdl, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) <> 0
then wHdl:= GetWindowLong(wHdl, GWL_HWNDPARENT);
if ExcludeWindow <> wHdl then begin
ProcId := GetWindowThreadProcessID(wHdl, nil);
SetLength(WinText, SendMessage(wHdl, WM_GETTEXTLENGTH, 0, 0));
SendMessage(wHdl, WM_GETTEXT, Length(WinText) + 1, integer(WinText));
if (length(WinText) > 0) and (FirstWnd^ <> ProcId)
then myTaskList.AddObject(WinText, Pointer(wHdl));
FirstWnd^ := ProcId;
end;
end;
end;
var FirstWnd : cardinal;
begin
myTaskList.Clear;
myTaskList.BeginUpdate;
try
Result := EnumWindows(@EnumWin, cardinal(@FirstWnd));
finally
myTaskList.EndUpdate;
end;
end;
myTaskList ist eine Var vom Type TStrings und die Zeile die IMMER True ergibt auch wenn die Handles gleich sind ist:
Code:
if ExcludeWindow <> wHdl then begin
Vielleicht hat ja noch irgendjemand eine Idee dazu.
Grüße aus Kassel.
Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?