AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Text aus fremder Anwendung läßt sich nicht kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text aus fremder Anwendung läßt sich nicht kopieren

Ein Thema von golisan · begonnen am 29. Jun 2012 · letzter Beitrag vom 9. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#1

Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 11:22
Hallo Leute,

ich habe die Suchfunktion und Google schon bemüht aber alle gefundenen Lösungsansätze haben
mir leider nicht geholfen.

Vielleicht habt ihr ja einen Tipp:

Ich möchte an den Text aus einer fremden Anwendung kommen. Wie ist mir im Prinzip egal
Die Anwendung ist die Entwicklungsumgebung der Sprache NATURAL.(wie das aussieht, siehe Bild 1)
Ich habe alle möglichen Handles im Zugriff.
Die Fensterstruktur könnt' ihr auf Bild 2 sehen.
Der Text an den ich ran möchte, steht in der Fensterklasse "PgmEdtEditWin"
Die Properties des Fensters seht ihr in Bild 3 bis 5.
Wie es aussieht, hat das Fenster keine weiteren Fenster(Edits etc), also muss der Text ja wohl "da drin stecken"

Meine Idee war, an den Text über die Zwischenablage zu kommen.
Aber alle meine Versuche mit WM_COPY bzw. Tasten senden sind gescheitert.
Passiert nix

Etwas erschwerend kommt hinzu, dass mein Code per Hook aufgerufen wird.. ich weiß nicht, ob das einen Einfluss hat(Taste senden etc.)
(der Hook reagiert auf die rechte Maustaste bzw. auf das sich dann öffnende Popupmenü)
Hier mal ein Stück Code(ist nicht vollständig!)
Delphi-Quellcode:
if nCode = HC_ACTION then
    begin
      fillchar(cwps,Sizeof(CWPStruct),0);
      CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
      GetClassName(cwps.hwnd, szClassName, SizeOf(szClassName));
      klasse := szClassName;
      if pos('NIDE', klasse) > 0 then
      begin
        case cwps.message of
        WM_INITMENU:
        begin
        focus := getfocus;
        GetClassName(focus, szClassName, SizeOf(szClassName));
        klasse := szClassName;
        if klasse = 'PgmEdtEditWinthen
        begin

          SendMessage(focus,WM_COPY , 0, 0);
          s := clipboard.AsText;
          MessageBox(0,pchar(s),'Info',0);

          // STRG A und STRG C senden
          Keybd_Event(VK_CONTROL,0,0,0);
          Keybd_Event(byte('A'),0,0,0);
          Keybd_Event(byte('A'),0,KEYEVENTF_KEYUP,0);
          Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
          sleep(200);
          Keybd_Event(VK_CONTROL,0,0,0);
          Keybd_Event(byte('C'),0,0,0);
          Keybd_Event(byte('C'),0,KEYEVENTF_KEYUP,0);
          Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);


          s := clipboard.AsText;
          MessageBox(0,pchar(s),'Info',0);
         end;
       end;
Habt ihr eine Idee?

Wenn ich per Winspector die Messages anschaue, die bei einem manuellen STRG A + C ausgelöst werden, sind da ein
Haufen WM_USER+Zahl dabei aber kein WM_COPY

Danke schon mal
Miniaturansicht angehängter Grafiken
bild-1.jpg   bild-2.jpg   bild-3.jpg   bild-4.jpg   bild-5.jpg  

  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 11:55
Wie es aussieht, hat das Fenster keine weiteren Fenster(Edits etc), also muss der Text ja wohl "da drin stecken"
Muß er?
warum sollte nicht so etwas dahinter stecken?

