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 Alt + Tab (https://www.delphipraxis.net/19564-alt-tab.html)

Evian 5. Apr 2004 14:19


Alt + Tab
 
Hat jemand eine Ahnung, was genau im System passiert, wenn man Alt + Tab drückt. Ich meine, was an sich passiert ist mir klar, aber wie funktioniert das Systemintern. Und könnte man diese Funktion auch aus einem eigenem Programm ansteuern?!

gruss


Evian

SirThornberry 5. Apr 2004 14:40

Re: Alt + Tab
 
mir würde eigentlich dazu nur einfallen das man alt + tab simuliert, aber welche procedure intern beim explorer aufgerufen wird weiß ich auch ni

Evian 5. Apr 2004 14:45

Re: Alt + Tab
 
Mh.. Alt + Tab simulieren... könnt ich machen, aber ich möcht es auch gern Rückwerts machen können. Also dass ich zwei Buttons habe und einmal in die eine Richtung durch die Laufende Programme sappen kann und ein mal in die Andere.

alcaeus 5. Apr 2004 14:48

Re: Alt + Tab
 
Also, inwiefern das realisierbar ist weiß ich nicht, denn wenn du auf den Vorwärtsbutton klickst, würde es theoretisch ja funktionieren, aber bei rückwärts müsste es eigentlich wieder zum Fenster wechseln, das vorher aktiv war, denn deine Anwendung "stiehlt" ja durch den Klick einem anderen Formular den Focus. Vielleicht habe ich aber auch nur die Reihenfolge der Alt-Tab-Sprünge falsch verstanden...

Christian Seehase 5. Apr 2004 17:16

Re: Alt + Tab
 
Moin Evian,

dazu eine Idee.
Du könntest Dir mit Hilfe von Hier im Forum suchenEnumWindows alle Toplevel Windows heraussuchen, müsstest dabei allerdings überprüfen, ob diese auch sichtbar sind, diese in einer Tabelle merken, und dann, das jeweils ausgewählte in den Fordergrund bringen.

Evian 5. Apr 2004 17:21

Re: Alt + Tab
 
Jup, so in etwa habe ich es dann in etwa gemacht:

Code:

function EnumWindowsProc (Wnd: HWND; LParam: LPARAM): BOOL; stdcall;
var Bezeichnung : Array[0..200] of Char;
begin
  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 begin
      GetWindowText(Wnd, Bezeichnung, 256);
      Form1.Listbox1.Items.Append(Bezeichnung);
  end;
end;

procedure Refresh;
begin
  Listbox1.Clear;
  EnumWindows(@EnumWindowsProc, 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
VAR
hWnd: DWORD;
begin
  Refresh;
  IF index < Listbox1.Count - 1 THEN
  inc(index) ELSE
  index := 0;
  hWnd := FindWindow(nil, PChar(Listbox1.Items[index]));
  if hWnd <> 0 then
  SetForeGroundWindow(hWnd);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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-2025 by Thomas Breitkreuz