AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute Laufzeitproblem

Ein Thema von LuCSteR · begonnen am 15. Jan 2009 · letzter Beitrag vom 16. Jan 2009
Antwort Antwort
Seite 2 von 3     12 3      
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#11

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 11:40
Der Paramtertyp müsste doch stimmen, oder?
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 12:42
Das ShellExecuteEx unter meinem Delphi 2009 erwartet einen Parameter vom Typ PShellExecuteInfoW.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 12:56
Jetzt braucht uns LuCSteR nur noch mitteilen welcher Typ bei ihm erwartet wird (steht sicher in den sourcen bzw. wird beim Auto-Verfollständigen angezeigt)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#14

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 13:00
Bei mir wird: LPShellExecuteInfoW erwartet. Aber was hat das damit zu tun, das der Compiler nicht weiss, welche überladene Funktion er wählen soll? Soweit ich mich erinnern kann war doch bei der Paramterübergabe ein "@" dazu da um eine Funktion/Prozedur zu übergeben. Wenn ich das "@" wegnehme dann kommt die Fehlermeldung:
Unit1.pas(411,37) Error: Incompatible type for arg no. 1: Got "_SHELLEXECUTEINFOA", expected "LPSHELLEXECUTEINFOW" Aber wie soll ich denn aus "_SHELLEXECUTEINFOA" --> "LPSHELLEXECUTEINFOW" machen? ich besitze nur Grundkentnisse in der Programmierung.

Als Übergangslösung habe ich nen Delay eingebaut. Aber das ist mir zu schmutzig.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 13:10
Verwendest du ShellExecuteExW? Die Meldung ist gewissermaßen verständlich. Denn es gibt ja eine Funktion mit entsprechendem Namen aber keine der Varianten (in dem Fall eine) stimmt mit dem von dir übergebenem Parameter überein. Entsprechend weiß er nicht welche er verwenden soll.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#16

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 13:20
Der Source ist ausm Netz. Ich habe den also nicht selbst geschrieben. Ich versuche ihn nur zu benutzen um ein wiederliches kleines Problem endlich sauber zu lösen. Der Code steht im Beitrag #9.

Der entsprechende Aufruf von mir sieht so aus: (bisher immer auskomentiert, da ja iwas mit der Funktion nicht i.o. ist)
ShellExecute_AndWait('open', GetCurrentDir+'\7za.exe', 'e -o"'+TempDownloadDir+IP+'" "'+TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i]+'"', nil, SW_SHOWNORMAL, true);
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#17

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 15:58
Anderer Ansatz und funktioniert! Aber die Beschreibung zu CreateProcess auf MSDN ist mal total grottig. Da steht das der 1.Paramter den Applikationspfad enthalten soll und der 2.Parameter die Kommandozeile (Übergabeparameter für die Anwendung). Wenn man sich daran hält funktioniert mal garnichts. 1. Parameter auf nil --> autom. wird die Kommandozeile genutzt (das steht aber auch nciht explizit dort) 2.Paramter Anwendungspfad und Übergabeparameter angeben. Wie unten zwar schwer ersichtlich aber erfolgt ist

Delphi-Quellcode:
var
  si:STARTUPINFO;
  pi:PROCESS_INFORMATION;

begin
  FillChar(si, SizeOf(si), Chr(0));
  si.cb:=sizeof(si);
  FillChar(pi, SizeOf(pi), Chr(0));
          
  CreateProcess(nil, PChar(GetCurrentDir+'\7za.exe e -o"'+TempDownloadDir+IP+'" "'+TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i]+'"'), nil, nil, FALSE, 0, nil, nil, si, pi);

  WaitForSingleObject(pi.hProcess, infinite)=WAIT_TIMEOUT;

  DeleteFile(TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i]);
end;
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 16:05
Du bist ein Witzbold.
Die MSDN Library hat zu CreateProcess Folgendes geschrieben:

The lpApplicationName parameter can be NULL. In that case, the module name must be the first white space–delimited token in the lpCommandLine string.

Und wenn lpApplicationName nicht nil ist, funktioniert es auch. Du hast wahrscheinlich vergessen, dass fast alle Programme im ersten Kommandozeilenparameter ihren Dateinamen erwarten.

Und was es bringen sollen, einen Vergleich, der nie wahr werden kann, einfach so in die Landschaft zu setzen, ohne dass das Resultat verwertet wird, ist mir auch schleierhaft.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
LuCSteR

Registriert seit: 16. Sep 2005
168 Beiträge
 
#19

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 16:49
Kann sein das ich etwas überlesen haben. Trotzdem bleibt festzuhalten das es bei mir nur so geklappt hat, wie ich es gepostet habe. Die Kommandozeile habe ich genauso Übergeben wie ich sie auch händisch eingetragen habe (zu testzwecken). Also ist es nicht selbstverständlich das der Anwendungspfad vorangestellt sein muss (in meinem Fall).

diese Varianten haben nicht funktioniert! Wobei die folgende lt. Angaben von MSDN genauso hätte funktionieren müssen.
CreateProcess(PChar(GetCurrentDir+'\7za.exe), PChar(e -o"'+TempDownloadDir+IP+'" "'+TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i]+'"'), nil, nil, FALSE, 0, nil, nil, si, pi); CreateProcess(PChar(GetCurrentDir+'\7za.exe), PChar(GetCurrentDir+'\7za.exe e -o"'+TempDownloadDir+IP+'" "'+TempDownloadDir+IP+'\'+Form1.ListBox3.Items[i]+'"'), nil, nil, FALSE, 0, nil, nil, si, pi);
Zitat:
Und was es bringen sollen, einen Vergleich, der nie wahr werden kann, einfach so in die Landschaft zu setzen, ohne dass das Resultat verwertet wird, ist mir auch schleierhaft.
Biste da im Fenster verutscht?
Wie auch immer schönes WE.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: ShellExecute Laufzeitproblem

  Alt 16. Jan 2009, 16:56
Er ist nicht im Fenster verrutscht.
Zitat:
WaitForSingleObject(pi.hProcess, infinite)=WAIT_TIMEOUT;
Was soll das bitte sein? Und weshalb prüfst Du nicht die Rückgabewerte der aufgerufenen Funktionen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:24 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