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 Problem mit keybd_event in Verbindung mit Hotkey (https://www.delphipraxis.net/141928-problem-mit-keybd_event-verbindung-mit-hotkey.html)

Bomberbb 19. Okt 2009 10:15


Problem mit keybd_event in Verbindung mit Hotkey
 
Hallo,

ich habe ein Problem mit einem emulierten Tastendruck, der durch einen globalen Hotkey ausgelöst werden soll.
Der Hotkey funktioniert, ich denke aber, dass das KeyboardEvent an die falsche Anwendung geht. Mein Programm hat kein sichtbares Fenster, scheint aber doch irgendwie den Eingabefocus zu ändern.

Delphi-Quellcode:
Procedure TfrmKeyMakro.WMHotKey(Var Message: TMessage);
Begin
  If Message.wParam = HotKeyID Then
  Begin
    //showmessage('OK');
    keybd_event(55, Lo(MapVirtualKey(55, 0)), 0, 0);
    keybd_event(55, Lo(MapVirtualKey(55, 0)), KEYEVENTF_KEYUP, 0);
  End;
End;
Wenn ich das showmessage aufrufe, dann funktioniert es. Aber ich möchte ja nicht bei jedem shortcut bestätigen müssen.

Kann da wer helfen?

Gruß

BBB

Bomberbb 19. Okt 2009 12:08

Re: Problem mit keybd_event in Verbindung mit Hotkey
 
Habe nun eine Lösung gefunden:
Delphi-Quellcode:
Procedure TfrmKeyMakro.WMHotKey(Var Message: TMessage);
Begin
  If Message.wParam = HotKeyID Then
  Begin
    SetActiveWindow(GetForegroundWindow);
    Sleep(150);

    keybd_event(55, Lo(MapVirtualKey(55, 0)), 0, 0);
    keybd_event(55, Lo(MapVirtualKey(55, 0)), KEYEVENTF_KEYUP, 0);
  End;
End;
So funzt es. Es scheint also so, als würde das aktive Fenster deaktiviert.

Nun muss ich nur noch hoffen, dass das slepp(150) in allen Fällen ausreicht...

mleyen 19. Okt 2009 12:13

Re: Problem mit keybd_event in Verbindung mit Hotkey
 
Das der den Fokus aufgrund des Hotkeys verliert, kann ich mir ja fast nicht vorstellen.
Aber zu deinem Problem mit Sleep(X):
Prüf doch in einer Schleife mit timeout auf GetActiveWindow.


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