Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit Adobe Reader (https://www.delphipraxis.net/143410-probleme-mit-adobe-reader.html)

gangs-taas 15. Nov 2009 14:32


Probleme mit Adobe Reader
 
hey,
ich möchte mit einem Programm die seitenzahl von dem Reader ändern.
Ja klingt irg. sinnlos ist aber nur ein teil eines PRogrammes...

so ich hab mir gedacht:
-ich such das Handle des Feldes wo man die Seitenzahl eingibt
-ich lösch die Zahl aus diesem Editfeld
-Ich schreib eine neue Zahl hinein
-Ich schreib ein "enter" hinein.

umgesetzt hab ichdas so :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
Handle : THandle;

function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND;
var
  i: Word;
  hChild: HWND;
begin
  hChild := 0;
  Result := 0;
  Dec(ChildNr);
  for i := 0 to ChildNr do
  begin
    hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil);
    if hChild = 0 then
      Break;
    Result := hChild;
  end;
end;
function Handle_suchen_Edit : THandle ;
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('AcrobatSDIWindow',nil);
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'AVL_AVView', nil);
    wndChild := FindWindowEx2(wndChild,'AVL_AVView', 10);
    wndChild := FindWindowEx2(wndChild,'Edit', 3);
    if wndChild <> 0 then
    begin
      Result := wndChild ;
    end
    else
      Result := 0;
  end
  else
    Result := 0;
end;

begin
  Handle := Handle_suchen_Edit ;
  if Handle <> 0 then
  SendMEssage(Handle, VK_Clear,0,0);
  SendMessage(Handle, WM_CHAR, Ord(55), 0);
  SendMEssage(Handle, VK_Return,0,0);
end;
soo es funktioniert auch alles bis auf die letzte Zeile ...
wisst ihr wieso ich da kein Return rein senden kann ?!
also er trägt in das edit-feld die Seitenzahl ein, die Ich will aber er ghet nicht zu dieser hin...
aber wenn ich von hand in das Feld klick und "enter" drück geht der dahin ...

wisst ihr woran das liegen könnte ?!

lg :)

Luckie 15. Nov 2009 14:33

Re: Probleme mit Adobe Reader
 
Hat das Eingabefenster denn den Focus?

toms 15. Nov 2009 14:39

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von Luckie
Hat das Eingabefenster denn den Focus?

Braucht es nicht zwingend.

Delphi-Quellcode:
  SendMessage(Handle, VK_CLEAR, 0, 0);
  SendMessage(Handle, WM_CHAR, Ord(55), 0);
  PostMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
  PostMessage(Handle, WM_KEYUP, VK_RETURN, 0);

patti 15. Nov 2009 14:40

Re: Probleme mit Adobe Reader
 
Hat zwar nix mit dem Problem zu tun, aber mach mal noch ein begin-end rein:

Delphi-Quellcode:
begin
  Handle := Handle_suchen_Edit ;
  if Handle &lt;&gt; 0 then
  begin // <-- hier
     SendMEssage(Handle, VK_Clear,0,0);
     SendMessage(Handle, WM_CHAR, Ord(55), 0);
     SendMEssage(Handle, VK_Return,0,0);
  end; // <-- und hier
end;
MFG
Patti

toms 15. Nov 2009 14:50

Re: Probleme mit Adobe Reader
 
Zudem kannst du die Handle_suchen_Edit Funktion etwas vereinfachen.

Delphi-Quellcode:
  function Handle_suchen_Edit: THandle;
  var
    wndMain, wndChild: HWND;
  begin
    Result := 0;
    wndMain := FindWindow('AcrobatSDIWindow', nil);
    if wndMain <> 0 then
    begin
      wndChild := FindWindowEx(wndMain, 0, 'AVL_AVView', nil);
      wndChild := FindWindowEx2(wndChild, 'AVL_AVView', 10);
      wndChild := FindWindowEx2(wndChild, 'Edit', 3);
      Result := wndChild;
    end;
  end;

gangs-taas 15. Nov 2009 14:52

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von toms
Zudem kannst du die Handle_suchen_Edit Funktion etwas vereinfachen.

Delphi-Quellcode:
  function Handle_suchen_Edit: THandle;
  var
    wndMain, wndChild: HWND;
  begin
    Result := 0;
    wndMain := FindWindow('AcrobatSDIWindow', nil);
    if wndMain <> 0 then
    begin
      wndChild := FindWindowEx(wndMain, 0, 'AVL_AVView', nil);
      wndChild := FindWindowEx2(wndChild, 'AVL_AVView', 10);
      wndChild := FindWindowEx2(wndChild, 'Edit', 3);
      Result := wndChild;
    end;
  end;

den ocde hatte ich von "winspy" :)
dachte ich nehm ich einfach

danke probier ich mal :)


danke es funktioniert jetzt ...
das handle suchen hab ich aber so gelassen :)
danke

gangs-taas 15. Nov 2009 15:45

Re: Probleme mit Adobe Reader
 
