Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie die Schnellstartleiste auslesen? (https://www.delphipraxis.net/137718-wie-die-schnellstartleiste-auslesen.html)

r29d43 27. Jul 2009 13:11


Wie die Schnellstartleiste auslesen?
 
Hallo,

ich möchte in der Schnellstartleiste die sich dort befindlichen Ikonen auslesen. Und zwar möglichst auch deren Position in dieser Leiste.

Leider scheint diese Schnellstartleiste aber irgendwie von einer anderen Natur zu sein wie der Desktop, bei dem ich das auch schonmal erfolgreich gemacht habe. (Letztlich war der Desktop eine ListView ('SysListView32'), die man gut mit diesen ListView_...-APIMakros lesen u. bearbeiten konnte). Wenn ich jetzt nämlich nach dem gleichen Muster versuche, z.B. die Anzahl der Schnellstart-Ikonen auszulesen,

Delphi-Quellcode:
hTaskBar  := FindWindow('Shell_TrayWnd',nil);
hIrgendwas := FindWindowEx(hTaskBar,0,'ReBarWindow32',nil);
hSchnellstartleiste := FindWindowEx(hIrgendwas,0,'ToolbarWindow32','Quick Launch');

ItemCount := sendMessage(hSchnellstartleiste,LVM_GETCOUNTPERPAGE,0,0);

SetForegroundWindow(hSchnellstartleiste);
dann bekomme ich dabei falscherweise immer nur die 0 (null) raus. (Das Handle der Schnellstartleiste sollte aber richtig sein, da durch das "SetForegroundWindow" die erste Ikone in der Schnellstartleiste selektiert sichtbar wird).


Ergo: Wenn diese Schnellstartleiste jetzt also keine ListView ist, was ist sie denn? In "Winspector" werden für diese Schnellstartleiste jedenfalls keine weiteren Handles mehr angezeigt.


Für jeden diesbezüglichen Tipp schonmal Thx im Voraus.

himitsu 27. Jul 2009 13:18

Re: Wie die Schnellstartleiste auslesen?
 
die Schnellstartleiste ist nur ein Verzeichnis
C:\Dokumente und Einstellungen\[user]\Anwendungsdaten\Microsoft\Internet Explorer\Quick Launch
das "C:\Dokumente und Einstellungen\[user]\Anwendungsdaten" gibt als Konstante
und ob der Rest veränderlich ist ... k.A., aber wenn, dann steht der Pfad irgendwo, denn Windows muß ihn ja auch finden :roll:

über das Verzeichnis hast'e noch den Vorteil, daß dieses auch exisitert, wenn die Leiste mal nicht eingeblendet ist (wie z.B. bei mir)

r29d43 27. Jul 2009 14:11

Re: Wie die Schnellstartleiste auslesen?
 
Ja, thx, ich weiß, dass die Schnellstartleiste auch als Verzeichnis existiert, aber das hilft mir bei meinem Vorhaben leider nicht. Ich habe nämlich vor, dass mein Programm beim beenden schnell noch die zu ihm dazugehörende Ikone in der Schnellstartleiste fokusiert.

Nötig dazu wäre nur, die Schnellstartleiste per SetForegroundWindow in den Vordergrund zu holen und dann zur Not mittels der Arrow-Keycodes die Fokusierung auf die besagte Ikone weiterzuschieben. Nur, wie hierzu zuerst noch deren Positionen rauskriegen???

Uwe Raabe 27. Jul 2009 14:55

Re: Wie die Schnellstartleiste auslesen?
 
Die Schnellstartleiste ist ein Toolbar, somit sollte TB_BUTTONCOUNT zum Ziel führen. Den Button markieren kannst du über TB_MARKBUTTON.

HeikoAdams 27. Jul 2009 15:25

Re: Wie die Schnellstartleiste auslesen?
 
Zitat:

Zitat von r29d43
Ja, thx, ich weiß, dass die Schnellstartleiste auch als Verzeichnis existiert, aber das hilft mir bei meinem Vorhaben leider nicht. Ich habe nämlich vor, dass mein Programm beim beenden schnell noch die zu ihm dazugehörende Ikone in der Schnellstartleiste fokusiert.

Ich frage mich grade, wo der Sinn hinter so einer Aktion ist?

Back2Topic: Hast Du auch daran gedacht, das Dein Programm auch von Windows - z.B. beim Herunterfahren - beendet werden kann? In der Situation wäre Deine Aktion eh total sinnfrei und verursacht im schlimmsten Fall unnötige Fehlermeldungen.

r29d43 27. Jul 2009 17:13

Re: Wie die Schnellstartleiste auslesen?
 
@Uwe Raabe, ah danke, diese ganzen TB_-Messages waren mir bisher ja noch gar nicht so richtig "über den Weg gelaufen".


@HeikoAdams: Ist nur ein bisschen Schnickschnack, besonders für Labtops die ja meist keine echte Maus haben und wo man gelegentlich auch per Keyboard & Entertaste focusiert bzw. ein Programm startet. Nach der Prog-Beendung kann ich u.U. so gleich ein Folge-Prog (über die Ikone daneben) starten.

Dass eine Sache, die hier oder da einen Sinn hat, dann unter einer ganz speziellen Situation keinen Sinn mehr haben muss ...ist doch nun wirklich kein Satz wert. Das kann selbstverständlichst schonmal so sein! Na und?

Eine Fehlermeldung wird's hier nie geben, da so ein Systemprogramm wie die Taskbar ja wohl in jedem Falle immer einen niedrigeren ShutDown-Parameterwert, also einen späteren ShutDown-Zeitpunkt (MSDN-Library durchsuchenSetProcessShutdownParameters), haben wird als eine normale GUI-Anwendung.

HeikoAdams 28. Jul 2009 07:19

Re: Wie die Schnellstartleiste auslesen?
 
Zitat:

Zitat von r29d43
Eine Fehlermeldung wird's hier nie geben, da so ein Systemprogramm wie die Taskbar ja wohl in jedem Falle immer einen niedrigeren ShutDown-Parameterwert, also einen späteren ShutDown-Zeitpunkt (MSDN-Library durchsuchenSetProcessShutdownParameters), haben wird als eine normale GUI-Anwendung.

Hast Du das getestet, vermutest Du das nur oder verpasst Du der Taskbar manuell einen niedrigeren ShutDown-Parameterwert? Und btw: never say never 8)

