fremde EXE ausführen (mit Parameter)
-
Hi,
es müsste in etwa so funktionieren:
ShellExecute (NULL, "open", "C:\\Programme\\DeinProgramm.exe" , DeinParameter.c_str(), NULL, SW_SHOWNORMAL);
Die Variable "DeinParameter" ist AnsiString und muss mit c_str() in char umgewandlt werden, wie es im Code beschrieben ist.
Gruß
ravel
-
danke, das ist das was ich gesucht habe.
eine frage dazu noch: läuft diese Funktion unter Linux / Unix ?
ich brauche nur f. windows, aber würde mich mal interessieren, wie man das gleiche unter Linux/Unix schreibt.
heimschmiede
-
Hi,
ich glaube die ShellExecute ist eine Windows-API-Funktion und daher nicht Linux/Unix-fähig.
EDIT: Daniels Funktion sollte auf anderen OS auch funktionieren.Mal was anderes:
Daniel E, weißt du zufällig wie man die DOS-Box beim system()-Befehl unsichtbar macht?Gruß
ravel
-
was ist mit system(3) gemeint ?
er erwartet einen command als const char. aber an welches programm wird dieser command weitergegeben.
ich hab dann:
system("C:\Prog.exe parameter");
versucht, aber klappt nicht.
heimschmiede
-
Hallo,
'\'-Zeichen müssen verdoppelt werden, wenn es sich nicht gerade um eine Escape-Sequenzen handelt:
system("C:\\Prog.exe parameter");
MfG
-
Ravel schrieb:
Hi,
es müsste in etwa so funktionieren:
ShellExecute (NULL, "open", "C:\\Programme\\DeinProgramm.exe" , DeinParameter.c_str(), NULL, SW_SHOWNORMAL);
Die Variable "DeinParameter" ist AnsiString und muss mit c_str() in char umgewandlt werden, wie es im Code beschrieben ist.
Gruß
ravelGut, aber im total falschen Forum! (WinAPI + C++)
Der Post von Probe-Nutzer zeigt auf wie es richtig geht (auch wenn dieses Beispiel nur auf M$-Systemen geht ;)).
-
danke für eure Hilfe!
bei der system Funktion öffnet sich zu dem Programm auch noch ein Dos-Fenster. Kann man irgendwie vermeiden, dass sich dieses Fenster öffnet?
ansonsten ist es genau das was ich gesucht habe.
heimschmiede
-
Wenn du es mit ShellExecute() gemacht hast, dann bestimmt der letzte Parameter der Funktion wie das neue Fenster angezeigt wird. Ich vermute mal die Konstante heißt dann nicht SW_SHOWNORMAL sondern SW_SHOWHIDE o. ä. Frag einfach mal im WinAPI-Forum nach.
-
Hi,
der Parameter heißt SW_HIDE aber wir meinten den system-Befehl. ->Gibt es da die Möglichkeit das DOS-Fenster zu verstecken?
ravel
-
nimm am besten create process:
//////////////////////////////////////////////////////////////// // ERZEUGEN EINES PROZESSES // Aufruf von NOTEPAD #include <iostream.h> #include <process.h> #include <windows.h> void main( void ) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); // fülle Speicherbereich mit NULL si.cb = sizeof(si); // Grösse des Speicherbereichs ZeroMemory( &pi, sizeof(pi) ); // fülle Speicherbereich mit NULL bool ok = CreateProcess( NULL, "Notepad.exe", NULL, NULL,FALSE, 0, NULL, NULL, &si, &pi ) if (!ok) cout << "CreateProcess failed." ; // PROCESSINFORMATION abfragen: cout << "Kind-Prozess ID: " << pi.dwProcessId << endl; cout << "Kind-Prozess HANDLE: " << pi.hProcess << endl; cout << "Kind-Prozess Thread-HANDLE: " << pi.hThread << endl; cout << "Kind-Prozess Thread-ID: " << pi.dwThreadId << endl; // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); }
viel spaß;-)
cu