![]() |
CreateProcess mit String BDS2009
Guten Abend,
Ich versuche mich gerade an den ersten Schritte im BDS 2009. Ich versuche seit 2 Tagen die "einfache" Procedure CreateProcess aufzurufen um, Testweise,ein Bild aufzurufen. Ich habe es bereits mit Diversen Tutorials Probiert, aber ich komme immer zum gleichen Ergebiss: 1. " die Datei '%1' ist keine gültige Win32 Anwendung" oder 2. "Die Datei wurde nicht gefunden." Ich habe es bereits mit dieversen Datentypen versucht (String,Ansistring,Widestring) aber die Datei wird einfach nicht aufgerufen. Konnte mir bitte jemand sage, wo ich hier den Fehler habe? Ich gebe auch offen zu, das ich die Umstellung von BDs2006 - BDS2009 von den Stringtypen noch nicht verstanden habe.Ich kämpfe micht zwar schon seit gut ner woche durch diverse Umstellungs-Tips und Anleitungen aber erfolgreich umsetzen konnte ich es noch nicht. Ich verwende Folgenden Code BDS 2006 --> Funktioniert Problem los
Delphi-Quellcode:
Angepasst an BDS 2009 --> klappt nicht
var StartupInfo: TStartupInfo;
begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESIZE; StartupInfo.wShowWindow := SHOW_OPENWINDOW; // Erzeugen //=============================================== if CreateProcess(NIL , // PChar(Parameter), PChar('C:\Test1\Tulips.jpg'), nil, nil, False, SW_HIDE, // SW_NORMAL, // CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, Result) then begin // Result := Result.dwProcessId; if Wait then ProcessWarten(Result); end; // if Result.hProcess <> 0 then CloseHandle(Result.hProcess); // if Result.hThread <> 0 then CloseHandle(Result.hThread); end;
Delphi-Quellcode:
var StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation; PFad : String; aa : PCHar; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); FillChar(ProcessInfo,SizeOf(TProcessInformation),0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESIZE; StartupInfo.wShowWindow := SHOW_OPENWINDOW; PFad := 'C:\Test1\Tulips.jpg'; aa := PCHar(Pfad); // Erzeugen //=============================================== if CreateProcess(NIL , // PChar(Parameter), @pfad, nil, nil, False, SW_HIDE, // SW_NORMAL, // CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin end else Begin Showmessage(SysErrorMessage(GetLastError)) End; end; schonmal vielen Dank für die Hilfe |
AW: CreateProcess mit String BDS2009
Wichtig ist, dass CreateProcess in der Unicodevariante einen veränderbaren String als Parameter erwartet. Das einfachste ist vor dem Cast auf PChar einen konstanten Leerstring zu konkatenieren.
Siehe ähnliche Frage mit meiner Antwort: ![]() Sowie die entsprechenden Hinweise in der Doku: ![]() |
AW: CreateProcess mit String BDS2009
Danke für die Antwort,
ich habe es mal entsprechend geändert:
Delphi-Quellcode:
Allerdings bekomme ich immernoch die Fehlermeldung "%1 ist keine gültige Win32 Anwendung"
//const PFad = 'C:\Test1\Tulips.jpg';
var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; Pfad : String; aa : PCHar; begin FillChar(StartupInfo, SizeOf(StartupInfo), #0); FillChar(ProcessInfo,SizeOf(TProcessInformation),0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.dwFlags := STARTF_USESIZE; StartupInfo.wShowWindow := SHOW_OPENWINDOW; PFad := 'C:\Test1\Tulips.jpg'; //aa := PCHar(Pfad); // Erzeugen //=============================================== if CreateProcess(NIL , PChar(Pfad + ''), // @pfad, nil, nil, False, SW_HIDE, // SW_NORMAL, // CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin end else Begin Showmessage(SysErrorMessage(GetLastError)) End; end; |
AW: CreateProcess mit String BDS2009
Du willst einen Prozess aus diesem Bild erzeugen?
Tja, die Datei '%1' ist keine gültige Win32 Anwendung sagt dir doch, daß dieses nicht geht. Ein Bild ist nunmal keine "Anwendung". Mit CreateProcess kannst du höchstens einen Prozess aus einer Anwendung erzeugen, welche dein Bild versteht/anzeigt und diesem das Bild als Parameter mitgeben. :zwinker: Lösung: ![]() ![]() Und hier Die Datei wurde nicht gefunden wird wohl das Unicode-/AnsiProblem zugeschlagen haben. |
AW: CreateProcess mit String BDS2009
Ich möchte ja das Bild in der entsprechenden Anwendung starten.
ShellExecute kann ich nicht verwenden, da ich später den Process "überwachen" möchte. Also das Hauptprogramm soll später prüfen, ob der Process noch aktiv ist, und wenn er es nicht mehr ist, soll ein entsprechendes Ereigniss ausgeführt werden. Dafür ist es aber eben wichtig, das ich den Process kenne, der gestartet wird. Edit. Das Problem ist, das ich nicht weiss, welches Process gestartet wird. |
AW: CreateProcess mit String BDS2009
Und wie ist es mit ShellexecuteEx?
|
AW: CreateProcess mit String BDS2009
Zitat:
Zitat:
|
AW: CreateProcess mit String BDS2009
hrrrrr.
Es ist halt doch schon spät :oops: :wall::wall::wall::wall: Das war ein Denkfehler von mir, ich hab Shellexecute und CreateProcess durcheinander geworfen. CreateProcess -> nur bei anwendungen Shellexecute --> Datei ausführen. Dann hat sich dir Frage bereits erledigt.:duck: vielen vielen Danke für die Hilfe und schönen abend noch |
AW: CreateProcess mit String BDS2009
Naja, wie war das nochmal mit dem Wald und den Bäumen? :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz