Announcement

Collapse
No announcement yet.

Beenden einer Applikation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Beenden einer Applikation

    Hallo guten Morgen,
    ich habe ein Aufgabenpaket, das mehrere Applikationen enthält. Die unterschiedlichen Applikationen starte ich mit ShellExecute. Das funktioniert gut.

    Da immer nur eine Applikation aktiuv sein darf möchte ich vor dem Wechsel auf eine andere Applikation die laufende Applikation beenden mit etwas wie "ShellTerminate". Eine solche Funktion habe ich bisher nicht finden können kann mir jemand von Euch bitte einen Tipp geben.

    Danke
    Dieter Hinterthür
    Mache Software wird nie fertig. Man muss sie für fertig erklären.

  • #2
    Nicht ShellExecute, sondern CreateProcess benutzen.

    http://www.marquardtnet.info/cecke/q...quicky_25.html

    Dort hast du Zugriff auf den Prozess
    Christian

    Comment


    • #3
      Originally posted by Dieter Hinterthür View Post
      Da immer nur eine Applikation aktiuv sein darf möchte ich vor dem Wechsel auf eine andere Applikation die laufende Applikation beenden mit etwas wie "ShellTerminate".
      Du will den den Prozess abschießen bloß weil ander App gestartet wurde. Viel spaß damit wenn dadurch Daten verloren gehen weill die Anwendungen die Daten noch nicht (vollständig) gespeichert haben.

      Comment


      • #4
        Hallo Christian,
        ich denke dann wäre das der Weg um die Applikation zu schliessen oder?

        http://marquardtnet.info/cecke/quickies.1/1_index.html

        Dieter
        Mache Software wird nie fertig. Man muss sie für fertig erklären.

        Comment


        • #5
          Hallo Bernhard,
          da sollte es keine Probleme geben weil alle Applikationen keine Daten speichern, leider aber für unterschiedliche Aufgaben die selbe Hardware nutzen.

          Dieter
          Mache Software wird nie fertig. Man muss sie für fertig erklären.

          Comment


          • #6
            Hallo danke für Eure hilfe. Hier ist das Ergebnis:


            #include <vcl.h>
            #pragma hdrstop
            #include <vcl.h>

            #include "StartApplication.h"
            //---------------------------------------------------------------------------
            #pragma package(smart_init)
            #pragma resource "*.dfm"
            TStartAppForm *StartAppForm;
            //---------------------------------------------------------------------------
            __fastcall TStartAppForm::TStartAppForm(TComponent* Owner)
            : TForm(Owner)
            {
            }
            //---------------------------------------------------------------------------
            void __fastcall TStartAppForm::OeffneAppButtonClick(TObject *Sender)
            {

            StartInfo.cb = sizeof(TStartupInfo);
            setmem(&StartInfo, sizeof(TStartupInfo), 0);

            if(CreateProcess(NULL, "Notepad.exe", NULL, NULL, false,
            CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, NULL , NULL ,&StartInfo ,&ProzessInfo)==TRUE)
            {
            //Speicher wieder freigeben
            CloseHandle(ProzessInfo.hThread);
            //Warteschleife die die Prozessinfo abfrägt
            if(WaitForSingleObject(ProzessInfo.hProcess, 5000) == WAIT_TIMEOUT)
            ShowMessage ("Programm wurde nach 5 Sekunden nicht gestatet !");

            //Speicher wieder freigeben
            CloseHandle(ProzessInfo.hProcess);
            }
            }
            //---------------------------------------------------------------------------
            void __fastcall TStartAppForm::CloseButtonClick(TObject *Sender)
            {
            HANDLE hProc;
            DWORD ws;
            //Prozess öffnen
            hProc=OpenProcess(PROCESS_TERMINATE|SYNCHRONIZE,fa lse,ProzessInfo.dwProcessId);
            if(hProc==NULL)
            ShowMessage ("Fehler !");

            //Prozess abschiessen
            TerminateProcess(hProc,0);

            // Warte 5 Sek. ob die Application beendet wurde.
            ws=WaitForSingleObject(hProc,5000);

            if(ws==WAIT_TIMEOUT)
            ShowMessage ("Programm wurde nicht beendet !");
            }
            //---------------------------------------------------------------------------
            Mache Software wird nie fertig. Man muss sie für fertig erklären.

            Comment

            Working...
            X