Gegenteil von execute shell?

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Gegenteil von execute shell?

    Hallo ihr,
    ich wollte mal fragen, ob es eine Funktion gibt, die einen laufenden Prozess beenden kann, oder herausfinden kann, ob ein Prozess gerade noch läuft? Eben das Gegenteil zu execute_shell, oder so?
    Gruß, Benny
  • Hi,
    Also bei mir kommt da ein error: "Cannot execute taskkill".
    Vielleicht noch eine andere Idee?
    EDIT: Und gibt es eine Funktion wie On_exit? Also ein event, dass ausgelöst wird, wenn das Programm beendet wird?

    Gruß, Benny

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von BenBaron ()

  • Irgendwie hab ich diese kill.exe nicht auf meinem System...ich mach es jetzt auch anders...kann man in c++ rausfinden, ob die .exe vom spiel läuft? Eigentlich sollte das gehen, aber ich weiß nicht, ob GameMaker hier noch irgendwas verschleiert.
    Gruß, Benny
  • Mach einfach mal cmd auf un gib "taskkill /IM notepad.exe" oder sowas ein... Jeder Win OS hat das, da wette ich..
    "das war meine letzte flamewar PM an dich ."
  • Also ich hatte diese Datei wirklich nicht :whistling: . Hab mir jetzt eine niederländische taskkill.exe runtergeladen und jetzt läufts. Ich habe WinXP Home Edition...ich hatte glaub ich mal irgdendwo gelesen, dass das bei XP nur bei Professional mit dabei ist.

    Nun gut, da ist das zumindest geklärt. Mir gehts darum, dass ich, wie in einem anderen Thread beschrieben hab, mit dem Flugsimulator über eine dll kommunizieren will. Da das Umschreiben der Funktionen für GameMaker aber meine Kentnisse definitv überschreitet, habe ich in C++ eine kleine App geschrieben, die die Kommunikation mit dem Flusi ausführt und so meinem GameMaker Programm alles zur Verfügung stellt was es braucht. Diese App wird zusammen mit meinem Programm gestartet. Jetzt hab ich nur einen Weg gesucht, diese App auch wieder zu beenden, wenn mein Programm beendet wird.

    Ich wollte es jetzt lieber doch so machen, dass die App schaut, ob mein GameMaker erstelltes Programm läuft und wenn das nicht mehr der Fall ist, sich selbst beendet, anstatt die App von GameMaker aus zu killen.

    Leider komme ich in C++ irgendwie nicht daran, zu checken, ob mein GameMaker Prozess noch läuft, ich weiß nicht, ob GameMaker da noch irgendwas maskiert?

    Gruß, Benny
  • Also da wäre es ja um ein vielfaches einfacher gewesen, einfach eine dll zu erstellen... ;)
    Nunja, schreib doch irgendwas in ne datei und überprüf diese datei regelmässig... und wenn was bestimmtest steht dann kannste ja das programm beenden.
    Anderweitig musst du dir wohl die Winapi zu nutze machen, was auch gleichzeitig recht den Overhead mitbringt(depends...)
    Viel einfacher wär übrigens auch ein Projekt mittels .Net, ob jetzt mit c++/cli oder c#, da kannste auf einen riesen haufen funktionen zugreifen. Wenn du Visual Studio/Visual C++ Express verwendest, kannste einfach ein Winforms Projekt oder dergleichen erstellen.
    "das war meine letzte flamewar PM an dich ."
  • Das das ganze viel einfacher geht ist klar :) . Leider sind meine Programmierkentnisse in Visual C++ bzw Net eher begrenzt sodass ich froh bin, diese Schnittstelle hinbekommen zu haben :P . An irgendwas grafisches mit C++ will ich da gar nicht erst denken, das geht mit GameMaker halt weitaus einfacher.

    Gruß, Benny
  • Nope, da muss ich dir wiedersprechen... Grafische Oberflächen sind mit WinForms sogar weitaus einfacher.
    Einfach neues Projekt -> Windows Forms (oder so), und schon kannste deine Buttons und Textboxen einfach ins Fenster ziehen.
    Um eine Dll zu erstellen, machste einfach ein Windows Projekt, wählst dll aus, schreibst deinen Code rein, und bei den Funktionen, die du zum Gm exportieren willst, machst du folgendes:

    Du hängst extern "C" __declspec(dllexport) vor die Funktion.
    Deine Funktion darf entweder double oder const char* als Rückgabetyp haben.

    Quellcode

    1. extern "C" __declspec(dllexport) double Test(double a, double b)
    2. {
    3. return a+b;
    4. }

    Das wars auch schon, kompilieren.

    Im GM brauchst du 3 Funktionen, die du am besten jeweils in ein Skript packst:

    init dll

    GML-Quellcode

    1. //mittels global.asdf kannst du die Funktion aufrufen
    2. //argumente:
    3. //1: filename der dll
    4. //2: Name der Funktion
    5. //3: Signatur der Funktion (extern "C" = dll_cdecl)
    6. //4: Rückgabe Typ(double = ty_real)
    7. //5: Anzahl Argumente
    8. //Die Restlichen sind die Typen der Argumente (ty_real, ty_string)
    9. global.asdf = external_define("asdf.dll","Test",dll_cdecl,ty_real,2,ty_real,ty_real);


    execute

    GML-Quellcode

    1. //Führt die FUnktion aus.
    2. return external_call(global.asdf,2,1);


    free

    GML-Quellcode

    1. //Schmeisst di Dll wieder raus.
    2. external_free("asdf.dll")
    "das war meine letzte flamewar PM an dich ."
  • Danke für die Erklärung...das werde ich mal ausprobieren. Was ich meinte war weniger grafisches wie buttons, oder textboxen. Das das mit der IDE von Visual Studio ganz leicht zu machen ist, weiß ich und wende ich auch an bei Sachen wo ichs brauch. Mir gehts da mehr um grafisches wie bei Spielen. Das was ich im GameMaker mache...ich hätte keine Ahnung wie ich das sonst machen müsste :D .

    Gruß, Benny