AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Sonderzeichen an die Tastatur senden?
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderzeichen an die Tastatur senden?

Ein Thema von PeterPanino · begonnen am 10. Sep 2012 · letzter Beitrag vom 10. Sep 2012
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 03:59
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?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 08:36
Wieso nutzt du nicht einfach CHR(174)?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.075 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 11:15
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) ?


[add]
Schonmal VK_PACKET ausprobiert?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (10. Sep 2012 um 11:30 Uhr)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 11:54
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) ?


[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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.075 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 12:00
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Sonderzeichen an die Tastatur senden?

  Alt 10. Sep 2012, 13:15
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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