hey
könnt ihr euch das nochmal angucken ? :)
ich hab das jetzt so gelöst :
Delphi-Quellcode:
begin
  Handle := Handle_suchen_Edit ;
  if Handle <> 0 then
  begin
    for I := 49 to 48 + StrToInt(E_SZ.Text) do
    begin
      if (i > 57) then
      begin
        ZString := IntToStr(i-48);
        SendMEssage(Handle, VK_Clear,0,0);
        for y := 1 to Length(ZString) do
        begin
          ZZahl := StrToInt(ZString[y]);
          SendMessage(Handle, WM_CHAR, Ord(ZZahl+48), 0);
        end;
        PostMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
        PostMessage(Handle, WM_KEYUP, VK_RETURN, 0);
      end
      else
      begin
        SendMEssage(Handle, VK_Clear,0,0);
        SendMessage(Handle, WM_CHAR, Ord(i), 0);
        PostMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
        PostMessage(Handle, WM_KEYUP, VK_RETURN, 0);
      end;
    end;
  end;
end;
aber wenn ich das programm nicht schritt-für-schritt mit F7 durchstepp, sondern einfach durchlaufen lasse gibt mir der Reader die MEldung : 'In dem dokiment ist keine seite mit der Zahl "" vorhanden'

aber ich versteh nicht wo ich denn eine Zahl, die es nicht gibt an das dokument sende ?
vorallem wenn ich jede Zeile durchgeh kommt der fehler irg. nicht ....

toms 15. Nov 2009 17:09

Re: Probleme mit Adobe Reader
 
Frage: Warum nimmst du nicht das Acrobat ActiveX Control (TAcroPDF)? Dann musst du nicht mich Sendmessage etc. rumschlagen.

Delphi-Quellcode:
 
AcroPDF1.LoadFile('Irgendeinepdf.pdf');
AcroPDF1.gotoNextPage;
etc...

gangs-taas 15. Nov 2009 17:39

Re: Probleme mit Adobe Reader
 
aber die Datei, die ich bearbeiten will, ist irg. speziell verschlüsselt => ich kann die z.b. nicht mit anderen Programmen aufmachen ...
d.h. ich muss den Reader ändern wenn ich ne seite blättern will ...

gangs-taas 15. Nov 2009 19:02

Re: Probleme mit Adobe Reader
 
habt ihr denn ne idee woran das liegen könnte ?

ULIK 16. Nov 2009 04:58

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von gangs-taas
aber die Datei, die ich bearbeiten will, ist irg. speziell verschlüsselt => ich kann die z.b. nicht mit anderen Programmen aufmachen ...
d.h. ich muss den Reader ändern wenn ich ne seite blättern will ...

Was heißt, Du kannst es nicht mit anderen Programmen aufmachen? Welche hast Du denn verwendet? Das einzige was mir grad so in den Sinn kommt, ist, daß das PDF spezielle Adobe DRM Module verwendet. Kannst Du das PDF mal posten? Ohne das kann man sonst nichts genaueres sagen.

Uli

RWarnecke 16. Nov 2009 06:18

Re: Probleme mit Adobe Reader
 
Das Acrobat ActiveX Control (TAcroPDF) benutzt als Grundlage den Acrobat Reader. Denn wenn dieser nicht installiert ist, funkioniert auch nicht das ActiveX Control.

gangs-taas 16. Nov 2009 15:44

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von ULIK
Zitat:

Zitat von gangs-taas
aber die Datei, die ich bearbeiten will, ist irg. speziell verschlüsselt => ich kann die z.b. nicht mit anderen Programmen aufmachen ...
d.h. ich muss den Reader ändern wenn ich ne seite blättern will ...

Was heißt, Du kannst es nicht mit anderen Programmen aufmachen? Welche hast Du denn verwendet? Das einzige was mir grad so in den Sinn kommt, ist, daß das PDF spezielle Adobe DRM Module verwendet. Kannst Du das PDF mal posten? Ohne das kann man sonst nichts genaueres sagen.

Uli

ja da ist nen schutz drauf nämlich : Adobe LiveCycle Rights Management


... habt ihr denn keine idee wo mein fehler sien könnte ?!

p80286 16. Nov 2009 17:05

Re: Probleme mit Adobe Reader
 
Soso,
da ist Adobe Lifecycle Rights Management verwendet worden und Du willst nur die Seitenzahlen ändern?

Wenn Du mit dem Reader nicht weiter kommst, versuch es doch Binär. PDF32000_2008[1].pdf ist dafür sehr empfehlenswert.

Gruß
K-H

gangs-taas 16. Nov 2009 18:33

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von p80286
Soso,
da ist Adobe Lifecycle Rights Management verwendet worden und Du willst nur die Seitenzahlen ändern?

Wenn Du mit dem Reader nicht weiter kommst, versuch es doch Binär. PDF32000_2008[1].pdf ist dafür sehr empfehlenswert.

Gruß
K-H


