AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Control + Copy-Simulation funktioniert nicht!!
Thema durchsuchen
Ansicht
Themen-Optionen

Control + Copy-Simulation funktioniert nicht!!

Ein Thema von gugelhupf · begonnen am 4. Mai 2006 · letzter Beitrag vom 8. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von gugelhupf
gugelhupf

Registriert seit: 3. Feb 2006
Ort: Hessen
36 Beiträge
 
Delphi XE4 Enterprise
 
#1

Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 08:51
Moin zusammen,

ich habe ein kleines Problemchen.

Ich möchte gerne mit einem globalen HotKey den selektierten Text einer anderen Anwendung (auch Firefox, IE) in die Zwischenablage kopieren und direkt in ein Editfeld meiner Anwendung einfügen.
Alles nur durch Drücken des HotKeys.

Ich muss dazu sagen, dass ich schon sämtliche Foren durchforst habe 2 Wochen lang - auch hier - und bin auch fündig geworden, leider funktioniert immer noch nichts davon.

Hier mal ein paar Teile des Codes...


HotKey festlegen und registrieren:
Delphi-Quellcode:
procedure TFrmMain.FormCreate(Sender: TObject);
const
  MOD_ALT = 1;
  VK_R = $52;
begin
  FHotKey := GlobalAddAtom('Hotkey1');
  RegisterHotKey(Handle, FHotKey, MOD_ALT, VK_R);

  // ...
end;
HotKey-Event:
Delphi-Quellcode:
procedure TFrmMain.WMHotKey(var Msg: TWMHotKey);
begin
  // Hier muss geprüft werden, ob der HK bereits betätigt wurde
  if Msg.HotKey = FHotKey then
  begin
    FFirstStart := False;
    FHKUsed := True;

    // Zwischenablage öffnen
    Clipboard.Open;

    // Control + Copy simulieren
    keybd_event(VK_CONTROL, 0, 0, 0);
    keybd_event(Ord('C'), 0, 0, 0);
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    Sleep(10);
    if Clipboard.HasFormat(CF_TEXT) then
      ShowMessage(Clipboard.AsText); // Zeigt nur einen leeren Text an

    // ...
  end;
end;
Wenn das Formular aktiviert ist:
Delphi-Quellcode:
procedure TFrmMain.ApplicationEventsActivate(Sender: TObject);
begin
  // Prüfen, ob es der erste Start des Programms ist
  if FHKUsed then
  begin
    if not FFirstStart then
    begin
      // Text aus der Zwischenablage überprüfen und als Nummer verwenden
      if Clipboard.HasFormat(CF_TEXT) then
      begin
        // Rufnummer füllen und "säubern"
        FRufnummer := CleanString(Clipboard.AsText);
        EditNumber.Text := FRufnummer; // Bleibt ebenfalls leer!!!
      end;
      // Zwischenablage leeren, falls etwas drinne steht ...
      if Clipboard.AsText <> 'then
        Clipboard.Clear;
      // ... und schließen
      Clipboard.Close;
    end;
  end;
end;
HotKey wieder löschen:
Delphi-Quellcode:
procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  UnregisterHotKey(Handle, FHotKey);
  GlobalDeleteAtom(FHotKey);
end;
Wer von Euch weiß Rat?

OS: WinXP
Delphi: Version 5, Enterprise
gugelhupf
Rede mir nicht dazwischen, wenn ich mit mir selbst rede. Weil if you go me on the Nerven I'll put you into a Gulli, do the Deckel druff and you never come back to the Tageslicht again.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 09:11
Zitat von gugelhupf:
leider funktioniert immer noch nichts davon.
Und was funktioniert nicht? Registrieren des Hotkeys? Reagieren auf den Hotkey? Kopieren des ausgewählten Textes im Browser in die Zwischenablage? ...
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von gugelhupf
gugelhupf

Registriert seit: 3. Feb 2006
Ort: Hessen
36 Beiträge
 
Delphi XE4 Enterprise
 
#3

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 09:20
Zitat von Luckie:
Zitat von gugelhupf:
leider funktioniert immer noch nichts davon.
Und was funktioniert nicht? Registrieren des Hotkeys? Reagieren auf den Hotkey? Kopieren des ausgewählten Textes im Browser in die Zwischenablage? ...
gugelhupf
Rede mir nicht dazwischen, wenn ich mit mir selbst rede. Weil if you go me on the Nerven I'll put you into a Gulli, do the Deckel druff and you never come back to the Tageslicht again.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 09:59
Hallo,

Der Code für CTRL+C ist unvollständig.
Du "vergisst" die "C" Taste wieder loszulassen

versuche es mal so ...
Delphi-Quellcode:
  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);
Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Benutzerbild von gugelhupf
gugelhupf

Registriert seit: 3. Feb 2006
Ort: Hessen
36 Beiträge
 
Delphi XE4 Enterprise
 
#5

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 10:09
Funktioniert auch nicht!!!