Delphi-Quellcode:
for i:=0 to liste.Count-1 do
  mycanvas.Textout(x,y,liste[i]);
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 12:02
Vielleicht führt die Kombination von MSDN-Library durchsuchenWM_GETTEXTLENGTH und MSDN-Library durchsuchenWM_GETTEXT zum Erfolg.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 12:38
@DeddyH: habe ich auch schon probiert. Leider keinen Erfolg. Wenn die Klasse nicht von Edit, Memo oder RichEdit
abgeleitet ist, kommt man mit GETTEXT&Co nicht ran.(wenn es z. Bsp. so gemacht wurde wie von p80286 beschrieben)
Deshalb hatte ich ja die Idee mit der Zwischenablage. Aber anscheinend "sperrt" sich die Anwendung auch gegen ein "fernsteuern"
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 12:53
Dass das selbst gezeichnet wird, ist ja relativ offensichtlich. Und wenn auch die Standard-Windowsmessages zur Textabfrage nicht behandelt werden, und du auch im Menü nicht an den Eintrag, der den Text kopiert, herankommst (wobei das den Benutzer wohl auch ziemlich stören würde), bleibt wohl nur einen Hook auf die Zeichenfunktionen zu setzen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 13:17
So, drei Schokoladenstückchen weiter ...
Die Anwendung sperrt sich nicht gegen das Strg-A+C, sondern die Tasten kommen schon im Kontextmenü an
Das widerspricht aber dem MSDN:
WM_INITMENUPOPUP
Sent when a drop-down menu or submenu is about to become active. This allows an application to modify the menu before it is displayed, without changing the entire menu.
Das Menü ist noch nicht sichtbar aber hat schon den Focus
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 29. Jun 2012, 16:55
... Wie ist mir im Prinzip egal
Schau dir mal diese Unit an, vllt kann Sie dir weiter helfen:

Ole Drop

Tipp: Im 2ten Beitrag ist ne überarbeitete Version von Tonic
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 2. Jul 2012, 17:45
Hallo,
also mit dem OLE-Drop bin ich nicht so recht klar gekommen...habe aber nur die Demo mal angeschaut.

Ich bin aber trotzdem einen Schritt weiter. Es scheint aber wirklich so zu sein, dass die
Anwendung sich dagegen "wehrt", dass man ihr den Text klaut.
Tastaturevents schicken ging nicht.
Mit Winspector Spy habe ich mir mal die Messages angeschaut, welche durch ein STRG-A/C ausgelöst werden
und habe die mal genauso "nachgebaut"

Delphi-Quellcode:
// Ctrl-A
sendMessage(focus, WM_user + 5018, $0017573,0);
sendMessage(focus, WM_user + 5694, 0,0);
sendMessage(focus, WM_user + 5678, 0,$0012e27c);

// Ctrl-C
sendMessage(focus, WM_user + 5018, $0017570,0);
sendMessage(focus, WM_user + 5694, 0,0);
sendMessage(focus, WM_user + 5678, 0,$0012e294 );
Was die Zahlen bedeuten, weiß ich nicht... aber es tut.
Habe die Anwendung auch mehrfach gestartet, auch Win neu gestartet, die Zahlen blieben immer gleich.
So richtig glücklich bin ich damit nicht, da ich nicht genau weiß, was da abgeht...

Durch den simulierten CTRL-A ist nun aber der Text selektiert. Weiß jemand, wie
man einen Text nun wieder "deselektiert"?

Geändert von golisan ( 2. Jul 2012 um 19:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 2. Jul 2012, 18:06
Schick ein "Pfeil auf" oder ähnliches ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
golisan

Registriert seit: 17. Jan 2007
43 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Text aus fremder Anwendung läßt sich nicht kopieren

  Alt 2. Jul 2012, 19:32
OK, danke für die schnelle Antwort.

Im Anhang könnt' ihr mal das Ergebnis "bewundern"
Links im Bild seht ihr das Popupmenü, welches ich um das Untermenü "Jump" erweitert habe.
Im Untermenü stehen nun alle Subroutinen(ähnlich Prozeduren in Delphi) der NATURAL-Programmsource.

Nächste Herausforderung:
Bei der Vergabe der Command-Id, dache ich, wäre man recht wahlfrei. Ist aber nicht so.

Ich habe mir eine globale Variable definiert:

id : Integer = 400;
Die einzelnen Menüeinträge hänge ich so an:

Delphi-Quellcode:
id := id + 1;
AppendMenu(jump, MF_STRING or MF_ENABLED, id, PChar(s));
Dummerweise sind so alle Einträge des Untermenüs Jump disabled.
Setzte ich den Startwert von id auf 400000 sind die Einträge auswählbar(fragt nicht wie lange ich da rum gesucht habe )

Gibt es einen definierten "Startwert"? WM_USER + ????? ab dem ich "meine" Command-Ids vergeben kann?
Kann es nicht vorkommen, dass meine Einträge mit den bestehenden Einträgen kollidieren könnten
Miniaturansicht angehängter Grafiken
jump.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:49 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