AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateProcess mit String BDS2009
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess mit String BDS2009

Ein Thema von Pro_RJ · begonnen am 16. Okt 2011 · letzter Beitrag vom 17. Okt 2011
Antwort Antwort
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#1

CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:14
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:
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;
Angepasst an BDS 2009 --> klappt nicht
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

Geändert von Pro_RJ (16. Okt 2011 um 23:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:22
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:
http://www.delphi-forum.de/topic_Cre..._104214,0.html
Sowie die entsprechenden Hinweise in der Doku:
http://docwiki.embarcadero.com/RADSt...icode_anpassen
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#3

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:29
Danke für die Antwort,
ich habe es mal entsprechend geändert:

Delphi-Quellcode:
//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;
Allerdings bekomme ich immernoch die Fehlermeldung "%1 ist keine gültige Win32 Anwendung"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:32
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.

Lösung: Hier im Forum suchenShellExecute / MSDN-Library durchsuchenShellExecute


Und hier Die Datei wurde nicht gefunden wird wohl das Unicode-/AnsiProblem zugeschlagen haben.
$2B or not $2B

Geändert von himitsu (16. Okt 2011 um 23:35 Uhr)
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#5

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:35
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.

Geändert von Pro_RJ (16. Okt 2011 um 23:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:40
Und wie ist es mit ShellexecuteEx?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:45
Und wie ist es mit ShellexecuteEx?
Wobei das sogar im MSDN erwähnt wurde.

Zitat von MSDN > ShellExecute:
To obtain information about the application that is launched as a result of calling ShellExecute, use ShellExecuteEx.
$2B or not $2B
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#8

AW: CreateProcess mit String BDS2009

  Alt 16. Okt 2011, 23:48
hrrrrr.
Es ist halt doch schon spät
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.
vielen vielen Danke für die Hilfe
und schönen abend noch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: CreateProcess mit String BDS2009

  Alt 17. Okt 2011, 00:31
Naja, wie war das nochmal mit dem Wald und den Bäumen?
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz