Problem beim benutzen von CreateProcessA und dem Arbeitsverzeichnis
Hallo
Ich arbeite mit einem Excel 2003 unter Windows xp sp3.
In einem Excelmakro möchte ich ein Externes Programm starten und warten bis dieses beendet ist.
Das mache ich mit diesem Teil des Codes (nur mal der relevante Teil). Soweit funktioniert das auch.
Mein Problem ist nun, dass das aufgerufene Programm als Arbeitsverzeichnis "Eingene Dateien" verwendet. Wie kann ich das ändern?
Ichhabe schon versucht ihm das Verzeichnis des Programms als "lpCurrentDirectory" mit zu übergeben. Das bekomme ich aber einfach nicht hin. Weder direkt als String "C:\Verzeichnis" (führt zu einem Fehler, ist auch klar, war ein Versuch), noch als StrPtr("C:\Verzeichnis") (Programm startet einfach garnicht, Keine Fehlermeldung).
Meine Suche im Internet ergab auch keine Lösung. Hat das schonmal jemand gemacht und kann mit helfen?
miniversum
Ich arbeite mit einem Excel 2003 unter Windows xp sp3.
In einem Excelmakro möchte ich ein Externes Programm starten und warten bis dieses beendet ist.
Das mache ich mit diesem Teil des Codes (nur mal der relevante Teil). Soweit funktioniert das auch.
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, _
ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, _
ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Sub ShellAndWait(ByVal Filename As String)
Dim RetVal As Long
Dim proc As PROCESS_INFORMATION
Dim StartInf As STARTUPINFO
StartInf.cb = Len(StartInf)
'Angegebenes Programm starten
RetVal = CreateProcessA(0&, Filename, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, StartInf, proc)
'Das eigene Programm anhalten, bis das fremde beendet wurde
RetVal = WaitForSingleObject(proc.hProcess, INFINITE)
RetVal = CloseHandle(proc.hProcess)
Mein Problem ist nun, dass das aufgerufene Programm als Arbeitsverzeichnis "Eingene Dateien" verwendet. Wie kann ich das ändern?
Ichhabe schon versucht ihm das Verzeichnis des Programms als "lpCurrentDirectory" mit zu übergeben. Das bekomme ich aber einfach nicht hin. Weder direkt als String "C:\Verzeichnis" (führt zu einem Fehler, ist auch klar, war ein Versuch), noch als StrPtr("C:\Verzeichnis") (Programm startet einfach garnicht, Keine Fehlermeldung).
Meine Suche im Internet ergab auch keine Lösung. Hat das schonmal jemand gemacht und kann mit helfen?
miniversum
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 99301
Url: https://administrator.de/contentid/99301
Ausgedruckt am: 21.11.2024 um 13:11 Uhr
1 Kommentar