Das Problem ist, dass beispielsweise Firefox keinen Fokus bekommt, wenn ich einen selektierten Text kopieren will. Wenn ich hingegen etwas aus der Adressleiste kopiere, funktioniert es. Nur bei Webseiten nicht!

Wie kann das sein? Firefox HAT den Fokus meines Erachtens, sonst würde ich ja nichts aus der Adressleiste kopieren können, oder???

Wo ist das Problem?
gugelhupf
Rede mir nicht dazwischen, wenn ich mit mir selbst rede. Weil if you go me on the Nerven I'll put you into a Gulli, do the Deckel druff and you never come back to the Tageslicht again.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 10:32
Hier ein Stückchen Code auf einem meiner Projekte.
Es gibt definitiv keine Probleme mit Browsern.
Lediglich bei Terminalservern und anderen "Remote-Desktop Anwendungen" funktioniert es auf diesem Wege nicht.

Delphi-Quellcode:
procedure TMain.WMHotKey(var Msg: TWMHotKey);
begin

  // Warten, bis der Hotkey durch den User losgelassen wurde ...
  
  while not ((GetASYNCKeyState(VK_LSHIFT) = 0) and
    (GetASYNCKeyState(VK_RSHIFT) = 0) and
    (GetASYNCKeyState(VK_LSHIFT) = 0) and
    (GetASYNCKeyState(VK_RCONTROL) = 0) and
    (GetASYNCKeyState(VK_RCONTROL) = 0) and
    (GetASYNCKeyState(VK_LMENU) = 0) and
    (GetASYNCKeyState(VK_RMENU) = 0)) do
  begin
    Application.ProcessMessages;
  end;
  
  // CTRL+C senden

  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);
  
  // kurz warten, damit das Schreiben der Zwischenablage beendet werden kann
  sleep(200);
  Application.processmessages;

  // Clipboard auf Text prüfen und verarbeiten

  if Clipboard.HasFormat(CF_TEXT) then
    s := clipboard.AsText;

  ...
  ...
end;

Schöne Grüße,
Jens


PS:
Verschlüsselte PDF Dokumente verweigern ebenfalls das Kopieren von Objekten (auch Text) in die Zwischenablage.

Wenn du was ganz Geniales bauen willst, dann vergiss CTRL+C.
Der Babylon Translator beispielsweise, liest das Wort unter dem Mauszeiger über OCR aus.
Damit kannst du dann auch Textinformationen nutzen, die als Images vorliegen.
Terminalserver u.Ä. sind dann auch kein Problem mehr.
  Mit Zitat antworten Zitat
Benutzerbild von gugelhupf
gugelhupf

Registriert seit: 3. Feb 2006
Ort: Hessen
36 Beiträge
 
Delphi XE4 Enterprise
 
#7

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 10:42
Hast Du die Zwischenablage vor Drücken des Strg + C geöffnet mit Clipboard.Open oder nicht?

Weil ich hab im Moment noch Clipboard.Open vor dem keybd_event stehen!

Also bei mir funktioniert es weiterhin definitiv nicht!

Edit: Ich hab's nun mit und ohne vorheriges Öffnen probiert. Die Zwischenablage ist weiterhin leer! Ich habe nun noch ein Sleep(200) und ein Application.ProcessMessages eingebaut -> ebenfalls erfolglos!
gugelhupf
Rede mir nicht dazwischen, wenn ich mit mir selbst rede. Weil if you go me on the Nerven I'll put you into a Gulli, do the Deckel druff and you never come back to the Tageslicht again.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 10:58
Clipboard.Open ist optional.
Die Zwischenablage wird bei Bedarf automatisch geöffnet.

Vor dem CTRL+C macht es definitiv keinen Sinn, weil deine Anwendung nichts in die Clipboard schreibt bzw. aus ihr liest.

Der o.a. Code läuft unter Delphi 7 absolut sauber.
Auch die Anwendung, die diesen Code benutzt läuft inzwischen auf über 150 Kundenrechnern ohne Probleme.

Entweder hat Delphi 5 da einen Bug oder dein Problem steckt irgendwo anders.

Ich habe keine Idee mehr, wie ich dir weiterhelfen kann.





Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Benutzerbild von gugelhupf
gugelhupf

Registriert seit: 3. Feb 2006
Ort: Hessen
36 Beiträge
 
Delphi XE4 Enterprise
 
#9

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 11:08
Ich hab's auch schon unter Delphi 7 probiert - ebenfalls erfolglos.

Das Problem muss woanders liegen - ich denke, es hängt mit dem nichtvorhandenen Fokus des Browserfensters zusammen.

Weiß aber nicht, wie ich das Problem noch lösen könnte.
gugelhupf
Rede mir nicht dazwischen, wenn ich mit mir selbst rede. Weil if you go me on the Nerven I'll put you into a Gulli, do the Deckel druff and you never come back to the Tageslicht again.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#10

Re: Control + Copy-Simulation funktioniert nicht!!

  Alt 4. Mai 2006, 11:34
Ich bin ratlos.
Der Code arbeitet sauber, egal ob Browser oder andere Applikation ... Demo hier ...
  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 18:21 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