Virtual Scan Code in ASCII
Virtual Scan Code in ASCII
Ich bekomme es einfach nicht hin einen virtual Scan code in ein ASCII Symbol zu konvertieren mit der Funktion "ToAscii". Kann mir da jemand helfen
Danke Mark S.
Re: Virtual Scan Code in ASCII
[Edit]
Wer lesen kann ist klar im Vorteil.
Ich hatte auch mit "ToAscii" Probleme, darum habe ich das ganze (etwas umständlich aber effektiv) mit "MapVirtualKeyEx" gelöst.
Erst wandel ich von Scancode zu Virtualkey und anschließend von Virtualkey zu Character.
Falls Du's brauchen kannst, hier ist meine Prozedursammlung für kreuz und quer Wandlungen zwischen Virtualkeys (Vk), Scancodes(Vsc), Characters (Chr), Ascii-Werten (Asc) und Tastenbeschriftung (Str).
Prozeduren, welche auf "Ex" enden unterscheiden zwischen linker und rechter Taste bei Virtualkeys, bzw. #KEYEVENTF_EXTENDEDKEY und "normal" bei Scancodes.
Nebenbei: Wäre der Thread nicht in "Betriebssystemspezifisch > Windows" besser aufgehoben?
Wer lesen kann ist klar im Vorteil.

[/Edit]MSDN (ToAscii) hat geschrieben:Translates the specified virtual-key code and keyboard state to the corresponding character or characters.
(...)
Typically, ToAscii performs the translation based on the virtual-key code. In some cases, however, bit 15 of the uScanCode parameter may be used to distinguish between a key press and a key release. The scan code is used for translating ALT+ number key combinations.
Ich hatte auch mit "ToAscii" Probleme, darum habe ich das ganze (etwas umständlich aber effektiv) mit "MapVirtualKeyEx" gelöst.
Erst wandel ich von Scancode zu Virtualkey und anschließend von Virtualkey zu Character.
Code: Alles auswählen
; PB 4.60 beta 3 / Regenduft
CompilerIf Defined(MAPVK_VSC_TO_VK,#PB_Constant)=0
#MAPVK_VSC_TO_VK=1
CompilerEndIf
CompilerIf Defined(MAPVK_VK_TO_CHAR,#PB_Constant)=0
#MAPVK_VK_TO_CHAR=2
CompilerEndIf
Layout = GetKeyboardLayout_(0)
VirtualScanCode = 45 ; = X-Taste
Debug Chr(MapVirtualKeyEx_(MapVirtualKeyEx_(VirtualScanCode,#MAPVK_VSC_TO_VK,Layout),#MAPVK_VK_TO_CHAR,Layout))
Prozeduren, welche auf "Ex" enden unterscheiden zwischen linker und rechter Taste bei Virtualkeys, bzw. #KEYEVENTF_EXTENDEDKEY und "normal" bei Scancodes.
Code: Alles auswählen
; PB 4.60 beta 3 / Regenduft
EnableExplicit
CompilerIf Defined(MAPVK_VK_TO_VSC ,#PB_Constant)=0 : #MAPVK_VK_TO_VSC =0 : CompilerEndIf
CompilerIf Defined(MAPVK_VSC_TO_VK ,#PB_Constant)=0 : #MAPVK_VSC_TO_VK =1 : CompilerEndIf
CompilerIf Defined(MAPVK_VK_TO_CHAR ,#PB_Constant)=0 : #MAPVK_VK_TO_CHAR =2 : CompilerEndIf
CompilerIf Defined(MAPVK_VSC_TO_VK_EX,#PB_Constant)=0 : #MAPVK_VSC_TO_VK_EX=3 : CompilerEndIf
CompilerIf Defined(MAPVK_VK_TO_VSC_EX,#PB_Constant)=0 : #MAPVK_VK_TO_VSC_EX=4 : CompilerEndIf ; erst ab Vista unterstützt!
Procedure.i VkToAsc(VirtualKey)
ProcedureReturn MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_CHAR,GetKeyboardLayout_(0))
EndProcedure
Procedure.s VkToChr(VirtualKey)
ProcedureReturn Chr(MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_CHAR,GetKeyboardLayout_(0)))
EndProcedure
Procedure.s VkToStr(VirtualKey)
Protected Ergebnis${127}
GetKeyNameText_(MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_VSC,GetKeyboardLayout_(0))<<16,@Ergebnis$,128)
ProcedureReturn Ergebnis$
EndProcedure
Procedure.s VkToStrEx(VirtualKey) ; erst ab Vista unterstützt!
Protected Ergebnis${127}
GetKeyNameText_(MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_VSC_EX,GetKeyboardLayout_(0))<<16,@Ergebnis$,128) ; erst ab Vista unterstützt!
ProcedureReturn Ergebnis$
EndProcedure
Procedure.i VkToVsc(VirtualKey)
ProcedureReturn MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_VSC,GetKeyboardLayout_(0))
EndProcedure
Procedure.i VkToVscEx(VirtualKey) ; erst ab Vista unterstützt!
ProcedureReturn MapVirtualKeyEx_(VirtualKey,#MAPVK_VK_TO_VSC_EX,GetKeyboardLayout_(0)) ; erst ab Vista unterstützt!
EndProcedure
Procedure.i VscToAsc(VirtualScanCode)
Protected Layout = GetKeyboardLayout_(0)
ProcedureReturn MapVirtualKeyEx_(MapVirtualKeyEx_(VirtualScanCode,#MAPVK_VSC_TO_VK,Layout),#MAPVK_VK_TO_CHAR,Layout)
EndProcedure
Procedure.s VscToChr(VirtualScanCode)
Protected Layout = GetKeyboardLayout_(0)
ProcedureReturn Chr(MapVirtualKeyEx_(MapVirtualKeyEx_(VirtualScanCode,#MAPVK_VSC_TO_VK,Layout),#MAPVK_VK_TO_CHAR,Layout))
EndProcedure
Procedure.s VscToStr(VirtualScanCode)
Protected Ergebnis${127}
GetKeyNameText_(VirtualScanCode<<16,@Ergebnis$,128)
ProcedureReturn Ergebnis$
EndProcedure
Procedure.i VscToVk(VirtualScanCode)
ProcedureReturn MapVirtualKeyEx_(VirtualScanCode,#MAPVK_VSC_TO_VK,GetKeyboardLayout_(0))
EndProcedure
Procedure.i VscToVkEx(VirtualScanCode)
ProcedureReturn MapVirtualKeyEx_(VirtualScanCode,#MAPVK_VSC_TO_VK_EX,GetKeyboardLayout_(0))
EndProcedure
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)