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 Sonderzeichen an die Tastatur senden? (https://www.delphipraxis.net/170288-sonderzeichen-die-tastatur-senden.html)

PeterPanino 10. Sep 2012 02:59

Sonderzeichen an die Tastatur senden?
 
Hallo! Ich möchte ein Sonderzeichen an die Tastatur senden, und zwar das Zeichen "Registrierte Marke". Wenn ich das per "Alt+0174" manuell auf dem Tastatur-Ziffernblock eingebe, wird es richtig ausgegeben: ®

Wenn ich das aber per Code mache, funktioniert es nicht:
Delphi-Quellcode:
keybd_event(VK_MENU, 0, 0, 0); // press (Alt-Taste)

keybd_event(VK_NUMPAD0, 0, 0, 0); // drücken
keybd_event(VK_NUMPAD0, 0, KEYEVENTF_KEYUP, 0); // loslassen

keybd_event(VK_NUMPAD1, 0, 0, 0); // drücken
keybd_event(VK_NUMPAD1, 0, KEYEVENTF_KEYUP, 0); // loslassen

keybd_event(VK_NUMPAD7, 0, 0, 0); // drücken
keybd_event(VK_NUMPAD7, 0, KEYEVENTF_KEYUP, 0); // loslassen

keybd_event(VK_NUMPAD4, 0, 0, 0); // drücken
keybd_event(VK_NUMPAD4, 0, KEYEVENTF_KEYUP, 0); // loslassen

keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); // release (Alt-Taste)
Wer weiß, was hier falsch läuft?

Jumpy 10. Sep 2012 07:36

AW: Sonderzeichen an die Tastatur senden?
 
Wieso nutzt du nicht einfach CHR(174)?

himitsu 10. Sep 2012 10:15

AW: Sonderzeichen an die Tastatur senden?
 
Da man dieses nicht als Keyboardevent versenden kann, da es keinen VK-CODE direkt dafür gibt.

An was willst du dieses Zeichen denn senden?
Es gibt oftmals ja auch noch andere Wege.


Warum es nicht geht, weiß ich jetzt auch nich, aber VK_MENU ist definitiv falsch, denn ist dir schonmal aufgefallen, daß nicht beide Alt-Tasten dafür benutzt werden können, sondern nur die Linke (VK_LMENU) ? :zwinker:


[add]
Schonmal VK_PACKET ausprobiert?

PeterPanino 10. Sep 2012 10:54

AW: Sonderzeichen an die Tastatur senden?
 
Zitat:

Zitat von himitsu (Beitrag 1182304)
Da man dieses nicht als Keyboardevent versenden kann, da es keinen VK-CODE direkt dafür gibt.

An was willst du dieses Zeichen denn senden?
Es gibt oftmals ja auch noch andere Wege.


Warum es nicht geht, weiß ich jetzt auch nich, aber VK_MENU ist definitiv falsch, denn ist dir schonmal aufgefallen, daß nicht beide Alt-Tasten dafür benutzt werden können, sondern nur die Linke (VK_LMENU) ? :zwinker:


[add]
Schonmal VK_PACKET ausprobiert?

Ich möchte das Zeichen an das Fenster senden, das gerade den Fokus hat. Das funktioniert auch mit allen Zeichen < 127 sowie mit den deutschen Umlauten (äöüß) sehr gut, da diese über eine deutsche Tastatur ausgegeben werden können. Nur bei Zeichen, die nicht mit der Tastatur ausgegeben werden können wie das "Registrierte Marke"-Zeichen, muss ich eben die "Alt+XXXX"-Methode verwenden.

Wenn ich beim Beispiel-Code VK_MENU verwende, wird nur ein "Ping" ausgegeben und keine Zeichen.
Wenn ich statt VK_MENU die Konstante VK_PACKET verwende, werden die Zeichen "0174" literal ausgegeben, also so, wie wenn ich "keybd_event(VK_PACKET, 0, KEYEVENTF_KEYUP, 0);" gar nicht verwendet hätte.

Eigenartigerweise haben beide Alt-Tasten den selben Scancode (VK_MENU), obwohl sie eine unterschiedliche Funktion haben.

himitsu 10. Sep 2012 11:00

AW: Sonderzeichen an die Tastatur senden?
 
Zitat:

Wenn ich statt VK_MENU die Konstante VK_PACKET verwende, werden die Zeichen "0174" literal ausgegeben
Ich hab nichts von stattdessen gesagt.

Aber im MSDN steht ja, was bei diesem Code zu beachten ist.
Zitat:

Used to pass Unicode characters as if they were keystrokes. If VK_PACKET is used with SendInput, then the Unicode character to be delivered should be placed into the lower 16 bits of the scan code. If a keyboard message is removed from the message queue and the virtual key is VK_PACKET, then the Unicode character will be the upper 16 bits of the lparam.

p80286 10. Sep 2012 12:15

AW: Sonderzeichen an die Tastatur senden?
 
Zunächst scheint mir dies sehr interessant zu sein.
Zitat:

Keys that are not included in the core set also have virtual-key code assignments, but their values vary from one keyboard layout to the next. You should depend only on the virtual-key codes that are in the core set.
Mit anderen Worten "es kann gut gehen, muß aber nicht".

Vielleicht wäre es besser eine Datei als Input für ????? zu verwenden?
oder gleich chr(174) (siehe #2) oder ...

Ach ja, der PC sendet durchaus Daten an die Tastatur......
aber hier geht es doch wohl eher um das Senden von Daten von der Tastatur an den PC??

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:24 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