Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Sendkey-Befehl: Kopieren in Zwischenablage (https://www.delphipraxis.net/38804-sendkey-befehl-kopieren-zwischenablage.html)

Susanne 24. Jan 2005 14:49


Sendkey-Befehl: Kopieren in Zwischenablage
 
ich brauche mal dringend hilfe,

ich bin jetzt z.B. in Excel, gebe dort in irgendeiner Zelle eine Wert ein, markiere einen Teil davon mit dem Befehl

Delphi-Quellcode:
Sendkeys('^{c}',True);
Jetzt mein Problem: es kommt der markierte Teil in der Zwischenablage an, aber Teilweise wird dann noch der markierte Wert in Excel durch ein C ersetzt!

Wie kommt das und was kann ich dagegen tun?

toms 25. Jan 2005 01:38

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Zitat:

Sendkeys('^{c}',True);
Hi,

Führst du diesen Code von Delphi aus?

Susanne 25. Jan 2005 09:10

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
ja mache ich

Treffnix 25. Jan 2005 10:34

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Muss es Sendkeys sein? Excel hat afair auch ne Methode Copy, die das macht. Also z.B. sheet.copy, Range.Copy evtl auch ein Selection.Copy. Und umgekehrt gibts dann die Methode Paste. Hab sie zwar noch nie benutzt, aber die sollten das erledigen.

Robert Marquardt 25. Jan 2005 10:57

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Aufpassen! Excel benimmt sich schlecht. Wird Excel beendet, so geht auch der Clipboard-Inhalt verloren.
Excel rendert den Clipboardinhalt naemlich nur wenn er auch abgerufen wird.

toms 25. Jan 2005 12:17

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Ist Excel im Vordergrund, wenn du Sendkeys(...) ausfuehrst?
Sonst wird evtl die Strg-Taste nicht "richtig" simuliert.

Susanne 25. Jan 2005 15:53

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Excel ist im Vordergrund, wenn Sendkeys ausgeführt wird. Richtig simuliert werden muss es ja, denn es kommt ja richtig in der Zwischenablage an. Damit sollte der Arbeitsgang ja auch erledigt sein, aber meist ersetzt er dann in Excel den markierten Teil durch ein C. Ich sage ihm doch mit dem Sendkey-Befehl nur, dass er den markierten Teil in die Zwischenablage packen soll, und mehr doch nicht. Deshalb begreife ich das mit dem C nicht

QuickAndDirty 25. Jan 2005 16:19

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Hast du einen Rechner mit mehreren Prozessorkernen (>>intel HyperThreading )?
wenn ja ?
hast du auf einem mit nur einem prozessor Kern bestücktem rechner das selbe
problem?
wenn nein. dann must du deinem Anwendung vorher mitteilen auf welchem prozessor
sie zu laufen hat.

Susanne 25. Jan 2005 16:20

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
nein, keine mehreren Prozessorkerne

Robert Marquardt 25. Jan 2005 16:22

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Hast du eigentlich mal ein SendMessage(..., WM_COPY, ...) versucht?

Susanne 27. Jan 2005 10:50

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Ich hab es auch über SendMEssage versucht, aber da kriegt er irgendwie gar nichts in die Zwischenablage.

Es soll ausserdem auch eine universelle Lösung sein, so dass der selektierte Text aus jeder beliebigen Anwendung in die Zwischenablage kopiert werden kann.

Robert Marquardt 27. Jan 2005 11:17

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Hast du SendMessage mal mit Notepad etc versucht? Es kann ja sein das nur Excel zickt.

Susanne 27. Jan 2005 11:30

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
ich habe das mal bei anderen Editoren probiert mit sendkeys, da klappt es anscheinend wirklich einwandfrei, aber warum denn nicht mit Word, Excel usw? Das muss da doch auch irgendwie funktionieren und ohne ole-Verbindung. Bei Word kommt in der Zwischenablage gar nichts an.

Robert Marquardt 27. Jan 2005 12:03

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Sendkeys ist und bleibt keine universelle Loesung.
Kannst du eigentlich meine Frage beantworten?

Susanne 27. Jan 2005 12:09

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
nein, mit sendmessage kommt nichts in die Zwischenablage

Susanne 28. Jan 2005 09:51

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Anmerkung: Wenn ich in Excel die ganze Zelle z.B. markiere und dieses dann an die Zwischenablage sende, funktioniert das ganze einwandfrei.

Delphi-Quellcode:
     Sendkeys('{HOME}',True);
     Sendkeys('+{END}',True);
     Sendkeys('^{c}',True);
     Sendkeys('{HOME}',True);
Wenn ich jetzt nur folgendes Nehme, dann ersetzt er meist das markierte durch ein C

Delphi-Quellcode:
Sendkeys('^{c}',True);
Wenn ich das ganze mit SendMessage versuche, kommt gar nichts in der Zwischenablage an.
Delphi-Quellcode:
//Id bzw Handle des aktiven Fensters
  hOtherWin := GetForegroundWindow;
  OtherThreadID := GetWindowThreadProcessID( hOtherWin, @aDwordvar);
  //ShowMessage('ThreadID: '+ intToStr(OtherThreadID));
  //Titel des Fensters
  GetWindowText(hOtherWin, NextTitle, 255);
  //ShowMessage('WindowText: '+ NextTitle);
  SendMessage(hOtherWin, WM_COPY, 0, 0);
  ShowMessage(ClipBoard.AsText);

toms 28. Jan 2005 10:10

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Hi Susanne,

Ich kann dein Problem nicht genau nachvollziehen.
Kannst du mal beschreiben, was du genau machen moechtest, resp wie das
Sendkeys('^{c}',True); ausgeloest wird (per Hotkey, ButtonKlick...)??

Sonst kannst du auch mal dies ausprobieren:

Delphi-Quellcode:
Procedure Control_C;
begin
  keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
  keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), 0, 0);
  keybd_event(Ord('C'), MapVirtualKey(Ord('C'), 0), KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
end;

Susanne 28. Jan 2005 10:39

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
Also:
Ich habe mein Programm test.exe und diese Starte ich, die Anwendung installiert einen Hook und wenn dann F9 gedrückt wird, soll er den markierten Text der Anwendung, die gerade im Vordergrund ist markieren und in die Zwischenablage packen.

Also ich starte die test.exe und die Anwendung wird unten in der Taskbar nur als kleines Icon angezeigt. Dann starte ich Excel, markiere in einer beliebigen Zelle einen Text und drücken dann F9. Daraufhin soll dieser markierte Text in die Zwischenablage befördert werden.

Ich habe das ganze mit Wordpad versucht und Sendkey - das funktioniert einwandfrei
Ich habe es des weiteren mit Editor, Messenger, WindowsExplorer versucht - auch einwandfrei

Dann kommt Excel - funktioniert- wird in die Zwischenablage befördert - nur meist ersetzt er den markierten Text in Excel daraufhin mit einem C - keine Ahnung warum

Und mit Word, Outlook - kommt gar nichts in der Zwischenablage an

Dann habe ich es mit SendMessage(handlevonExcel, WM_COPY, 0, 0) versucht, kommt nie etwas in der Zwischenablage an

Susanne 28. Jan 2005 14:14

Re: Sendkey-Befehl: Kopieren in Zwischenablage
 
ich hab das Problem jetzt gelöst mit Excel - ich habe ein Application.Processmessages eingebaut, seitdem erscheint auch kein C mehr

Problem weiterhin Word und Outlook kommt nichts in der Zwischenablage an


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz