C++ Programm im Hintergrund laufen lassen

ActiveO2

Ensign
Registriert
Feb. 2009
Beiträge
161
Hallo,

ich würde gerne ein Programm im "Hintergrund" laufen lassen.

Als Bsp.:
Ich habe eine neue Konsolenanwendung programmiert mit der ich die Systemzeit abrufen kann. (liese sich auch mit der OOP einrichten mit Zeiger usw. sodass ich praktisch eine grafische Uhr habe)
Diese möchte ich jetzt auf meinem Desktop laufen lassen, ohne dass sie mir in der Taskbar angezeigt wird (nur unter Prozesse, dass ich sie evntl. deaktivieren kann)

(Sozusagen: die Vista-Uhr für Arme) ;)
Das es dafür Tools gibt weiß ich^^ würde das aber ganz gerne mal selbst programmieren.

Habt ihr eine Idee wie der Code aussehen sollte.
Vielleicht habt ihr ja ein kleines Bsp. Programm.


Mit freundlichen Grüßen,

ActiveO2
 
Auf jeden Fall solltest du die Zeit nicht permanent abfragen sondern nur einmal die Sekunde oder auch Minute.

MfG
 
Danke für die Idee.
Minute dürfte reichen.


Einen Code-ansatz hast du nicht zufällig =)
(also um das Programm auf dem Desktop laufen zu lassen)
 
ich habe jetzt leider keinen exakten code aber eine vermutung wie es gehen könnte das programm "auf dem desktop" laufen zu lassen:

wenn du dem fenster das du erstellst in der CreateWindow funktion als parent window den desktop
angibst solltest du es irgend wie schaffen das symbol in der taskleiste auszublenden
( zB ein About window hat auch kein eigenes symbol in der taskleiste da es auf einem parent window läuft )

Ist nur eine vermutung von mir also wenn es jemand besser weiß bitte ich um korrektur.

EDIT:

So habe mich jetzt noch ein bisschen schlau gemacht.
Also im prinzip würde es auf 2 arten funktionieren das programm nicht in der Taskbar anzeigen zu lassen.

1. Man kann der CreateWindowEx funktion als esten parameter WS_EX_TOOLWINDOW übergeben.
Das hat zur folge, dass das Fenster zwar einen dünnen rahmen mit kleiner schrift hat dafür aber nicht in der taskleiste angezeigt wird.

2. Man erstellt 2 fenster wobei das erste versteckt wird und das zweite als child window des ersten aufgerufen wird.
Dadurch hat das zweite kein symbol in der taskbar ( da child window ) und das erste auch nicht ( da versteckt )

Ich hoffe ich konnte dir weiter helfen, falls du ein codebeispiel brauchst lasse ich dir gerne eines zukommen

Gruß
BlackMark
 
Zuletzt bearbeitet:
hi,

AFAIK geht die zweite Methode leider nicht, da child's (WS_CHILD) nur sichtbar sind, wenn das parent-window auch sichtbar ist.
---
Wenn dir die Sache mit dem WS_EX_TOOLWINDOW nicht gefällt (die Wunderbar funktioniert):

Unter folgendem link (vorletzter Beitrag) findet man ein kleines Beilspiel wie man alle Symbole aus der Taskleiste entfernt. Denke das man dies leicht modifizieren kann, so das nur dein Programm entfernt wird: https://www.computerbase.de/forum/threads/alle-fenster-verstecken.509373/

grüße, Woey

EDIT:
Diese möchte ich jetzt auf meinem Desktop laufen lassen...
möchtest du auf dem Dektop zeichenen? Also kein Fenster, sondern nur deine Uhr, die direkt auf das Dektop gezeichnet wird?
 
Zuletzt bearbeitet:
Hallo,

ja, direkt auf dem dektop wäre gut...

prinzipiell so, dass sich Verknüpfungen drüber legen lassen (Verknüpfungen die nichts mit dem Programm später zu tun haben....sozusagen, ein Hintergrundbild) Es soll nicht in den Vordergrund treten, falls ich ausversehen Draufdrücke. Immer schön im Hintergrund (aber sichtbar) und nur durch zB (Task-Manager->) Prozesse beenden lassen.

Später wäre vielleicht ein kleiner Button lustig um die "Uhr" auszublenden und einen Terminkalender, oderoder einzublenden.
Aber dazu erst später.


Grüße ;)
 
wenns so ist, ist es am besten zwei Fenster mit WS_EX_TOOLWINDOW zu erstellen (parent/child). Das Child-Window kannst du dann mit SetParent(hWndChild,NULL) dem Desktop zuordnen - genauer gesagt das Clientarea wird dem Desktop zugeordnet, der Frame verschwindet. Das Clientarea kann man dann (denk ich mal) mit MoveWindow/SetWindowPos auf dem Desktop verschieben. Das Zeichen erfolgt ganz normal unter Verarbeitung von WM_PAINT,... Wenn ich mich nicht irre, kann man das Parent-Window in diesem fall mit ShowWindow(hWnd,SW_HIDE) verstecken, ohne das das Child vom Desktop verschwindet.
 
Ich hab noch mal drüber nachgedacht, es wäre doch eigentlich nicht der Sinn des Programmes ein
child window am Desktop laufen zu lassen sondern ne Uhr zu erstellen.

Man sollte sich vorher darüber gedanken machen wie die Uhr aussehen soll ( Digital oder Analog ) und wie
man es am besten anstellt die Uhr darzustellen. Ich hätte den Code für ein Programm das ein vorgegebenes Bild als
Fenster verwendet. Somit könnte man das Ziffernblatt einer Analogen Uhr darstellen ohne
sich gedanken darüber machen zu müssen wie man jetzt die Uhr auf den Desktop bringt. Die Zeiger müsste man
dann später noch Zeichnen, natürlich je nach dem wie spät es ist.

Gruß
BlackMark
 
Zuletzt bearbeitet:
Danke für die Antworten, wenn ich noch eine Lösung habe melde ich mich wieder.

MfG
 
Zurück
Oben