Autor Beitrag
Escudo
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 30.11.04 14:21 
Hallo ihr.

Auf der Arbeit habe ich zur Zeit die Aufgabe, in Delphi eine Art primitive Explorer.exe mit eingeschränkten Möglichkeiten zu schreiben, von der aus die Benutzer Programme öffnen und verwalten können.

Was mir im Moment Probleme bereitet ist eine Art Taskleiste, wie man sie von Windows kennt. Diese Taskleiste müsste folgendes können:

1) offene Anwendungen auflisten (z.B. in einer ListBox)
Hierzu auch interessant: muss man eine solche Liste ständig neu generieren oder gibt es eine Möglichkeit, beim Schließen oder Öffnen einer Windows-Anwendung einen Event abzufangen?
2) Bei Doppelklick: Eine Anwendung maximieren (falls minimiert) und focussieren
3) Anwendungen schließen.

optional auch
4) Focussierte Anwendung ermitteln


Für ein desktopähnliches Formular bräuchte ich weiterhin
5) Ein Formular ständig im Hintergrund halten. (Bisher löse ich das mit Timer und dem Aufruf von SendToBack - das ist aber keine wirklich dauerhafte Lösung)


Kann mir da jemand helfen und mir sagen, wie man das umsetzen kann oder mir entsprechende Quellen zur Verfügung stellen?
Ich hab von dem Thema leider gar keine Ahnung und hab auch noch keine Unit gefunden, die derartige Dinge zur Verfügung stellt.

Danke im Vorraus.
Lieben Gruß.
Der Hendrik
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 30.11.04 14:29 
:welcome: Darf ich Ihnen noch einen Chateau und eine zweite Portion Trüffel bringen?

AXMD
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 30.11.04 14:50 
Escudo hat folgendes geschrieben:

1) offene Anwendungen auflisten (z.B. in einer ListBox)
Hierzu auch interessant: muss man eine solche Liste ständig neu generieren oder gibt es eine Möglichkeit, beim Schließen oder Öffnen einer Windows-Anwendung einen Event abzufangen?

Per API Hook CreateWindow(Ex) abfangen.
Zitat:

2) Bei Doppelklick: Eine Anwendung maximieren (falls minimiert) und focussieren

Du redets wohl von einem Fenster. Suche im MSDN SETWINDOWPOS.
Zitat:

3) Anwendungen schließen.

Suche im MSDN WM_CLOSE an das Hauptfenster schicken.

Zitat:

Für ein desktopähnliches Formular bräuchte ich weiterhin
5) Ein Formular ständig im Hintergrund halten. (Bisher löse ich das mit Timer und dem Aufruf von SendToBack - das ist aber keine wirklich dauerhafte Lösung)

Ich dachte das soll ein Explorer ersatz werden und keine eigene Shell. :roll:

Zitat:

Kann mir da jemand helfen und mir sagen, wie man das umsetzen kann oder mir entsprechende Quellen zur Verfügung stellen?

Nun ja. Schreiben musst du es schon selber.

Zitat:

Ich hab von dem Thema leider gar keine Ahnung

Dann wird es sehr schwer.

Zitat:

und hab auch noch keine Unit gefunden, die derartige Dinge zur Verfügung stellt.

Wenn es für alles eine Unit gäbe, ... :roll:
Escudo Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 02.12.04 14:46 
Besten Dank!
Durch die hier und in anderen Foren gegebenen Antworten hab ich inzwischen Punkt 1-4 abgedeckt.

@Luckie: Das mit dem Hook war z.B. ein sehr nützliches Stichwort. Ich hatte noch nie vorher etwas von Hooks gehört und hab mich auf deinen Hinweis in die Materie einlesen können.


Luckie hat folgendes geschrieben:

Zitat:

Für ein desktopähnliches Formular bräuchte ich weiterhin
5) Ein Formular ständig im Hintergrund halten. (Bisher löse ich das mit Timer und dem Aufruf von SendToBack - das ist aber keine wirklich dauerhafte Lösung)

Ich dachte das soll ein Explorer ersatz werden und keine eigene Shell. :roll:


Vielleicht hab ich was das angeht etwas unprezise formuliert:
Mein Programm ist diejenige Anwendung, die beim Starten der Sitzung ausgeführt wird. Sie enthält a) die Taskleiste und b) eine Instanz von TListView, die Programme enthält, welche der Benutzer ausführen kann.

Dieses Formular (b) sollte gleich dem WindowsDesktop ständig im Hintergrund sein. Weiss jemand, wie das geht?

Danke für die bisherige Hilfe.
Der Hendrik
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.12.04 14:50 
In dem du es als Shell einträgst. Wie das geht, wurde hier im Forum schon besprochen.

Allerdings könnte ich dir trotzdem noch jedes beliebige Programm starten. ;)
Escudo Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 02.12.04 15:41 
Das Problem ist:
Ich kann mein Programm nicht als Shell eintragen, weil das Programm auf einem WindownNT TerminalServer ausgeführt wird. Wenn ich es als Shell eintrage (wie in anderen THreads beschrieben) ist es die Shell vom Server und nicht die der Clients. Das ganze ist auch bereits so eingerichtet, dass das Programm beim Starten der TerminalSitzung geöffnet wird - nur eben nicht so, dass es im Hintergrund bleibt.
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 02.12.04 15:55 
Wenn du sowieso schon ein Hook hast, kannst du doch auch gleich alle Nachrichten abfangen, die die z-Position ändern. Nur dann wäre ein Aufruf von SetWindowPos notwendig. Evtl. kannst du auch eben dieser Funktion sowas wie BOTTOM_MOST übergeben, probieren geht über studieren :D

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.