Einzelnen Beitrag anzeigen

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