r29d43 28. Jul 2009 10:57

Re: Wie die Schnellstartleiste auslesen?
 
Zitat:

Zitat von HeikoAdams
Hast Du das getestet, vermutest Du das nur oder verpasst Du der Taskbar manuell einen niedrigeren ShutDown-Parameterwert? Und btw: never say never 8)

Diese Sache läuft schon, und zwar ohne irgendsolche Fehlermeldungen.

Aber auch von der reinen Überlegung her ist da eine Fehlermeldung kaum zu erwarten. DENN: Wenn ab WinXP ein normales ShutDown gestartet wird (z.B. per ExitWindowsEx-Funktion ohne den EWX_FORCE-Parameter), dann bekommt ja eine jede zu diesem Zeitpunkt laufende Anwendung vor ihrem Ende zuerst noch eine WM_QUERYENDSESSION-Message zugeschickt. Eine, mittels der eine jede solche Anwendung den ShutDown-Vorgang dann also auch noch höchstpersönlich selbst abbrechen könnte. Theoretisch kann also dann eine letzte noch laufende Anwendung den ShutDown-Vorgang so noch abbrechen und wonach auch dann das System noch völlig normal weiterlaufen und weiterfunktionieren muss. Ergo: Sowas wie die Taskbar muss in jedem Fall einen späteren ShutDown-Zeitpunkt haben als irgendwelche normalen Anwendungsprogramme und bis zu deren Ende auch noch normal funktionieren.

Außerdem wäre es wohl auch kaum ratsam, irgendwelche Parameter von so einem Systemprogramm wie der Taskbar zu ändern (ohne z.B. jetzt absoluter Taskbar-Experte zu sein). Eher würde sich in solchen Fällen schon anbieten, den ShutDown-Parameter des eigenen Programms irgendwie speziell einzustellen, z.B. so, dass es als erstes aller Anwendungsprogramme diese WM_QUERYENDSESSION-Message bekommt (oder auch als letztes, ..wenn dann nämlich fest steht, dass keine Anwendung den ShutDown-Vorgang davor gekillt hat).


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 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