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