EXE Datei schließen über C++ Programm



  • Hallo Leute zu meinem Problem ich möchte mir eine Öffnen und schließen über ein Programm welches ich mit dem C++ Borland Builder erstelle eine GUI.

    Mit einem Button öffne ich die EXE und mit dem andren schließe ich diese.

    Meine Frage ist welche möglichkeiten gibt es?

    Verstehe etwas vom Programmieren im sinne von kleinigkeiten z.B einen Taschenrechner selber machen aber wenn ich auf die Windows ebene Zugreifen will hab ich absolut keine Ahnung glaub ich.

    Könnt Ihr mir da weiterhelfen??

    Glaube sehr an euch da Ihr mir indirekt in viellen sache3n geholfen habt wenn ich Infos brauchte wenn man so einige Foren durchläuft.

    Danke schon mal.



  • Öffnen Button
    CreateProcess bzw. ShellExecute

    Schließen Button
    TerminateProcess



  • Danke für die schnell Antwort freut mich sehr.Hast du den ein kleines Bsp?
    wie ich das eingebe?

    (Ich kenne diese Funktionen leider nicht.
    Gibts da evtl was schriftliches dafür im Netzt z.B über weitere Möglichkietne die man bei Windows machen könnte?)



  • ich habs ja fast befürchtet 🙄
    nein hab keine beispiele und ich bin zu faul welche zu machen, denn ich brüte über meinen eigenen problemen.

    such mal hier im forum nach den schlagwörtern bzw. bemühe google und du wirst ein haufen beispiele finden die du nutzen kannst.

    wenn es dann nicht klappt bzw. du verständigungsprobleme hast, kommste wieder postest dein code und dir wird geholfen... 😉



  • Ok danke vorerst versuche es erstmal selber.
    Vielleicht hast ja mal zeit um ein Bsp. zu zeigen.



  • hier mal ein beispiel:
    zu ShellExecute:

    ShellExecute(0, TEXT("open"), TEXT(/*Pfad*/), NULL, NULL, SW_SHOWNORMAL);
    

    zu TerminateProcess: die geneuae Syntax weiß ich nicht mehr.

    mfg,
    andi01.



  • TerminateProcess sollte nicht verwendet werden.
    Benutze doch Windows Messages um die App. herunterzufahren (WM_CLOSE).

    Simon



  • Hey Klasse freu mich sehr über die Antworten.

    Also mit exe öffnen hat es schon mal geklappt super hat etwas gedauert aber jetzt klappts nun meine Frage kann mir jemand die Befehle erklären?

    ShellExecute(0, TEXT("open"), TEXT(/*Pfad*/), NULL, NULL, SW_SHOWNORMAL);

    die zusammenstellung was hat was zu bedeuten bis auf Pfad 🙂

    NULL als beispiel was hat das zu bewirken würde mich sehr freuen!!!:-)

    Ansonsten kannst du mir sagen wie ich die (WM_CLOSE) verwenden soll was soll da alles rein??

    Bin jetzt nicht zu Hause somit kann ich nicht selber Tüffteln.erst heut abend 😞

    P.S. Warum sollte ich TerminateProcess nicht verwenden?

    Gruß an euch alle



  • sry aus versehen doppelpost 😃 -> siehe einen post weiter unten!



  • also WM_CLOSE wird so verwendet:

    SendMessage(handle_deiner_anwendung, WM_CLOSE, 0, 0);
    

    das handle deiner anwendung kriegst du folgendermaßen raus:

    HWND handle_deiner_anwendung=FindWindow(0, TEXT(/*Fenstertitel deiner Anwendung*/));
    

    was die Parameter bei Shell Execute betrifft:
    http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx

    das sollte als erklärung ausführlich genug sein 🙂

    falls nicht:
    1.parameter: handle des besitzer-fensters, für fehlermeldungen, interfaces usw. wichtig, hier null weil es ein unabhängiges fenster werden soll.
    2.parameter: anweisung was mit der angegeben datei passieren soll(open=öffnen).
    3.parameter:pfad deiner anwendung
    4.parameter:evenuelle parameter die an die anwendung übergeben werden sollen, hier keine ->NULL
    5.parameter: arbeitsverzeichnis der anwendung(für log-files etc.), brauchen wir hier nicht->NULL
    6.parameter: wie soll das fenster angezeigt werden? SW_SHOWNORMAL -> normale größe

    weitere:

    msdn schrieb:

    SW_HIDE
    Hides the window and activates another window.
    SW_MAXIMIZE
    Maximizes the specified window.
    SW_MINIMIZE
    Minimizes the specified window and activates the next top-level window in the z-order.
    SW_RESTORE
    Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when restoring a minimized window.
    SW_SHOW
    Activates the window and displays it in its current size and position.
    SW_SHOWDEFAULT
    Sets the show state based on the SW_ flag specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application. An application should call ShowWindow with this flag to set the initial show state of its main window.
    SW_SHOWMAXIMIZED
    Activates the window and displays it as a maximized window.
    SW_SHOWMINIMIZED
    Activates the window and displays it as a minimized window.
    SW_SHOWMINNOACTIVE
    Displays the window as a minimized window. The active window remains active.
    SW_SHOWNA
    Displays the window in its current state. The active window remains active.
    SW_SHOWNOACTIVATE
    Displays a window in its most recent size and position. The active window remains active.
    SW_SHOWNORMAL
    Activates and displays a window. If the window is minimized or maximized, Windows restores it to its original size and position. An application should specify this flag when displaying the window for the first time.

    mfg,
    andi01.



  • Klasse ihr seid alle echt super ich werd das jetzt mal alles ausprobieren und dann meld ich mich wieder!!



  • Mit dem Handle verstehe ich nicht so ganz.
    Also wenn ich meinen Button betätige dann suche ich zuerst wo die Datei verwendet wird??und dann gebe ich die hier rein ---> SendMessage(handle_deiner_anwendung, WM_CLOSE, 0, 0);

    weil mich bei dem beispiel für das ; am ende stutzig macht? --->

    HWND handle_deiner_anwendung=FindWindow(0, TEXT(/*Fenstertitel deiner Anwendung*/));

    Also mit ShellExecute hats geklappt so siehts jetzt aus:

    ShellExecute(NULL,"open","c:\\Programme\\RealVNC\\VNC4\\VNCViewer",NULL,NULL,SW_SHOWNORMAL);



  • Hey hat alles geklappt hab jetzt alles mögliche3 probiert bis es geklappt hat!!!super Danke!!!!!!!!

    Mal eine kleine Frage wenn ich z.B bei fertigen Programmen wie DynDns Updater auf einige Programmelemente zugreifen will wie z.B (Start Updater welches sich im Menü von dem Prog befindet) wie bekomme ich solche bestimmten Adressen her??oder Befehle allgemien gefragt damit ich mich in Zukunft wenn ich was machen will nicht direkt im Forum durchfrage.

    Der link von dir ist schon echt klasse das wird mir in Zukunft bestimmt auch weiterhelfen.

    //Allgemein habe ich vor einem älteren bekannten der seine ersten Schritte im Umgang mit PCs macht das leben vereinfachen.Hab im jetzt VNC Viewer und alles andre aufgespielt damit ich ihm auch aus Amerika helfen kann bloß es gibt schon probleme wenn er einige Programme starten soll somit möchte ich ihm über eine C++ EXE das leben in Programme öffnen vereinfachen 🙂 das zu meinem Hintergrung der Fragen 🙂



  • So sieht das jetzt aus die Deklaration meines Handles hat mir den Kopf zerbrochen 🙂

    #include <vcl.h>
    #pragma hdrstop
    #include <windows.h>
    #include "UEXETest.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"

    TForm1 *Form1;

    HANDLE HWND_VNC_VIEWER;

    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    ShellExecute(NULL,"open","c:\\Programme\\RealVNC\\VNC4\\VNCViewer",NULL,NULL,SW_SHOWNORMAL);
    }

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    HWND_VNC_VIEWER=FindWindow(NULL,"VNC Viewer : Connection Details");

    SendMessage(HWND_VNC_VIEWER, WM_CLOSE,NULL,NULL);
    }



  • Warum deklarierst du Funktionen explizit als Fastcall?



  • Hi naja weil ichs so gelernt habe es handelt sich um eine Button Funktion.Aber was meinst du wie sollte ichs am besten machen?

    Gruß



  • Das __fastcall ist da beim BCB schon richtig, die VCL ist ja intern eine Pascal Library.



  • Also ist das dann richtig?es hat ja funktioniert nur vielleicht habe ich ja evtl ne regel verletzt oder unsichere stelle gewählt?

    Jeder Tip ist Goldwert.


Anmelden zum Antworten