AGB  ·  Datenschutz  ·  Impressum  







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

Ärger mit Shellexecute

Ein Thema von Delbor · begonnen am 29. Mai 2022 · letzter Beitrag vom 4. Jun 2022
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Ärger mit Shellexecute

  Alt 1. Jun 2022, 16:00
@ 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.
Der Unterschied ist, Delphi.Narium's varianten sind darauf ausgelegt eingebettet zu werden (sie haben anscheinend Child-Windows), dein Wunsch-Programm anscheinend nicht (bzw ich habs nicht zum testen, lese nicht dessen webseite etc....)

Idr. muss man per "AttachThreadInput()" die beiden seperaten prozesse vereinen, aber nichts desto trotz, generisch betrachtet ist es das schlimmste an was man überhaupt denken kann, da du keine Ahnung von den inneren Message-Ketten hast, die bei solch einem vorhaben schlichtweg zerschossen werden könnten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Ärger mit Shellexecute

  Alt 1. Jun 2022, 17:26
Hi zusammen

Der Unterschied ist, Delphi.Narium's varianten sind darauf ausgelegt eingebettet zu werden (sie haben anscheinend Child-Windows), dein Wunsch-Programm anscheinend nicht (bzw ich habs nicht zum testen, lese nicht dessen webseite etc....)

Idr. muss man per "AttachThreadInput()" die beiden seperaten prozesse vereinen, aber nichts desto trotz, generisch betrachtet ist es das schlimmste an was man überhaupt denken kann, da du keine Ahnung von den inneren Message-Ketten hast, die bei solch einem vorhaben schlichtweg zerschossen werden könnten.
Dein erster Abschnitt ist hochinteressant - Absicht ist oder wäre, ein bestimmtes PdF anzuzeigen und nach dessen Inhalt einen Datenbankeintrag zu generieren. Das funktioniert soweit, als dass ich Ashampoo und das PDF starten kann. Allerdings nicht als dem Tabsheet untergeaordnet, sondern solo über meinem Programm liegend. Positiv: die beiden Programme sind beide bearbeitbar. Negativ ist: Wenn ich Asampoo instinktiv über die rechte obere Ecke schliesse, friert mein Programm ein.
Ich werde noch einen Versuch mit Createprozess und warten auf das Ende probieren - aber ich fürchte, dass ich dann entweder das eine oder andere Programm bearbeiten kann, nicht jedoch beide.

Dein zweiter Abschnitt, und besonders dein letzter Satz, habensaber in sich!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Ärger mit Shellexecute

  Alt 1. Jun 2022, 17:49
Wenn ich Asampoo instinktiv über die rechte obere Ecke schliesse, friert mein Programm ein.
Das könnte ich damit gemeint haben das Message-Ketten kaputt gehen. (abhilfe könnte schaffen indem du das "X" entfernst. ob das dann zielführend ist bezweifle ich da nun dein eigenes programm schon einen schaden genommen hat)

Dein zweiter Abschnitt, und besonders dein letzter Satz, habensaber in sich!
Ich bin nur ehrlich.

Nebenbei, "CreateProcess()" nutze ich nur um sofort die 100% stimmende ProcessID zu erhalten um dann wiederum das WindowHandle zu ermitteln. (Windows arbeitet nun mal intern nur mit ProcessIDs und Handles)
Da ein Prozess mehrfach geladen werden kann sind andere Methoden zur Ermittlung eher... schwammig
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Ärger mit Shellexecute

  Alt 1. Jun 2022, 20:27
Bei einem externen Programm mußt du das richtige Fenster finden und dort kannst du den Parant auf etwas in deinem Programm (Form/Panel/...) setzen.



Vom Acrobat-Reader gibt es noch eine ActiveX-Komponente, die man in sein Programm einbinden kann.

Aber offiziell wird sie nicht mehr für "fremde" Programme entwickelt, sondern nur für die Einfondung in die bekanntestens Browser. (sagt der Hersteller)
Und außerdem ändern die Arschlöcher andauern das Verhalten, was dann im eigenen Programm keinen Spaß macht und unsere Kunden nervt.

Daher nutzen wir aktuell die Komponente von DevExpress, um PDFs im Programm anzuzeigen. (die kann nicht alles und ist auch etwas langsamer, aber daran wird weiter gearbeitet)
Diese Komponente ist nun im Programm und bleibt somit immer gleich. Versuch mal einem Nutzer deines Programms zu erklären, dass es nicht deine Schuld ist, wenn es ein Update bei Acrobat gab und es in "deinem" Programm dann nicht mehr so geht, wie es soll.


Selbst Schuld, dass Acrobat nun immer mehr an Bedeutung verliert, dazumal inzwischen alle großen Browser selber was für PDF mitbringen.
Im Prinzip kann man somit nun auch im Delphi z.B. den TWebBrowser nutzen und darin dann die PDF anzeigen und sei es, indem man selbst eine Version von z.B. Bei Google suchenPDF.js mitbringt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Jun 2022 um 20:31 Uhr)
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Ärger mit Shellexecute

  Alt 4. Jun 2022, 14:37
Hi zusammen

Mein dringlichstes 'Problem', nämlich die Anzeige eines fremden Programmws in meinem, habe ich nun 'gelöst'. Bei MausDown in meinem TAlexOpenfileFrame:
Delphi-Quellcode:
    if Button =(mbLeft) then
    begin
      LSelectItem := PNameRec(AnItem.Data)^.RealName;
      ext := ExtractFileExt(LSelectItem);
      if ext = '.pdfthen
      begin
        ShellExecAndWait('F:\Externer Programmordner\Ashampoo\Ashampoo PDF Free\Ashampoo PDF.exe', LSelectItem, SW_Normal );

      end;
    end;
und
Delphi-Quellcode:
procedure TAlexOpenfileFrame.ShellExecAndWait(dateiname, Parameter: string; ShowHide: Integer); // benötigt ShellAPI in Uses
var executeInfo: TShellExecuteInfo;
dw: DWORD;
begin
   FillChar(executeInfo, SizeOf(executeInfo), 0);
   with executeInfo do
      begin
         cbSize := SizeOf(executeInfo);
         fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
         Wnd := GetActiveWindow();
         executeInfo.lpVerb := 'open';
         executeInfo.lpParameters := PChar(Parameter);
         lpFile := PChar(dateiname);
         nShow := ShowHide;
      end;
      if ShellExecuteEx(@executeInfo) then dw := executeInfo.HProcess
         else
            begin
               ShowMessage('Fehler: ' + SysErrorMessage(GetLastError));
               exit;
            end;
      while WaitForSingleObject(executeInfo.hProcess, 50) <> WAIT_OBJECT_0 do
      Application.ProcessMessages;
      CloseHandle(dw);
end;
Der Code stammt bis auf meine Komponenten von hier, bzw hier.
Na ja, so ähnlich zumindest. Ich bin so frei und erspare mir den Versuch des Abgleichs mit all den in diesem Forum gefundenen wohl mehreren dutzend Codeschnipsel.
Das vorerst wichtigste: Ich kann abwechselnd mit beiden Programmen arbeiten.


Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 11:23 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