system(const char *) ohne Dos-Box ???



  • ok, danke fuer den tipp. die funktion der winapi kenne ich schon. Es gibt sogar eine "extended" version von der glaube ich !? Meine frage bezog sich aber direkt auf einen system(const char 😉 aufruf.

    mein problem ist folgendes, vielleicht habt ihr ja trotzdem nen tipp:
    ich habe ne gui die eine c-funktion aufruft, welche wiederum in sich system(const char*) aufrufe beinhaltet. fuehre ich nun die funktion (bei klicken auf einen button z.B.) aus, dann poppen dos-boxen auf, die ziemlich scheisse aussehen.

    ich kann nun aber nicht die ganze c-funktion so umaendern und die system(const char*) durch WINAPI aufrufe ersetzen, weil diese funktion fuer eine normale ANSI-C Umgebung auch funktionieren soll. Diese funktion mal eben selbst nochmal zu schreiben ist auch nicht moeglich (zu komplex).

    Ich dachte es gaebe vielleicht ne moeglichkeit die dos-boxen nicht aufpoppen zu lassen´!??!??

    danke.
    gruss



  • Hmmm, nein da kenne ich keine direkte Möglichkeit, dass diese Boxen nicht aufgepoppt werden.

    Eine Möglichkeit wäre vielleicht noch, dass du die Funktion als extra Programm aussonderst, wenn das geht, und dann dieses Programm per ShellExecute() versteckt aufrufst, dann sollten eigentlich die anderen Aufrufe nicht in einer extra Box aufgehen sondern in dieser versteckten "angezeigt" werden.



  • ne das ist leider nicht moeglich, weil das eine teilfunktionalitaet ist die ich brauche. ansonsten haette ich natuerlich das exe per shellexecuteex aufrufen koennen :))

    aber nochmal ne frage dazu:

    ich habe gerade versucht die system(const char*)
    aufrufe zu ersetzen und habe hierzu erstmal folgenden include gemacht fuer ShellExecuteEx:

    #include <shlwapi.h>
    

    danach habe ich einen system(command) aufruf ersetzt durch folgendes:

    SHELLEXECUTEINFO sei; 
    ZeroMemory( &sei, sizeof( sei ) ); 
    sei.cbSize       = sizeof( sei ); 
    sei.fMask        = SEE_MASK_NOCLOSEPROCESS; 
    sei.lpFile       = "cte.exe"; 
    sei.lpParameters = msg;
    sei.lpDirectory  = NULL; 
    sei.nShow        = SW_HIDE; 
    
    ShellExecuteEx( &sei ); 
    if ( sei.hProcess ){ 
    	// warte bis der prozess beendet wurde.... 
    	WaitForSingleObject( sei.hProcess, INFINITE ); 
    	CloseHandle( sei.hProcess ); 
    }
    

    Aber mein compiler meckert ueber irgendwelche sachen in der includierten header (siehe oben) obwohl die ja korrekt sein muesste. woran kann das liegen (brauche ich zusaetzliche irgendwelche header fuer ShellExecuteEx !?!?!?

    danke.



  • folgende zeile muesste entsprechend sein:
    ..
    sei.lpFile = command;
    sei.lpParameters = NULL;
    ..

    gruss



  • Mit ShellExecuteEx() kenn ich mich nicht aus; hab bisher nur die ShellExecute() benutzt und dazu brauchst man ja nur die windows.h.

    Ich verschieb dich jetzt mal ins WinAPI-Forum, vielleicht weiß da jemand was falsch ist oder kennt sogar eine WinAPI-Funktion die dir das Ersetzen erspart ( 😕 ).

    Viel Erfolg!



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielleicht bringt SetStdHandle etwas 😕



  • peperonee schrieb:

    Aber mein compiler meckert ueber irgendwelche sachen in der includierten header (siehe oben) obwohl die ja korrekt sein muesste.

    und was meckert er sonst noch? plattform sdk downgeloadet? remarks und info's beachtet?
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecuteex.asp

    [edit]
    blödsinn gelöscht



  • Hast du mal zu Beginn noch windows.h eingebunden?



  • ja ich habe vorher windows.h eingebunden.
    die fehler die angezeigt werden sind komischerweise syntax-fehler in der header shlwapi.h und das kann ja nicht sein.

    danke.



  • Kann es sein, dass du dir ein PSDK-Update runtergeladen und installiert hast, aber das PSDK-Verzeichnis in VC++ bei den Verzeichnissen unter Optionen nicht ganz oben steht, sodass es zu einem Versionskonflikt kommt 😕
    Was für Fehler bekommst du denn genau (mal nur die ersten paar) 🕶


Anmelden zum Antworten