Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   BringWindowToTop + "STRG C" = Clipboard Problem (https://www.delphipraxis.net/115520-bringwindowtotop-strg-c-%3D-clipboard-problem.html)

Buttercreme 13. Jun 2008 10:48


BringWindowToTop + "STRG C" = Clipboard Problem
 
Hallo Leute,

Ich habe ein Merkwürdiges Problem:

Wenn ich folgen Code an eine anwendung sende wird ein strg + c ausgeführt und ins clipboard gespeichert:

Delphi-Quellcode:
aktiv:=GetForegroundWindow;
BringWindowToTop(wnd1);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
sleep(1);
Blöd ist das ich dann den Fokus des Programms verliere welches ich momentan aufhabe. Also den Fokus wieder zurücksetzen (letzte Zeile angefügt):

Delphi-Quellcode:
aktiv:=GetForegroundWindow;
BringWindowToTop(wnd1);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
sleep(1);
BringWindowToTop(wnd1);
allerdings ist dann mein clipboard leer. Woher kommt das denn?!


P.S.: Ist echt super schwierig ein STRG + C an ein Window zu senden.. Hab schon echt alles probiert und anscheinend geht es nur mir keybd_event und den Focus vorher auf das Window setzen. Aber wie gesagt mein Programm läuft im Hintergrund und ich möchte nicht das ich beim normalen Arbeiten ständig den Fokus verliere den ich aktuell habe.

Cheers

Buttercreme

Luckie 13. Jun 2008 11:18

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Warum liest du den Text nicht direkt aus mit Hier im Forum suchenWM_GETTEXT oder kopietrst in direkt mit Hier im Forum suchenEM_COPY in die Zwischenablage?

Buttercreme 13. Jun 2008 11:48

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Hallo Luckie,

Leider funktionier ein

Delphi-Quellcode:
SendMessage(wnd1, WM_GETTEXT, WM_COPY, 0);
nicht.

Ein

Delphi-Quellcode:
PostMessage(wnd1, WM_KEYDOWN, VK_DOWN, 0);
allerdings schon :(

WM_COPY wäre auf jeden fall die beste Lösung. Leider bekomme ich das aber irgendwie nicht hin ...

Luckie 13. Jun 2008 11:50

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Zitat:

Zitat von Buttercreme
Hallo Luckie,

Leider funktionier ein

Delphi-Quellcode:
SendMessage(wnd1, WM_GETTEXT, WM_COPY, 0);
nicht.

Man muss die Funktion natürlich schon richtig anwenden. Und dass das, was du da machst Blödsinn ist sollte dir eigentlich auch klar sein. Lies mal die Dokumentation zu MSDN-Library durchsuchenSendMessage, was da für Parameter hingehören. Und nicht zumsonst habe ich die Delphisuche Verlinkt. Die sollte man eventuell auch mal nutzen und anklicken.

Buttercreme 13. Jun 2008 12:47

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Die Suche hab ich ja benutzt. Und jeder Thread endet damit das jeder irgendwie keyboard events sendet. Irgendwie ist das ganze aber nicht praktikabel ...

Ein WM_GETTEXT holt sich den ganzen Text aus einem Window.

Und beim WM_COPY gibt es keine weiteren Parameter. Also kann es ja nur :

Delphi-Quellcode:
SendMessage(crmwnd,WM_COPY , 0, 0);
sein.

Ich versuche bei einer Java Applikation per VK_DOWN etc. an ein bestimmtes Feld zu kommen (das funktioniert auch schon). Leider bekomme ich den Inhalt des Feldes nicht in das Clipboard ohne keyb Events :( Und das würde den normalen Betrieb zu sehr einschränken / irritieren (z.B. was passiert wenn bei der Abfrage der Benutzer eine Taste gedrückt hält usw...).

Ich suche schon seid heute morgen nach einer Lösung und greife nach jedem Strohhalm... Leider komme ich nicht weiter.

Cheers

Buttercreme

Luckie 13. Jun 2008 19:23

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Zitat:

Zitat von Buttercreme
Delphi-Quellcode:
SendMessage(crmwnd,WM_COPY , 0, 0);

Richtig und dann hast du den Text von dem Texteingabefeld in der Zwischenablage, so fern das Handle stimmt.

Buttercreme 14. Jun 2008 14:46

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Hallo Luckie,

Leider läuft das Programm in einer SandBox (Java Applikation) und er nimmt das WM_COPY wohl nicht richtig an (Hab ja leider nur das Handle vom Hauptfenster). Komisch ist nur das VK_UP etc. funktionieren ...

Luckie 14. Jun 2008 18:59

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Wenn du das Handle vom Hauptfenster hast, dass kannst du doch auch das Kindfenster finden mit MSDN-Library durchsuchenFindChildWindow.

Christian Seehase 14. Jun 2008 19:09

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Moin Buttercreme,

ich habe schon Java-Anwendungen gehabt, bei denen STRG-C/V so schon nicht richtig funktioniert haben (mal ging's, mal nicht).
Ob das also mit der von Dir genutzten Anwendung, wie gewünscht, zum Laufen zu bekommen ist, ist wohl nicht sicher.
Dazu müsste man wissen, wie die Bestandteile des Fensters dargestellt werden.
Werden normale Windows-Controls verwendet, könntest Du diese über Luckies Tip finden, und dann direkt ansprechen (z.B. WM_GETTEXT), aber ich fürchte mal, dass die Java-Runtime hierfür eine andere Lösung (=Controls) verwendet.
Es wäre ja ziemlich mühsam für jede Plattform, auf der ein Java-Programm laufen soll, die Fenster mit den plattformspezifischen Möglichkeiten darzustellen.

Luckie 14. Jun 2008 19:23

Re: BringWindowToTop + "STRG C" = Clipboard Proble
 
Die Information, dass es sich um ein Java Programm handelt, kommt auch etwas spät. :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz