Verhindern das ctl+alt+del Direct Draw Programme stört



  • Also ich hab schon einiges bei Google und hier im Forum zu dem Thema gesucht. Mein Problem ist, wenn Windows diese Kombi kriegt wechselt es in irgendeinen Safe Mode wo es kein Direct Draw gibt. Das heißt einmal Ctrl+Alt+Del und Esc gedrückt und deine DirectX App hängt.

    Jetzt hab ich von Code Project folgendes Projekt genommen:
    http://www.codeproject.com/useritems/GINA_SPY.asp

    Spy Funktion rausgeworfen, DLL neu erstellt, ausgewechselt und funktioniert auch soweit das kein Windows-Sicherheit Dialog mehr erscheint. Trotzdem werden Direct Draw Apps gekillt. Gibt es noch irgendeine Möglichkeit, das zu verhindern bzw. einen Hook oder sonst irgendwelche Ideen?



  • Dieser Thread wurde von Moderator/in flenders aus dem Forum WinAPI in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Afaik ist das nicht nur ein Problem mit Strg+Alt+Entf, sondern auch Alt+Tab, oder?! Wenn ich mich aber Recht entsinne muss man nur die entsprechenden Nachrichten abfangen und bestimmte Sachen freigeben. Ich denke hier kann dir sicher besser jemand weiterhelfen 😉

    War das nicht das mit SetCooperativeLevel?!



  • Alt + Tab ist auch so ein Ding, aber das stört nicht. "Einfach" den Tastendruck abfangen geht nicht. Es gibt ein Key Up für Ctrl+Alt+Del aber das Key Down schnappt sich Windows. Inzwischen bin ich auf folgendes gestoßen:
    http://www.codeproject.com/system/KeyHook.asp

    Wenn ich statt SetWindowsHookEx (WH_KEYBOARD) WH_KEYBOARD_LL verwende läuft das Demo-Projekt allerdings nicht mehr und es kommt bei jedem Tastendruck E raus.


  • Mod

    geht es also darum, dass applikationen nach dem taskwechsel nicht mehr weiterlafen?

    das liegt daran dass treiber die resourcen von fullscreen-applikatioen freigeben/resetten sobald ein taskwechsel stattfindet. damit das läuft, muss der programmierer der applikation nachdem seine app wieder fullscreen läuft, alle resourcen die nicht "managed" sind, reinitialisieren.

    wenn du das unbedingt möchtest, kannst du die ganze dx9 dll kapseln und es selbst machen.

    manche applikationen, wie MMORPG haben diesen anti-taskwechel kram drinne damit nicht so einfach gecheatet werden kann.

    rapso->greets();



  • Mir geht es gar nicht so sehr darum, dass das Programm nachher weiterläuft, sondern mehr darum das es nicht unkontrolliert abstürzt. Deswegen such ich einen Hook auf dieses Keyboard-Event, damit ich "vorher" noch ein paar Sachen von Hand freigeben kann.



  • Hi!
    Kann man das nicht über die Koopationsebene mit SetCooperativeLevel und DDSCL_ALLOWREBOOT festlegen?
    mfg olli



  • asdrubael schrieb:

    Mir geht es gar nicht so sehr darum, dass das Programm nachher weiterläuft, sondern mehr darum das es nicht unkontrolliert abstürzt. Deswegen such ich einen Hook auf dieses Keyboard-Event, damit ich "vorher" noch ein paar Sachen von Hand freigeben kann.

    Das ist doch Blödsinn.

    Wie rapso sagte, einfach Deine App schlafen legen, bis Du wieder am Zuge bist, dann alles wieder reset()en bzw. reinladen.



  • Ja alles Blödsinn außer Mutti 🙄
    Ich poste dann später mal was sich so ergeben hat.



  • 😕

    Nein, im Ernst, was soll denn dieser doofe Hack?!?

    <a href= schrieb:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndxgen/html/directx8faq.asp">How do I disable ALT+TAB and other task switching?

    You don't. Really.



  • Es ist nicht meine DirectX-App und ich bin nicht in der Position den Programmierern zu sagen "macht mal einfach". Ich könnte nur drumrum bauen, aber da es zu aufwendig erscheint, warte ich jetzt ob sich noch andere Lösungen finden. Es hat schon seinen Grund gehabt warum ich im Winapi Forum und nicht hier gepostet habe.


  • Mod

    asdrubael schrieb:

    Es hat schon seinen Grund gehabt warum ich im Winapi Forum und nicht hier gepostet habe.

    gut dass man dich dann drauf hingewiesen hat, dass es ein directX resourcemanagement "feature" ist, dass du mit WinApi nicht umgehen kannst, weil es in Treibern implementiert ist und eine applikation selbst zu diesem "feature" conform laufen muss.

    rapso->greets();



  • Achso...

    Ein paar Sätze mehr Erklärung und es wäre direkt klar geworden.

    Darf man mal fragen, wofür KONKRET Du das brauchst?!? 😕



  • Ich benutze eine Lib, die benutzt Direct Draw um ein Display zu implementieren Wenn ich mit der Lib ein Programm schreibe wo ein Display dabei ist und dann Ctrl+Alt+Del drücke, passieren hässliche Dinge, besonders wenn gerade etwas auf´s Display kopiert wird. Manchmal bleibt das Display danach grau, manchmal fängt er sich wieder, manchmal stürzt die ganze Anwendung ab.

    Hätte ich einen Hook könnte ich das einfach manuell lösen ohne riesen Aufwand. Button Down Display zu, Button Up neues Display auf. Gibbet aber nicht also muss ich abwarten was die Lib-Programmierer dazu sagen.



  • Und Du kommst gar nicht an den Source ran?
    Auch nicht an Interfaces, daß man vielleicht was ableiten könnte?
    Eine andere Lib zu benutzen ist auch nicht drin?



  • Nein alles nicht, davon abgesehen hab ich von DirectX keine Ahnung und würde mit der Source eh nichts anfangen können.


  • Mod

    wenn es einen taskswitch gab, dann liefer "present" einen fehler, wenn du da dran kommst, könntest du vielleicht alle resourcen schliessen und neu anlegen, dann dürfte es gehen.

    rapso->greets();



  • rapso schrieb:

    wenn es einen taskswitch gab, dann liefer "present" einen fehler, wenn du da dran kommst, könntest du vielleicht alle resourcen schliessen und neu anlegen, dann dürfte es gehen.

    Genau. Er schnappt sich eben 'nen Disassembler, und haxx0rt da was rein! 👍


  • Mod

    Sgt. Nukem schrieb:

    rapso schrieb:

    ...wenn du da dran kommst...

    Genau. Er schnappt sich eben 'nen Disassembler, und haxx0rt da was rein! 👍

    oder er bekommt von der lib einen device pointer und ruft present auf, deswegen das wörtchen "wenn"

    rapso->greets();


Anmelden zum Antworten