AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

STRG+C senden. Geht nicht :(

Offene Frage von "skyquaker"
Ein Thema von skyquaker · begonnen am 19. Mai 2007 · letzter Beitrag vom 20. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#1

STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 14:48
Ich möchte mit Delphi die Tastenkombination STRG+C senden um einen markierten Text in die Zwischenablage zu kopieren. Wie das geht, das weiß ich (zumindest theoretisch). (SuFu und Google benutzt).
Leider funktioniert es praktisch nicht. STRG+ALT+ENTFERNEN z.B. geht, STRG+C geht nicht.

Diese Procedure habe ich benutzt:
Delphi-Quellcode:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
{************************************************************
* Procedure PostKeyEx32
*
* Parameters:
*  key    : virtual keycode of the key to send. For printable
*          keys this is simply the ANSI code (Ord(character)).
*  shift  : state of the modifier keys. This is a set, so you
*          can set several of these keys (shift, control, alt,
*          mouse buttons) in tandem. The TShiftState type is
*          declared in the Classes Unit.
*  specialkey: normally this should be False. Set it to True to
*          specify a key on the numeric keypad, for example.
* Description:
*  Uses keybd_event to manufacture a series of key events matching
*  the passed parameters. The events go to the control with focus.
*  Note that for characters key is always the upper-case version of
*  the character. Sending without any modifier keys will result in
*  a lower-case character, sending it with [ssShift] will result
*  in an upper-case character!
// Code by P. Below
************************************************************}

type
  TShiftKeyInfo = record
    shift: Byte;
    vkey: Byte;
  end;
  byteset = set of 0..7;
const
  shiftkeys: array [1..3] of TShiftKeyInfo =
    ((shift: Ord(ssCtrl); vkey: VK_CONTROL),
    (shift: Ord(ssShift); vkey: VK_SHIFT),
    (shift: Ord(ssAlt); vkey: VK_MENU));
var
  flag: DWORD;
  bShift: ByteSet absolute shift;
  i: Integer;
begin
  for i := 1 to 3 do
  begin
    if shiftkeys[i].shift in bShift then
      keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
  end; { For }
  if specialkey then
    flag := KEYEVENTF_EXTENDEDKEY
  else
    flag := 0;

  keybd_event(key, MapvirtualKey(key, 0), flag, 0);
  flag := flag or KEYEVENTF_KEYUP;
  keybd_event(key, MapvirtualKey(key, 0), flag, 0);

  for i := 3 downto 1 do
  begin
    if shiftkeys[i].shift in bShift then
      keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
        KEYEVENTF_KEYUP, 0);
  end; { For }
end;
Dan mit diesem Code gesendet:

Delphi-Quellcode:
...
const VK_C= 43;
...
PostKeyEx32(VK_C, [ssctrl, ssAlt], False);
Ich habs auch einmal mit Ord('C') statt VK_C probiert, selbes Ergebnis.

Hier in der DP hab ich folgendes gefunden:
Delphi-Quellcode:
  keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(VK_C, 0, 0, 0);
  keybd_event(VK_C, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  sleep(20);
Funktioniert auch nicht

Was mache ich falsch?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 14:56
Hallo

Ich hab's mal so gemacht und es funktioniert wunderbar.

Delphi-Quellcode:
procedure Simulate_CtrlC;
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;
Thomas
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#3

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 16:26
Es funktioniert einfach nicht! Ich habe meinem Programm gesagt, dass es Strg und C dürcken soll (Die Methode aus dem Post über mir), sobald es den Hotkey STRG+ALT+Q empfängt. Ich glaube zwar, dass der Befehl gesendet wird, aber der Text aus dem Editor (oder aus Firefox) wird einfach nicht kopiert.

  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 16:36
Moin Skyquaker,

hat das Fenster denn dann auch den Fokus?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#5

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 17:33
Ja, ich bringe das Fenster in den Vordergrund und drücke dann die Tastenkombi.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 18:13
wenn dein Hotkey Strg + Alt + Q ist kannst du logicher Weise Strg nicht nochmal drücken. Gedrückt ist gedrückt und du musst die Taste erst wieder los lassen bis sie wieder gedrückt werden kann. Ansonsten bekommt die Andere Anwendung wohlmöglich nichts mit. Aber ist es nicht einfacher wm_copy zu verwenden oder geht das in dem fall nicht?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#7

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 18:33
Zitat von SirThornberry:
wenn dein Hotkey Strg + Alt + Q ist kannst du logicher Weise Strg nicht nochmal drücken. Gedrückt ist gedrückt und du musst die Taste erst wieder los lassen bis sie wieder gedrückt werden kann. Ansonsten bekommt die Andere Anwendung wohlmöglich nichts mit. Aber ist es nicht einfacher wm_copy zu verwenden oder geht das in dem fall nicht?
Etwa so?
Delphi-Quellcode:
hOtherWin := GetForegroundWindow;
 SendMessage(hOtherWin, WM_COPY, 0, 0);
Kann ich damit denn auch jedes beliebige Objekt kopieren (Dateien,...) oder nur Text?
Ich hab das ganze auch mal mit dem Hotkey Alt+Q probiert. Hat auch nicht geklappt.
  Mit Zitat antworten Zitat
willnix

Registriert seit: 14. Apr 2007
Ort: Heidelberg
27 Beiträge
 
Delphi 7 Professional
 
#8

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 21:39
Moin skyquaker,
Mit WM_COPY kannst du nur den markierten Text aus einem Edit oder einer Combo Box kopieren (siehehier im MSDN).
Gruß Willnix

P.S
Kennen wir uns nicht irgendwo her ?
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#9

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 22:23
Zitat von willnix:
...

P.S
Kennen wir uns nicht irgendwo her ?
Mein ich aber auch. Leider haben sie uns den Spaß ja verdorben.



Funktioniert denn das mit dem
Delphi-Quellcode:
keybd_event(VK_CONTROL, 0, 0, 0);
  keybd_event(VK_C, 0, 0, 0);
  keybd_event(VK_C, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  sleep(20);
generell nicht oder nur bei mir?
  Mit Zitat antworten Zitat
skyquaker

Registriert seit: 14. Sep 2006
96 Beiträge
 
Delphi 7 Professional
 
#10

Re: STRG+C senden. Geht nicht :(

  Alt 19. Mai 2007, 22:34
  PostKeyEx32(VK_DELETE, [ssctrl, ssAlt], False); Mir ist grade aufgefallen, dass bei dieser Methode werder STRG noch ALT wirklich gefrückt werden. Lediglich DELETE (oder was da halt sonst steht).

@Post unter mir: Sorry
  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 12: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