Einzelnen Beitrag anzeigen

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