Focus Problem wenn Apllikation gestartet wird
-
Hallo Forum,
ich habe bei meine Applikation ein Focus Problem dass sie selten ohne Focus dargestellt wird. Ich habe dieses Problem mir mehrmals angeschaut und fand nichts heraus, bis heute. Das was ich jetzt schreiben werde macht natürlich nicht viel Sinn aber tritt unter Umständen "hoffentlich" so etwas bei mir auf.
Folgendes:
1. eine Dlg Applikation
2. Vor dem DoModal habe ich Sleep(3000) eingefügt
3. EXE in einen Ordern kopiert und aus TotalCmd mit Doppelklick gestartet (Diese Schritt ist meiner Meinung nach Wichtig)
4. Während der 3 Sekunden Klicke ich auf das Fenster von TotalCmd (Natürlich bevor mein Dlg zum erscheinen kommt)=> Dlg erscheint im Hintergrung von TotalCmd => richtiges Verhalten
Was muss ich den Tun um Focus auf mein Dlg zu erhalten?
SetFocus in OnInitDialog hat nicht gereicht.Gruss Michael
-
Mal grundsätzlich:
Deine Anwendung ist nach dem Klick auf den Total Commmander nicht mehr die aktuelle Anwednung... Das hat der User mit dem Klick auf den Total-Commander ja so gewollt.
Warum sollte sich die Anwednung in den Vordergrund zwängen?
Warum hast Du überhaupt den Sleep drin?
Erkläre mal Dein "normales" Szenario.Du kannst SetForegoundWindow verwenden, allerdings bringt das nicht die Anwednung zwingend in den Vordergrund!
SetForegroundWindow mit AttachThreadInput wäre der "Holzhammer", aber das ist im Algemeinen nicht zu empfehlen.
-
Ich habe meinen Fehler soweit reduziert sodass ich denke dass das mein Problem ist.
Mein Problem ist viel komplizierter aber gut ich versuche es zu beschreiben:
Prozess A (meine App)
Prozess B (Start App -> Startet weitere Prozesse)
Prozess C,D (weitere Prozesse)Prozess A benötigt weitere Prozesse um laufen zu können. Als erstes Schritt müssen jedoch alle anderen Prozesse beendet werden.
Im IntInstance Prozess A wird der Prozess B aufgerufen mit Param STOP -> Prozesse C,D, usw. werden von Prozess B beendet
Nächste Schritt ist ein bestimmtes Prozeses zu starten. Also wird wieder Prozess B gerufen mit PARAM START und PROZESS E.
Wenn alles erfolgreich dann wird DOModal aufgerufen usw.
Alles wird natürlich ausgeführt mit WaitForSingleObject damit alles nacheinander gestartet/gestoppt wird.Jetzt hatte ich das Problem (wie ich bereits beschrieben habe) dass manchmal meine App (Prozess A) keinen Focus hatte. Der Focus liegt auf dem Desktop.
Da unsere Hardware keine Maus und keine Standard Tastatur hat ist es nicht ohne weiteres möglich den Focus zu hollen.Ich versuchte es zu Verstehen und Reproduzieren was da eigentlcih passiert. Wie man sich vorstellen kann ist es ziemlich schwer zu sagen wo der Fehler leigt oder leigen kann vor allem wenn man mit mehreren Prozesses die von einnander abhängig sind arbeitet. Nur durch Zufall entnamm ich dem Prozess B beim STOPEN (nicht beim STARTEN) den Focus und glaubte dass dieses so etwas ist. Dann fing ich an etwas ähnliches nachzubauen mit Focus klauen, dehalb der Sleep und druck auf TotalCmd. Natürlich kann ich nicht sagen dass das 100% der Fehler ist, aber ein Versuch ist es auf jeden Fall Wert.
Ja das mit SetForegoundWindow dachte ich auch probiert zu haben ohne Erfolg. Aber ich probiere es gern nocheinmal.
-
Danke,
wie ich vermuttet habe, löste sich das Problem nachdem ich die AtachThreadInput Funktion beutzt habe. Auch wenn ich nicht genau die Ursache für mein Problem kenne ist die Lösung an diese Stelle auch ok. Schlisslich möchte ich auch dass wenn meine Applikation gestartet wird (wie auch immer) diese den Focus erhält.
Gruss
Michael
-
Warum zeigst Du nicht einen Progressdialog an, der den Fokus bekommt und der User sieht was apssiert und das noch zu warten ist...