![]() |
AW: Ärger mit Shellexecute
Zitat:
Diese Methodik funktioniert zu 100% immer zuverlässig solange das "ExecFile" kein "Wrapper" für andere Executables ist (Programm A lädt beim start Programm B oder Fenster wird in DLL erzeugt... etc) bzw solange die ProcessID ein Fenster besitzt. Wenn Du noch Fragen dazu haben solltest, ich hoffe ich kann Dir weiterhelfen. |
AW: Ärger mit Shellexecute
Muss es unbedingt Ashampo zur Anzeige von PDF-Dateien sein?
Wenn nein: Bei mir ist seit 'ner Weile ![]() Zuerst wird geprüft, ob Sumatra vorhanden ist, wenn ja, wird es genutzt. Sollte es nicht gefunden werden, wird es mit dem AcrobatReader versucht. Den Teil kann man aber auch entfernen, wenn die Nutzung vom Acrobat ausgeschlossen werden soll. Da ich nur Delphi 7 habe, wirst Du im folgenden Quelltext vermutlich einige Anpassungen vornehmen müssen. Zuerst die DFM:
Delphi-Quellcode:
und dann die dazugehörige Unit:
object fmPDFVorschau: TfmPDFVorschau
Left = 476 Top = 60 Width = 249 Height = 138 Caption = 'PDF-Vorschau' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] KeyPreview = True OldCreateOrder = False OnCreate = FormCreate OnKeyDown = FormKeyDown OnResize = FormResize OnShow = FormResize PixelsPerInch = 96 TextHeight = 13 object pnPDF: TPanel Left = 0 Top = 0 Width = 241 Height = 111 Align = alClient BevelOuter = bvNone TabOrder = 0 end end
Delphi-Quellcode:
unit uPDFVorschau;
interface uses AcroPDFLib_TLB, Forms, Classes, Controls, ExtCtrls; type TfmPDFVorschau = class(TForm) pnPDF: TPanel; procedure FormResize(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); protected procedure CreateParams(var Params: TCreateParams) ; override; private { Private-Deklarationen } fAcroPDF : TAcroPDF; fPDFFile : String; fUseSumatraPDF : Boolean; public { Public-Deklarationen } procedure LoadPDF(APdfFile : String); procedure LoadArcoPDF; procedure LoadSumatraPdF; property PDFFile : String read fPDFFile; property UseSumatraPDF : Boolean read fUseSumatraPDF write fUseSumatraPDF default false; end; var fmPDFVorschau: TfmPDFVorschau; implementation {$R *.dfm} uses Windows, SysUtils, ShellAPI; const csCaption = 'PDF-Vorschau - %s'; // Eigenen Button in die Taskbar machen, damit man per STRG+TAB zwischen den // Fenstern wechseln kann. Der eingebettet Acrobat nimmt sich leider das Recht // heraus alle Tastaturkürzel zu ignorieren, wenn sie vom Programm sind und // sich selbst so in den Focus zu setzen, dass man nicht per Mausklick ... // problemlos mit dem Programm arbeiten kann. procedure TfmPDFVorschau.CreateParams(var Params: TCreateParams); begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := 0; end; procedure TfmPDFVorschau.FormCreate(Sender: TObject); begin // Das muss ggfls. angepasst werden. fUseSumatraPDF := FileExists('.\Lib\SumatraPDF.exe'); end; procedure TfmPDFVorschau.FormResize(Sender: TObject); begin if not fUseSumatraPDF then begin if Assigned(fAcroPDF) then begin if fAcroPDF.Visible then begin fAcroPDF.LoadFile(fPDFFile); fAcroPDF.Update; end; end; end else if Assigned(pnPDF) then begin pnPDF.Align := alTop; Application.ProcessMessages; pnPDF.Align := alClient; end; end; procedure TfmPDFVorschau.LoadPDF(APDFFile : String); begin fPDFFile := APDFFile; Caption := Format(csCaption,[ChangeFileExt(ExtractFileName(fPDFFile),'')]); case fUseSumatraPDF of true : LoadSumatraPDF; false : LoadArcoPDF; end; end; procedure TfmPDFVorschau.LoadArcoPDF; begin Screen.Cursor := crHourGlass; if Assigned(pnPDF) then pnPDF.Visible := False; if not Assigned(fAcroPDF) then begin fAcroPDF := TAcroPDF.Create(Self); fAcroPDF.Parent := Self; fAcroPDF.Left := 0; fAcroPDF.Top := 0; fAcroPDF.Width := Width; fAcroPDF.Height := Height; fAcroPDF.TabStop := False; fAcroPDF.Align := alClient; fAcroPDF.ParentShowHint := False; fAcroPDF.ShowHint := True; fAcroPDF.TabOrder := 0; fAcroPDF.Visible := True; end; fAcroPDF.src := fPDFFile; fAcroPDF.LoadFile(fPDFFile); Screen.Cursor := crDefault; Show; end; procedure TfmPDFVorschau.LoadSumatraPDF; var sParam : String; begin Screen.Cursor := crHourGlass; if Assigned(fAcroPDF) then fAcroPDF.Visible := False; // Caption := Format(csCaption,[fPDFFile]); // -reuse-instance funktioniert nur, wenn immer die gleiche Datei geladen wird, // andernfalls entsteht für jede PDF-Datei eine neue Instanz von SumatraPDF. // Die Instanzen von SumatraPDF werden beendet, wenn man das Programm beendet. // Bei diesem Vorgehen entsteht aber nur eine Instanz von SumatraPDF. pnPDF.Free; Sleep(1000); // Warten, bis sich SumatraPDF beendet hat. pnPDF := TPanel.Create(Self); pnPDF.Parent := Self; pnPDF.Left := 0; pnPDF.Top := 0; pnPDF.Width := Width; pnPDF.Height := Height; pnPDF.BevelOuter := bvNone; pnPDF.TabOrder := 1; pnPDF.Align := alClient; pnPDF.Visible := True; sParam := Format('-lang de -reuse-instance -plugin %d "%s"',[pnPDF.Handle,fPDFFile]); ShellExecute(Self.Handle,'open',PAnsiChar('SumatraPDF.exe'),PAnsiChar(sParam),'',sw_normal); Screen.Cursor := crDefault; Show; end; procedure TfmPDFVorschau.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of 27 : Close; end; end; end. |
AW: Ärger mit Shellexecute
Zitat:
Das ist denke ich ein separat aufrufbares Programm, welches einem alle handles usw. anzeigt. |
AW: Ärger mit Shellexecute
Einfach auf den Link Klicken, dann sieht man, dass das ein Programm des DP-Mitglieds toms ist ;-)
|
AW: Ärger mit Shellexecute
Hi zusammen
@ Delphi.Narium: Nebst einem kostenpflichtigen Programm, das ich mir schon vor Jahr(-zehnt)en zugelegt habe, habe ich mir noch Ashampo PDF Free zugelegt, womit ich PDFs ausfüllen und sie mit beliebigen, auch benutzerdefinierten Stempeln versehen kann - und die Internethilfe ist in normalem Deutsch ohne jegliches Fachchinesisch abgehalten (..). Das ist für mich der Hauptgrund, warum ich vorerst bei Ashompoo bleiben will. Für mein Programm hingegen muss es völlig gleichgültig sein, mit welchen fremden Programmen es arbeitet. @Turbomagic: Zitat:
Gruss Delbor |
AW: Ärger mit Shellexecute
Der Download ist ein Zip-Archiv, da wird nichts installiert. Du musst also den Ordner öffnen, in den Du entpackt hast und dort die WinSpy.exe starten.
|
AW: Ärger mit Shellexecute
|
AW: Ärger mit Shellexecute
Hier ist eine deutlich jüngere Version von Winspy aus dem Jahr 2018:
![]() VirusTotal ![]() Bestimmt nur ein Fehlalarm? Gruß, Andreas |
AW: Ärger mit Shellexecute
Liste der Anhänge anzeigen (Anzahl: 4)
Hi zusammen
Zitat:
Anhang 55129 Nach dem entpacken und "installieren": Anhang 55130 und der Taskmanager Anhang 55131 Wie ich den wieder anzeige, ist mir ein Rätsel. Auch das menü des Taskmanagers weiss es nicht: Anhang 55132 Zumindest, wenn ich richtig gelesen habe. Was mache ich falsch? @Andreas13 Habe deinen Beitag eben jetzt gesehen. Danke! Allerdings von wegen Viruse - ich arbeite mit dem windowseigenen Defender. Gruss Delbor |
AW: Ärger mit Shellexecute
Nutze lieber den Window Detective, der kann noch ein bisschen mehr und kann wahlweise per Installer heruntergeladen werden:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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 by Thomas Breitkreuz