CreateProcess() Problem
-
Hallo.
Ich möchte per CreateProcess() eine Datei öffnen, die vom benutzer selber gewählt werden kann.
Eigentlich könnte ich das auch mit ShellExecute() machen, aber da ich die ID des neu geöffneten Fensters brauche, geht das damit net.
Im Moment habe ich folgendes bei mir Implementiert:
STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_SHOW; int nLen = this->m_strFileName.GetLength(); LPTSTR lpszBuf = this->m_strFileName.GetBuffer(nLen); if (! CreateProcess(NULL,lpszBuf,NULL,NULL,NULL,NULL,NULL,NULL,&si,&pi) ) { MessageBox("Fehler beim erstellen!",NULL,MB_OK); } HANDLE hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pi.dwProcessId); this->m_strFileName.ReleaseBuffer();Der 2. Parameter bei CreateProcess ist der Pfad der Datei, die der user ausgewählt hat.
Jetzt kommt aber immer die Fehlermeldung, dass er das net erstellen konnte.
Mache ich beim 2. Parameter aber ein Pfad zu einem Programm hin, funzt das wunderbar.
Ich habe schon versucht, den Pfad für diw Datei in den Parameter des "Directory" zu packen, aber dann fällt er mir ganz auf die Klappe.
Wie kann ich das denn nu machen?
-
MSS-Software schrieb:
Ich möchte per CreateProcess() eine Datei öffnen, die vom benutzer selber gewählt werden kann.
was für Dateien möchtest du öffnen? Und vor allem wie? In deinem Prog? Mit der Standart-Anwendung?
schau mal hier: http://www.wer-weiss-was.de/theme9/article132601.html
-
ja, den Beitrag hab ich mir grad eben durchgelsen
problem ist aber, dass ich von dem Fenster, was sich neu öffnet, die Instanz brauche um mir dann davon den WindowText holen zu lassen
weiteres problem: mit CreateProcess würde das ja auch wunder funzen, aber das problem ist, dass ich bei CreateProcess eine Anwendung mit angeben muss.
da der user aber zwischen vielen verschiedenen dateien auswählen kann, weiß ich ja gar net, mit welchem prog er das öffnen soll
es muss doch irgendeine möglichkeit geben bei CreateProcess, die so ähnlich ist wie bei ShellExecute, dass ich nur den Pfad der Datei auswählen brauche und er automatisch das richtige Programm dafür nimmt...
-
deine sorgen haben ein Ende looool
die Funktion heißt system()
du übergibst ihr einfach deinen Dateinamen und er macht den Rest!
-
Warum willst Du den Pfad zur EXE nicht mit übergeben???
CreateProcess braucht entweder den vollständigen Pfad oder die EXE muss in der "PATH" Umgebungsvariable zu finden sein...
-
ehm, wie kann mam eigentlich auf die Umgebungsvariablen zugreifen? oder ist das einfach nur ein anderes Wort für Registry?
-
Nein... rechtsklick auf "Arbeitsplatz" ... "Erweitert"-Tab... "Umgebungsvariablen" ...
Kannst die auch von deinem Programm heraus auslesen...
-
ESS_CB schrieb:
ehm, wie kann mam eigentlich auf die Umgebungsvariablen zugreifen?
- SetEnvironmentVariable
- GetEnvironmentVariable
-
thyal