![]() |
AW: Shellexecute richtig anwenden/übersetzen
Hi zusammen
Die Prozedur von Kodezwerg macht keinerlei Probleme - dafür sorgt meine:
Delphi-Quellcode:
Die Prozedure wird aufgerufen, wenn der Scanvorgang beendet ist, das gescannte Bild in Jpeg verwandelt und gespeichert ist. Von daher kommt der Wert von FFilename.
procedure TPDFCreatorFrame.ImageToPDF;
var job : IPrintjob; jobinfo : IPrintJobInfo; PDFQueue : TQueue; LOutput : IOutputFiles; begin PDFQueue := TQueue.Create(Self); try Showmessage('procedure TPDFCreatorFrame.ImageToPDF: Der Wert von FFilename ist: '+' "'+ FFilename + '" '); // FFilename ist: 'C:\PDFOfficerAppdata\PdfOfficerData\ScannedPic.jpeg'; PDFQueue.Initialize; // Initializing PDFCreator queue... ExecuteShell('RUNDLL32.exe', 'PRINTUI.DLL,PrintUIEntry /k /n "PDFCreator"', True); Showmessage('Setting up target path to: ' + Self.FFileName); Showmessage('Printing one windows test page...'); if not PDFQueue.WaitForJob(10)then Showmessage('The print job did not reach the queue within ' + IntToStr(10) + ' seconds') else Showmessage('Currently there are ' + IntToStr(PDFQueue.Count) + ' job(s) in the queue'); Showmessage('Getting job instance'); job := PDFQueue.NextJob; jobinfo := job.PrintJobInfo; ShowMessage('jobinfo.PrintJobName := ' + jobinfo.PrintJobName); //<== Printjobname ist 'Testseite' job.SetProfileByGuid('DefaultGuid'); Showmessage('Converting under \"DefaultGuid\" conversion profile'); job.ConvertTo(FFileName); if not job.IsSuccessful and not job.IsFinished then Showmessage('Could not convert the file: ' + FFileName) else Showmessage('Job finished successfully'); PDFQueue.ReleaseCom; finally PDFQueue.Free; end; end; Stelle ichnur auf diesen Code ab, muss ich annehmen, dass PDFQueue bei der Initialisierung den Pfad erhält. Laut dem Beispieöcode ist das aber nicht der Fall:
Delphi-Quellcode:
Gruss
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
var objShell = new ActiveXObject("Shell.Application"); var Scriptname = objFSO.GetFileName(WScript.ScriptFullname); if (WScript.Version < 5.6) { WScript.Echo("You need the \"Windows Scripting Host version 5.6\" or greater!"); WScript.Quit(); } try { var PDFCreatorQueue = new ActiveXObject("PDFCreator.JobQueue"); WScript.Echo("Initializing PDFCreator queue..."); PDFCreatorQueue.Initialize(); { hier ermittelt das Script den Pfad und übergibt den Pfad an das Objekt objFSO - gibts bei mir nicht} var fullPath = objFSO.GetParentFolderName(WScript.ScriptFullname) + "\\TestPage.jpg"; // Hier der Pfad zur Testseite WScript.Echo("Setting up target path to: " + fullPath); {Allerdings steht hier der Pfad erstmal in der Variablen "fullpath". Wenn ich das richtig lese (und verstanden habe),führt Shellexecute in den folgenden Zeilen} {Rundll32 aus, und diese PrintUI.DLL unter Angabe des Einsprungpunktes - von der Übergabe eines Dateinamens seh ich hier nichts} WScript.Echo("Printing windows test page..."); objShell.ShellExecute("RUNDLL32.exe", "PRINTUI.DLL,PrintUIEntry /k /n \"PDFCreator\"", "", "open", 1); Delbor |
AW: Shellexecute richtig anwenden/übersetzen
moin, gibts zufällig "PDFQueue" <<-- darüber mehr informationen?
zeige mal bitte was "TQueue" ist. |
AW: Shellexecute richtig anwenden/übersetzen
Hi Kodezwerg
Guten Morgen, Kodezwerg! So ist die Definition in der TLB:
Delphi-Quellcode:
Und ddas sind die Definitionen der Wrapperkomponenten im Frame:
IQueue = dispinterface
['{3803F46C-F5AA-4B86-8B9C-6EFFAC9CDCFA}'] procedure Initialize; dispid 1610743808; function WaitForJob(timeOut: Integer): WordBool; dispid 1610743809; function WaitForJobs(jobCount: Integer; timeOut: Integer): WordBool; dispid 1610743810; property Count: Integer readonly dispid 1610743811; property NextJob: IPrintJob readonly dispid 1610743812; function GetJobByIndex(jobIndex: Integer): IPrintJob; dispid 1610743813; procedure MergeJobs(const job1: IPrintJob; const job2: IPrintJob); dispid 1610743814; procedure MergeAllJobs; dispid 1610743815; procedure Clear; dispid 1610743816; procedure DeleteJob(index: Integer); dispid 1610743817; procedure ReleaseCom; dispid 1610743818; end;
Delphi-Quellcode:
Gruss
type
TPDFCreatorFrame = class(TFrame) PdfCreatorObj1: TPdfCreatorObj; OutputFiles1: TOutputFiles; Printers1: TPrinters; PrintJob1: TPrintJob; PrintJobInfo1: TPrintJobInfo; Queue1: TQueue; Delbor |
AW: Shellexecute richtig anwenden/übersetzen
Code:
das ist was das script macht, das ist was wir da mit shellexecuteex auch machen.
ShellExecute method
Run a script or application in the Windows Shell. Syntax .ShellExecute "application", "parameters", "dir", "verb", window (um ganz genau zu seien musst du lpDirectory auf := '' setzen) also das script funktioniert und erzeugt tatsächlich eine datei, ja? ich bin gerade mehrere "Scripting.FileSystemObject" definitionen hinterher und da wirds oftmals im execute part eingebettet was hier nicht der fall ist. ![]() per definition macht "/k = prints a test page on a printer." und "/n[name] = Specifies the printer name." |
AW: Shellexecute richtig anwenden/übersetzen
Hi Kodezwerg
Danke für deinen Link! Da ich meinen Englischkenntnissen immer noch nicht so ganz traue, hab ich mir angewöhnt, solche Seiten per Google zu übersetzen - allerdings klappt das Übersetzenlassen kompletter Websites nicht immer. Und so wird das dannoft zur Sisiphusarbeit, und da brauchts dannöfters mal Pause. Und die bringen doch schon mal gute Erkenntnisse: Zitat:
Zitat:
Aber das hat soeben nicht geklappt. Leider hab ich im entscheidenden Moment zuwenig aufgepasst, aber wenn ich das richtig mitbekommen habe, krachte es hier:
Delphi-Quellcode:
Die Meldung: "Die Argumente sind ungültig"
lpDirectory := PChar(ExtractFilePath(Executable)); // <<-- diese zeile könnte probleme verursachen, eventuell anpassen (!)
Gruss Delbor |
AW: Shellexecute richtig anwenden/übersetzen
Zitat:
Zitat:
Gruss Delbor |
AW: Shellexecute richtig anwenden/übersetzen
Delphi-Quellcode:
da der das ganze anscheinend als objekt abarbeitet eventuell dem das irgendwie mittleilen?
procedure TPDFCreatorFrame.ImageToPDF;
var job : IPrintjob; jobinfo : IPrintJobInfo; PDFQueue : TQueue; LOutput : IOutputFiles; begin PDFQueue := TQueue.Create(Self); try Showmessage('procedure TPDFCreatorFrame.ImageToPDF: Der Wert von FFilename ist: '+' "'+ FFilename + '" '); // FFilename ist: 'C:\PDFOfficerAppdata\PdfOfficerData\ScannedPic.jpeg'; LOutput := IOutputFiles.Create(FFilename); // oder sowas ? PDFQueue.Initialize; // Initializing PDFCreator queue... ich bin da echt nur am raten da ich das nicht habe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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