Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Hotkey per Button (https://www.delphipraxis.net/196722-hotkey-per-button.html)

SaFu 13. Jun 2018 11:05

AW: Hotkey per Button
 
Danke schonmal für die Antworten,

Ich glaub ich hab da auch ein Verständnisproblem, wenn ich über die Windowseigen Bildschirmtastatur zwei mal auf Rollen drücke, schaltet der USB-Switch um.

Von meinem Verständnis her ist es ja auch nur eine Software (Bildschirmtastatur), also warum kann ich es auch nicht so machen?


LG

KodeZwerg 13. Jun 2018 11:11

AW: Hotkey per Button
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Keybd_Event(VK_Scroll,0,0,0);
end;
Versuche mal
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
 Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
 Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
 Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
end;

SaFu 13. Jun 2018 12:01

AW: Hotkey per Button
 
Also, wenn ich das so ausführe,

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
 Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
 Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
 Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
end;
Passiert bei Button nix,

Aber wenn ich es nochmal in das KeyDown Event reinschreibe und zwar so

Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
  Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
  Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
  Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   Keybd_Event(VK_Scroll,0,0,0); // <- taste drücken
   Keybd_Event(VK_Scroll,0,KEYEVENTF_KEYUP,0); // <- taste loslassen
end;
funktioniert es über den Button aber es hängt in einer Schleife. Somit sollt es ja irgendwie funktionieren.


LG

himitsu 13. Jun 2018 12:04

AW: Hotkey per Button
 
Zitat:

Zitat von SaFu (Beitrag 1404714)
Ich glaub ich hab da auch ein Verständnisproblem, wenn ich über die Windowseigen Bildschirmtastatur zwei mal auf Rollen drücke, schaltet der USB-Switch um.

Von meinem Verständnis her ist es ja auch nur eine Software (Bildschirmtastatur), also warum kann ich es auch nicht so machen?

Das ist etwas Anderes.
Es gibt ein paar Tastatur-States, die werden an die Tastatur gesendet und da kann dann auch wieder der Switch drauf reagieren, auf die Befehle an die Tastatur.
Hier muß ja der PC der Tastatur sagen "schalte deine Scroll-Lock-LED an", sonst zeigt die Tastatur-LED etwas anderes/falsches, als der Status im PC aussagt, wenn es von der virtuellen Tastatur kam.
(Scroll-Lock, Shift-Lock und Num-Lock)

Im Prinzip ist es einfach.
Der Switch reagiert nur auf Befehle, welche durch das USB-Kabel wandern.
SendInput und Dergleichen schleußen ihre Signale aber erst nach dem USB-Port in deinem PC ein.

Via Software kannst du dich aber nur an gewissen Stellen einmischen (dort deine virtuellen Tastatur-Events senden), also bei "<---"
und bei "<--- ?" nur, wenn du das Programm hookst, bzw. selber dort etwas dafür einkompiliers.
Alles davor nur über zusätzliche Hardware, oder wenn sich die vorhandene Hardware steuern ließe, also ein API für den Switch oder eben eine steuerbare Tastatur.
Code:
          Tastatur
             V
           Kabel
             V
         USB-Switch
             V
           Kabel
             V
          USB-Port
             V
        USB-Treiber
             V   <---
 LowLevel-Tastatur-Funktionen
             V   <---
HighLevel-Tastatur-Funktionen
             V   <---
      Windows-Messages
             V   <--- ?
Ereignisbehandlung im Programm
             V   <--- ?
  die Auswertung im Programm
Im Fall der Lock-LEDs ist das halt ein Steuerbefehl für die Tastatur durch das Kabel, auf welchen der Switch reagieren kann, wenn er auch den Rückkanal überwacht,
aber da ist das eben nicht direkt der Tastatur-Code von der Tastatur durch das Kabel, sondern eben die zugehörige LED, auf welche hier reagiert wird.

SaFu 13. Jun 2018 13:59

AW: Hotkey per Button
 
So funktioniert das ganze.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var Count:integer;
begin
 for Count:= 1 to 2 do
  begin
    Windows.keybd_event(VK_Scroll, Windows.MapVirtualKey(VK_Scroll, 0), KEYEVENTF_EXTENDEDKEY, 0); // Scroll drücken
    Windows.keybd_event(VK_Scroll, Windows.MapVirtualKey(VK_Scroll, 0), KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); // Scroll loslassen
    sleep(200);
  end;
end;
Danke für die Hilfestellung.

KodeZwerg 13. Jun 2018 14:14

AW: Hotkey per Button
 
:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr.
Seite 2 von 2     12   

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