Entwickler-Ecke

Windows API - Anwendung in Taskleiste nicht anzeigen


Uli Schoch - Mo 25.04.11 15:16
Titel: Anwendung in Taskleiste nicht anzeigen
Hallo
Ich habe eine Anwendung geschrieben (eine DCF77-Uhr) die ich im Autostart aufrufe. Sie zeigt dann immer die korrekte Zeit an. Damit ich diese Anwendung nicht aus Versehen schliesse, sollte sie nicht in der Taskleiste angezeigt werden. Kann man das machen? Habe immer noch Delphi3.

Gruss
Uli


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 25.04.2011 um 22:54


jaenicke - Mo 25.04.11 16:48

Dafür musst du ShowWindow auf Application.Handle anwenden. Denn bei den alten Delphiversionen liegt nicht das Fenster selbst in der Taskleiste, sondern das versteckte Application-Fenster. Das merkt man auch daran, dass die Taskleistenvorschau, die es ab Vista gibt, mit Delphiversionen < 2007 nicht funktioniert.


Uli Schoch - Mo 25.04.11 19:02

Salü
Welchen Parameter muss ich ShowWindow übergeben? In der Hilfe sind die Parameter aufgezählt, ich sehe aber keinen, der die Anwendung in der Taskleiste unterbindet.

Gruss
Uli


jaenicke - Mo 25.04.11 19:08

Naja, du hast Recht, dass SW_HIDE zum Verstecken dienen könnte, sieht man dem Namen wirklich gar nicht an...

Delphi-Quelltext
1:
ShowWindows(Application.Handle, SW_HIDE);                    


Uli Schoch - Di 26.04.11 09:42

Salü
Mit SW_Hide gehts nicht. Ich habe folgende Zeile in der Methode FormCreate:

ShowWindow(Application.Handle,SW_HIDE);

Oder muss die an einem anderen Ort stehen? Diese Zeile bewirkt gar nichts, das Form und der Taskleisteneintrag sehen aus wie ohne diese Zeile.

Gruss
Uli


Narses - Di 26.04.11 09:53

Moin!

Könnte im FormCreate zu früh sein, probier´s mal im FormShow der MainForm. :idea:

cu
Narses


jaenicke - Di 26.04.11 10:00

user profile iconUli Schoch hat folgendes geschrieben Zum zitierten Posting springen:
Oder muss die an einem anderen Ort stehen?
Bingo. Das kannst du auch selbst sehr leicht herausfinden:
Mach einfach einen Haltepunkt auf die Zeile in FormCreate, dann wirst du sehen, dass an der Stelle der Taskleisteneintrag noch nicht existiert. Der wird erst bei Application.Run erstellt.

Deshalb hat user profile iconNarses absolut Recht mit OnShow. ;-)


Gerd Kayser - Di 26.04.11 10:11

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Das merkt man auch daran, dass die Taskleistenvorschau, die es ab Vista gibt, mit Delphiversionen < 2007 nicht funktioniert.
Das kann ich hier so nicht bestätigen. Programme, die mit D7 und D2006 erstellt wurden, werden hier korrekt in den kleinen Vorschaufenstern unter Windows 7 32-Bit dargestellt. Mit Vorschaufenstern meine ich hier die Anzeigen, wenn man mit der Maus über die Taskleisteneinträge drüber fährt oder wenn man Alt + Tab gedrückt hält.


jaenicke - Di 26.04.11 10:22

Dann minimiere die Fenster einmal. :zwinker:

Wenn das Fenster auf dem Bildschirm angezeigt wird, benutzt Windows einfach den aktuellen Fensterpuffer für die Vorschau. Wenn es minimiert ist, geht es aber über das Handle. Und das ist bis Delphi 2006 eben leider das des versteckten Application-Fensters, so dass du nur das Icon der Anwendung angezeigt bekommst.


Gerd Kayser - Di 26.04.11 10:27

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dann minimiere die Fenster einmal. :zwinker:
Habe ich gerade gemacht. Die Darstellung ist immer noch korrekt. Ich habe sogar ein D2-Programm in den Tiefen meiner Festplatte ausgegraben. Und selbst da funktioniert es.


jaenicke - Di 26.04.11 10:33

Stimmt, Windows 7 wurde offenbar entsprechend geändert. Unter Vista gab es das Problem, und ich habe seitdem in Delphi 2006 immer automatisch einen Fix eingebaut. Daher habe ich das unter Windows 7 nie wieder getestet, insbesondere weil es mit XE ohnehin korrekt funktioniert.


Uli Schoch - Di 26.04.11 13:32

Salü
Die Zeile "ShowWindow(Application.Handle,SW_HIDE);" in FormActivate verschoben, jetzt gehts, vielen Dank. Das Symbol der Anwendung blinkt ganz kurz auf in der Taskleiste. Ich habe leider vergessen zu sagen, dass ich noch Windows XP verwende. Alles ein bisschen alte, aber es läuft noch!

Gruss
Uli