Ich versuche krampfhaft ein Popup Fenster da auftauchen zu lassen, wo ich das gerne hätte, also entweder im Vordergrund, oder im Hintergrund, aber egal was ich mache, irgendwie funktioniert das nie so wie ich es gerne hätte.
Mal der Reihe nach:
1) Ich starte aus einer anderen Anwendung heraus das Popup
Popup.exe erzeugt ein simples Fenster
So weit kein Problem, aber wenn ich jetzt versuche zu bestimmen, ob das Popup im Vordergrund auftauchen soll, oder nicht, dann bekomme ich fast immer das falsche Ergebnis und ich kann nicht mal sagen, WAS im System das unterschiedliche Verhalten beeinflusst.
Theoretisch dürfte SetForegroundWindow() seit WinXP überhaupt nicht mehr funktionieren, zumindest dann nicht, wenn die aufrufende Anwendung nicht selbst im Vordergrund ist.
Das kann man mit ein paar schmutzigen Tricks ala AttachThreadInput() noch umgehen, auch wenn das nicht die feine Art ist.
Mein Problem ist eher wenn ich ohne schmutzige Tricks das Fenster im Vordergrund will, solange die aufrufende Anwendug selber im Vordergrund ist und im Hintergrund, wenn die aufrufende Anwendung im Hintergrund ist, dann kann ich nicht im voraus sagen, ob es im Vordergrund auftaucht oder nicht, das liegt scheinbar am Betriebssystem, macht Unterschiede ob XP oder Vista, oder eins der beiden in einem VirtualPC.
Es scheint sogar Unterschiede zu machen, welche anderen Programme gerade auf dem PC laufen, MSN Messenger oder so, oft führt sogar ein Neustart des PC dazu, dass das Popup sich ohne ersichtlichen Grund plötzlich anders verhält.
Im Moment habe ich ALLE SetForegroundWindow() Befehle im Popup auskommentiert, trotzdem erscheint es (unter Vista Ultimate) IMMER im Vordergrund, selbst dann, wenn die aufrufende Anwendung minimiert ist und ich im Vordergrund irgendwas in Winword arbeite.
Das nervt, und soll so auch nicht sein, aber es gibt ausser der Tatsache, dass es ein WS_POPUP ist NICHTS im Programm, was das Fenster in den Vordergrund holen könnte, trotzdem drängelt es sich immer vor.
Kann mir jemand (für Doofe) erklären, woran das liegt, und wie ich dies zuverlässig regele?
Mal der Reihe nach:
1) Ich starte aus einer anderen Anwendung heraus das Popup
Code:
ShellExecute(0,"open","Popup.exe",0,0,SW_SHOW);
Popup.exe erzeugt ein simples Fenster
Code:
hwnd = CreateWindow(
mainclassname,
mainwindowname,
WS_POPUP,
0,0, 300, 200,
HWND_DESKTOP,
0,hinstance,0
);
So weit kein Problem, aber wenn ich jetzt versuche zu bestimmen, ob das Popup im Vordergrund auftauchen soll, oder nicht, dann bekomme ich fast immer das falsche Ergebnis und ich kann nicht mal sagen, WAS im System das unterschiedliche Verhalten beeinflusst.
Theoretisch dürfte SetForegroundWindow() seit WinXP überhaupt nicht mehr funktionieren, zumindest dann nicht, wenn die aufrufende Anwendung nicht selbst im Vordergrund ist.
Das kann man mit ein paar schmutzigen Tricks ala AttachThreadInput() noch umgehen, auch wenn das nicht die feine Art ist.
Mein Problem ist eher wenn ich ohne schmutzige Tricks das Fenster im Vordergrund will, solange die aufrufende Anwendug selber im Vordergrund ist und im Hintergrund, wenn die aufrufende Anwendung im Hintergrund ist, dann kann ich nicht im voraus sagen, ob es im Vordergrund auftaucht oder nicht, das liegt scheinbar am Betriebssystem, macht Unterschiede ob XP oder Vista, oder eins der beiden in einem VirtualPC.
Es scheint sogar Unterschiede zu machen, welche anderen Programme gerade auf dem PC laufen, MSN Messenger oder so, oft führt sogar ein Neustart des PC dazu, dass das Popup sich ohne ersichtlichen Grund plötzlich anders verhält.
Im Moment habe ich ALLE SetForegroundWindow() Befehle im Popup auskommentiert, trotzdem erscheint es (unter Vista Ultimate) IMMER im Vordergrund, selbst dann, wenn die aufrufende Anwendung minimiert ist und ich im Vordergrund irgendwas in Winword arbeite.
Das nervt, und soll so auch nicht sein, aber es gibt ausser der Tatsache, dass es ein WS_POPUP ist NICHTS im Programm, was das Fenster in den Vordergrund holen könnte, trotzdem drängelt es sich immer vor.
Kann mir jemand (für Doofe) erklären, woran das liegt, und wie ich dies zuverlässig regele?