sorry ich bin einfach zu dämlich um zu verstehn was du mir sagen willst ...
also die pdf-datei sagt, nach dem was ich gelesen hab, im großen und ganzen nur was der reader bzw die pdf'S für funktionen haben oder ?!

und wie genau meinst du das mit binär ?


Edit :

und zu den Rechten, diese blöden Rights verbieten mir z.b. das Dokumtent zu drucken (bzw. es erlaubt mir eigl. nur 15 tage lang die datei zu lesen mehr nicht ...)

sx2008 16. Nov 2009 18:41

Re: Probleme mit Adobe Reader
 
Ich würde mal sagen: keine Chance!
Die PDF Daten sind garantiert verschlüsselt und mit Prüfsummen versehen.
Da kann nichts geändert werden.

gangs-taas 16. Nov 2009 19:07

Re: Probleme mit Adobe Reader
 
das will ich doch auch garnicht ändern...
ich kann sie doch (für 15 tage) angucken
und nun möchte ich den Reader so ändern, dass ich von einem Programm aus jede seite angucken kann die ich will ...

macht jertzt vllt nicht so viel sinn haber hat schon seinen hitnerganken, denn ich hier wohl nicht äußern darf weil ich sonst ärger krieg.

aber es geht ja nur darum, wieso er bei meinem code :
Delphi-Quellcode:
begin
  Handle := Handle_suchen_Edit ;
  if Handle <> 0 then
  begin
    for I := 49 to 48 + StrToInt(E_SZ.Text) do
    begin
      if (i > 57) then
      begin
        ZString := IntToStr(i-48);
        SendMEssage(Handle, VK_Clear,0,0);
        for y := 1 to Length(ZString) do
        begin
          ZZahl := StrToInt(ZString[y]);
          SendMessage(Handle, WM_CHAR, Ord(ZZahl+48), 0);
        end;
        PostMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
        PostMessage(Handle, WM_KEYUP, VK_RETURN, 0);
      end
      else
      begin
        SendMEssage(Handle, VK_Clear,0,0);
        SendMessage(Handle, WM_CHAR, Ord(i), 0);
        PostMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
        PostMessage(Handle, WM_KEYUP, VK_RETURN, 0);
      end;
    end;
  end;
end;
ne fehlermeldung rausgibt als würde er '0' eingeben oder garnichts und dann 'enter' drücken...
aber das passiert nicht wenn ich mein code durchsteppe (mit F7) und das versteh ich nicht ...
wisst ihr wodran das liegen könnte ?!
darum dreht sich ja meine frage

p80286 17. Nov 2009 10:44

Re: Probleme mit Adobe Reader
 
Zitat:

Zitat von gangs-taas
das will ich doch auch garnicht ändern...
ich kann sie doch (für 15 tage) angucken
und nun möchte ich den Reader so ändern, dass ich von einem Programm aus jede seite angucken kann die ich will ...

macht jertzt vllt nicht so viel sinn haber hat schon seinen hitnerganken, denn ich hier wohl nicht äußern darf weil ich sonst ärger krieg.

Dann nehmen wir mal an. daß Dich nur jugendliches Ungestüm antreibt, und Du Dir überhaupt nicht vorstellen kannst warum jemand seine PDF-Dokumente in irgendeiner Weise schützen sollte.


Zitat:

Zitat von gangs-taas
aber es geht ja nur darum, wieso er bei meinem code :
Delphi-Quellcode:
begin
  Handle := Handle_suchen_Edit ;
  if Handle <> 0 then
  begin
    for I := 49 to 48 + StrToInt(E_SZ.Text) do
    begin
      ...........
  end;
end;
ne fehlermeldung rausgibt als würde er '0' eingeben oder garnichts und dann 'enter' drücken...
aber das passiert nicht wenn ich mein code durchsteppe (mit F7) und das versteh ich nicht ...
wisst ihr wodran das liegen könnte ?!
darum dreht sich ja meine frage

Wenn ich jetzt wüßte wer mit "er" gemeint ist wäre eine Antwort natürlich einfacher. So vermute ich mal, daß in E_SZ.Text eine Wert steht (oder kein Wert?) der ein "0"-Verhalten provoziert.

Zu binär ein Artikel in der wikipedia

Gruß
K-H

gangs-taas 17. Nov 2009 12:16

Re: Probleme mit Adobe Reader
 
ich versteh nicht was mir das binär bringen soll ...

also ich wollte das so machen ich gebe in E_SZ eine Zahl ein und das Programm soll jede seite in dem Reader einmal öffnen
d.h. in das Seiten-Edit des Readers eine Seitenzahl eingeben und enter drücken ...

aber wenn ich die schleife einfach durchlaufen lasse schriebt der Reader ganz viele "'' ist kein gültiger wert" und das ist ja eigl. nicht gewollt, weil dann die schleife nichts mehr bringt ....

jetzt ist die frage, wo denn in der schleife ein '' gesendet wird...
das entsteh ( afaik nur wenn man 0 oder eine Seitenzahl > Gesamtseiten eingibt) ...
aber das tu ich doch nie ?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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