Ein dx Fenster schliessen? GetActiveWindow/DestroyWindow???



  • Ich versuche mal mein problem relativ einfach zu beschreiben.

    Ich versuche in Freebasic eine dll zu laden, eine 3d engine.
    Funktioniert alles wunderbar.
    Bis auf die tatsache, dass ich das Fenster irgendwie bei Beendigung nicht schliessen kann.

    Zugriff auf die Winapi habe ich aber in vollem Umfang.

    Also ich kann die Befehle GetActiveWindow/DestroyWindow etc. in vollem Umfang nutzen.

    Ich probiere nun schon eine Weile rum, aber irgendwie bekomme ich es nicht hin, wohl das richtige handle zu finden, oder überhaupt falls doch gefunden, dann das fenster zu schliessen.

    Wie würde man in C++ aus einem laufenden Programm heraus, das richtige fensterhandle finden und schliessen können(bei esc, bzw. schliessen x drücken, hab ich schon drin)?

    Also wenn ich eine dll mittels c++ laden würde, diese ein dx9 fenster öffnet, sich aber nicht auf wunsch schliessen läßt.

    Mittels dem Fenster namen(beschreibung) geht es nicht, da sich dieser ändern kann


  • Mod

    Wenn Du das Fenster erzeugst dann hast Du doch ein Handlebekommen.
    Verwende dieses um das Fenser zu zerstören!



  • ich habe kein fenster selbst erzeugt.
    dieses wird von der dx9 dll erzeugt mit nem xGraphics3D befehl.

    habe jetzt aber mittels nem spy tool den handle, processid und threadid herausgefunden.

    ich weiß nur nicht was von diesen informationen immer gleich bleibt, weil wenn ich jetzt mehrere spiele programmiere, weiß ich nicht ob sich processid oder threadid und classname ändert.

    habe dann dieses mit dem spy tool erstellen lassen:

    wnd =  FindWindow("DXWindow", NULL);
    

    DXWindow ist wohl der classname, ich hoffe dieser ändert sich hoffentlich nicht, ist ja sicher in der dll engine festgelegt.kenne mich mit c++ nicht wirklich aus, daher meine frage.

    wie kann ich bei bedarf dieses gefundene fenster nicht restlos schliessen?

    wäre nett, wenn mir da jemand helfen könnte.


  • Mod

    Wenn das Fenster von DirectX erzeugt wird, dann beende DriectX korrekt, dann wird auch das Fenster geschlossen!



  • ja ich weiß aber nicht wie?

    es existiert eine xFlip() routine, und in dieser steht erstens der normale alias für die .dll und desweiteren soll wenn die escape taste gedrückt wird, das ganze gekillt werden.

    also Function xFlip:
    wrap_xFlip......
    If Key(escape) then kill das verdammte dx fenster handle
    End Function

    so in der art.
    habe wie gesagt mit dem spy tool den classname gefunden, aber geht trotzdem nicht.
    habe anschliessend per findwindow das handle bestimmt, und in der xflip() dann mittels destroywindow, closewindow und EndTask alles versucht, kein ergebnis, fenster bleibt offen.


Anmelden zum Antworten