AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie die Schnellstartleiste auslesen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie die Schnellstartleiste auslesen?

Ein Thema von r29d43 · begonnen am 27. Jul 2009 · letzter Beitrag vom 28. Jul 2009
Antwort Antwort
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#1

Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 14:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 14:18
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

über das Verzeichnis hast'e noch den Vorteil, daß dieses auch exisitert, wenn die Leiste mal nicht eingeblendet ist (wie z.B. bei mir)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 15:11
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???
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 15:55
Die Schnellstartleiste ist ein Toolbar, somit sollte TB_BUTTONCOUNT zum Ziel führen. Den Button markieren kannst du über TB_MARKBUTTON.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 16:25
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.
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Wie die Schnellstartleiste auslesen?

  Alt 27. Jul 2009, 18:13
@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.
  Mit Zitat antworten Zitat
Benutzerbild von HeikoAdams
HeikoAdams

Registriert seit: 12. Jul 2004
Ort: Oberfranken
661 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Wie die Schnellstartleiste auslesen?

  Alt 28. Jul 2009, 08:19
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)
Jeder kann ein Held werden und Leben retten!
Einfach beim NKR oder der DKMS als Stammzellenspender registrieren! Also: worauf wartest Du noch?
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Wie die Schnellstartleiste auslesen?

  Alt 28. Jul 2009, 11:57
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).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz