Prob mit CreateProcess()
-
Habe ein kleines Programm, über das ich Schnellstarten kann ohne die Maus zu benützen.
ZB bei Eingabe von "quake3" startet Quake 3 Arena, etc. damit kann ich mir den Laptopdesktop mit wichtigerem Befüllen *g*. Auch weniger oft gebrauchte Programme kann man suchen.
Ja wenig Sinn für euch aber egal. Zum Problem:
// Starten des Programms funktioniert mit WinExec bzw. auch mit ShellExecute: WinExec(programs[code].programmname,SW_SHOWNORMAL); ShellExecute(NULL,"open",programs[code].programmname,"",programs[code].pfadonly,SW_SHOWNORMAL);
Allerdings ist das eine veraltet und das andere sagt mir ich soll mit CreateProcess() arbeiten.
Naja folgender Aufruf:
CreateProcess(programs[code].programmpfad,"",NULL,NULL,TRUE,CREATE_NEW_PROCESS_GROUP|NORMAL_PRIORITY_CLASS,NULL,programs[code].directory,NULL,NULL)
Liefert mir einen Programmabsturz - somit auch keine Abfrage von GetLastError() möglich. "Vorgang read auf ... konnte nicht ausgeführt werden Access Violation".
Wo ist der Fehler?
MfG SideWinder
-
BTW: Oder ist ShellExecute eh besser?
MfG SideWinder
-
SideWinder schrieb:
BTW: Oder ist ShellExecute eh besser?
Nicht besser, nicht schlechter. ShellExecute ist universeller und einfacher anzuwenden. Um nur schnell mal was anzustarten, ist das die Funktion der Wahl. Du mußt nur beachten, daß der Progammname in Anführungszeichen eingeschlossen ist, sofern er Leerzeichen enthält, aber das kannst mit PathQuoteSpaces schnell erreichen.
CreateProcess erlaubt hingegen bessere Kontrolle über den neu gestarteten Process. Beispielweise kann man direkt einen neuen Environment-Block angegeben (
). Wie gesagt: Wenn Du die ganzen zusätzlichen Optionen nicht brauchst, verwende ShellExecute.
Ein Sample zu CreateProcess gibt es übrigens im MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_processes.asp?frame=true
-
Okay dann ist ShellExecute() wohl für mich die richtige Wahl. Trotzdem würde mich interessieren was bei meinem Aufruf falsch ist - falls jemand kurz Zeit hat :).
MfG SideWinder
-
"If the function fails, the return value is zero. To get extended error information, call GetLastError."
Spontan fällt aber auf, daß die letzten Parameter fehlen.
-
-King- schrieb:
"If the function fails, the return value is zero. To get extended error information, call GetLastError."
Spontan fällt aber auf, daß die letzten Parameter fehlen.
zu 1. Oh stimmt - aber selbst dann dürfte das Programm nicht abstürzen.
zu 2. Könnte stimmen, ich dachte ich kann mit "NULL" hier ebenfalls Standardangaben erzwingen - offenbar nicht.MfG SideWinder