ShellExecute im Dialog verwenden
-
Erstmal muß ich sagen, daß ich dieses Problem in anderer Form schon mal gepostet habe, aber ich komme einfach nicht weiter!!
Also ich hatte eine kleine Konsolenanwendung geschrieben, um die Funktion ShellExecute zu testen. Das hat alles auch dann funktioniert. Nun wollte ich das selbe auch aus einem Dialog heraus machen. Nun passiert aber leider nichts.
Ich weiß jetzt nicht so recht, was ich da falsch mache oder ob das so überhaupt geht.
Per Mausklick wir also die Funktion ShellExecute aufgerufen, aber es passiert leider nichts. Also das Programm, welches da gestartet werden soll, macht es einfach nicht. Das Programm ist eine Konsolenanwendung. Muß ich das etwa als Thread machen?Edit 1: Das Programm, welches gestartet werden soll, soll eine Routine im Hintergrund ausführen. Es handelt sich dabei um ein Sprachsynthesetool und ich habe leider keinen Code dafür. Es muß also als Konsolenanwendung eingebunden werden und immer per Mausklick ein bestimmtes Wort ausgeben.
-
Solange Du keinen Code dazu lieferst, *wie* Du es machst, kann man Dir IMHO nicht helfen...
-
Ja eben so:
ShellExecute(0,"open","C:\\Programme\\Speech\\bin\\speech.exe ","{Hallo} -k",0,SW_HIDE);Also beim Konsolentestprogramm und dann eben in der Dialoganwendung auf ein OnBnClicked-Ereignis.
-
Kann mir denn keiner helfen? Oder fehlt noch eine Info's meinerseits?
Bitte um Hilfe, ist wirklich wichtig für mich!!
-
Kann mir denn wirklich keiner helfen?
Das Programm braucht doch eigentlich nur auf die Konsolenanwendung warten. Also bis das Wort generiert wird. Das kann doch eigentlich nicht so schwer sein.
Das Kosolenprogramm wird ja auch gestartet, aber eben gleich wieder geschlossen.
Gibt es denn keine Funktion, die das verhindert bzw. darauf wartet bis die Anwendung fertig ist?
-
Du hast bei der EXE ein Leerzeichen am ende zu viel

Aber verwende doch "CreateProcess"; das ist IMHO sinnvoller, wenn man direkt eine EXE startet:
CreateProcess(NULL, "C:\\Programme\\Speech\\bin\\speech.exe {Hallo} -k", ...)
-
Jochen Kalmbach schrieb:
Du hast bei der EXE ein Leerzeichen am ende zu viel

Aber verwende doch "CreateProcess"; das ist IMHO sinnvoller, wenn man direkt eine EXE startet:
CreateProcess(NULL, "C:\\Programme\\Speech\\bin\\speech.exe {Hallo} -k", ...)An dem Leerzeichen kann es eigentlich nicht liegen. Wie gesagt, es funktioniert ja als Konsolenprogramm. Da wartet das Programm schön ab bis das Wort generiert ist und dann wird die Konsole wieder geschlossen. Und bei der Dialogvariate wird ja auch kurz die Konsole geöffnet ( also das Programm gestartet ) und dann aber eben gleich wieder geschlossen. Und das sollte eben nicht passieren.
CreateProcess kann ich eigentlich nicht nehmen, weil doch da das konsolenfenster nicht im Hintergrund laufen würde ( also wie das FLAG bei ShellExecute -> SW_HIDE ), oder irre ich mich da?
Außerdem sollen ja sehr viele Worte generiert werden, also nicht nur "Hallo". Und das halt immer auf Mausklick hintereinander!!!
-
Jetzt hat es geklappt. Und zwar mit ShellExecuteEx. Der Fehler war einfach nur, daß ich kein Arbeitsverzeichnis angegeben hatte!!
Und mit CreateProcess geht das natürlich auch, aber das Konsolenfenster zu verstecken geht eben scheinbar doch nur mit ShellExecute oder ShellExecuteEx!!Aber danke für die Hilfe
-
evil-peter schrieb:
aber das Konsolenfenster zu verstecken geht eben scheinbar doch nur mit ShellExecute oder ShellExecuteEx!!
ShellExecute verwendet intern CreateProcess, somit geht natürlich das verstecken des Consolen-Fensters auch mit CreateProcess (STARTF_USESHOWWINDOW mit SW_HIDE)
-
OK, da bin ich leider nicht so bewandert. Ist es denn besser, dann gleich mit CreateProcess zu arbeiten? Oder ist das in dem Fall nicht so von Bedeutung bezogen auf das, was ich da machen will?
-
Ich persönlich verwende bei EXE immer CreateProcess, da man hier dann direkt das Handle zurückbekommt. Die Doku zu ShellExecute ist mir da zu wage...
-
Danke noch mal für die Hilfe