Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ShellExecute() mit Parameter für Adobe klappt nicht (https://www.delphipraxis.net/142677-shellexecute-mit-parameter-fuer-adobe-klappt-nicht.html)

juergen 1. Nov 2009 14:41


ShellExecute() mit Parameter für Adobe klappt nicht
 
Hallo zusammen,

per Doppelklick auf ein Listbox.Item öffne ich die ausgewählte Datei mit Adobe
(Listbox.Item=Dateiname; in einer Stringlist ist dann der komplette Pfad+Dateiname)
Soweit kein Problem.
Nun möchte ich Adobe noch einen Parameter übergeben (Adobe-Parameter).
(über "search" soll Adobe mit dem Suchfenster geöffnet werden und alle gefundenen Wörter angemakert haben...)

Eine Parameterübergabe bietet ShellExecute ja an.
Ich bekomme es aber leider nicht hin und ich weiß nicht warum. :gruebel:

Nachfolgend eine meiner vielen Varianten:
(ohne /A hatte ich auch schon probiert)
Delphi-Quellcode:
var
  my_h: THandle;
  Searchstring: string;
begin
  Searchstring := Edit2.Text;
  my_h := ShellExecute(0, 'open', PChar('"' + (Listbox_Form.My_StringList_PfadUndDatei[gi_helpindex]) + '"'),
    PChar('/A search="' + (Searchstring) + '"'), nil, SW_SHOWNORMAL);
  if my_h <= 32 then
    ShowMessage(SysErrorMessage(my_h));
end;
Adobe öffnet die ausgewählte Datei "ganz normal" ohne das Suchfenster, bzw. auch ohne Markerung der gefundenen Wörter...(als ob der Parameter gar nicht erkannt wird)

Erkennt hier jemand das Problem?

Vielen Dank schon mal vorab!

mkinzler 1. Nov 2009 14:43

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Und wenn du statt die Datei den Reader aufrufst und die datei als Parameter?

SirThornberry 1. Nov 2009 15:04

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Da dein dritter Parameter vermutlich kein ausführbares Programm ist werden die Parameter ignoriert. Ist auch logisch denn dein dritter Parameter ist ja bereits der Parameter für das dazu gehörige ausführbare Programm.

Bernhard Geyer 1. Nov 2009 16:46

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Könnte mit 3 Gründe vorstellen:

1, Acrobat 9? Menu "Bearbeiten\Voreinstellungen" -> Bereich "Suchen", Checkbox "Suchen nach Markierungen von externen Markierungsservern aktivieren"

2, Diese Funktion wird nicht beim Reader unterstützt

3, Es schlägt einer der üblichen Acrobat-Fehler zu so das dieses Feature nicht mehr funktioniert.

juergen 1. Nov 2009 18:10

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Hallo zusammen,

danke schon mal für die Antworten!
Ich habe inzw. einiges weiter probiert.
Fakt ist, wenn ich eine PDF-Datei über eine Verknüpfung mit dem Parameter starte, funktioniert es! :wall:
z.B.:
"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /A "search=sql" "D:\Test.pdf"

Jetzt habe ich mit ShellExecute() und seinen ganzen Parametern schon einiges probiert. Leider ohne Erfolg.
Ich habe Markus sein Vorschlag aus Post #2 probiert, Jens sein Vorschlag aus Post #3 hoffentlich richtig verstanden (lt. OH -> ...If lpFile specifies a document file, lpParameters should be NULL...)
Ich habe es so verstanden, dass ich den 4. Parameter (lpParameters) von ShellExecute() nicht verwenden kann, da in meinem 3. Parameter lpFile dann "D:\Test.PDF" steht.

Den notwendigen Startparameter /A "search=mein_Suchstring" bekomme ich mit ShellExecute einfach nicht übergeben, so dass der Adobe-Reader das PDF-File auch richtig öffnen würde.

Hat hier noch jemand einen Vorschlag?

Resignierende Grüße...

DeddyH 1. Nov 2009 18:13

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Wie wäre es so?
Delphi-Quellcode:
ShellExecute(0,'open','C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe','/A "search=sql" "D:\Test.pdf"',nil,SW_SHOW);

juergen 1. Nov 2009 20:05

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
@DeddyH,

ich hätte geschworen dass ich es genauso probiert hatte. :mrgreen:
:thumb: Vielen Dank, das war's auf jeden Fall und somit hatte Markus im Post 2 es schon richtig dargestellt, nur ich hatte es dann wohl falsch umgesetzt.
Was mich etwas stört ist die direkte Pfadangabe vom Reader. Werde wohl wegen den verschiedenen Versionen die Registry dann auslesen müssen.

Edit:
Leider findet der Adobe Reader auch nur Suchergebnisse, wenn diese exakt mit dem Suchparameter übereinstimmen...
Z.B. SQL wird gefunden, SQ aber nicht.

Nochmals Danke und einen schönen Sonntag Abend noch!

Andreas L. 1. Nov 2009 20:24

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Zitat:

Zitat von juergen
Werde wohl wegen den verschiedenen Versionen die Registry dann auslesen müssen.

Der 9er ist hier zu finden: HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Acrobat Reader\9.0\InstallPath => (Standard-Wert)
Ich denke mal das sich ältere und neuere Versionen ebefalls unter HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Acrobat Reader\ eintragen. Einfach alle Unterschlüssel auslesen und die neuste Version verwenden.

Zitat:

Zitat von juergen

Leider findet der Adobe Reader auch nur Suchergebnisse, wenn diese exakt mit dem Suchparameter übereinstimmen...
Z.B. SQL wird gefunden, SQ aber nicht.

Vielleicht gehts mit einer WildCard z. B. SQ*

SirThornberry 1. Nov 2009 20:26

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
@Andreas: ich denke die Registrypfade fest rein zu knoten ist der falsche weg. Besser empfände ich es aufzulösen mit welchem Programm die Endung .pdf geöffnet wird.

Andreas L. 1. Nov 2009 20:39

Re: ShellExecute() mit Parameter für Adobe klappt nicht
 
Zitat:

Zitat von SirThornberry
@Andreas: ich denke die Registrypfade fest rein zu knoten ist der falsche weg. Besser empfände ich es aufzulösen mit welchem Programm die Endung .pdf geöffnet wird.

Wenn dann aber ein alternativer PDF-Reader mit .pdf verknüpft ist, werden die Parameter höchst wahrscheinlich nicht mehr funktionieren, das Programm öffnet sich aber trotzdem und ShellExecute gibt dann keinen Fehler-Code zurück sondern meint es wäre alles ok.

Ich würde den oben geschriebenen Schlüssel verwenden, ist kein Adobe Reader installiert, versuche ich es mit der Zuordnung unter HKEY_CLASSES_ROOT und lasse die Parameter weg, finde ich in Classes auch nichts, gebe ich eine entsprechende Meldung aus oder lasse den User sein PDF-Programm selbst auswählen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Seite 1 von 2  1 2      

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