Übersetzung von Tastenname über api_GetKeyNameText

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

airblaster

Betreff: Übersetzung von Tastenname über api_GetKeyNameText

BeitragDi, Aug 30, 2005 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich habe versucht über api_GetKeyNameText (aus der des öfteren geposteten user32.decls) eine funktion zu basteln die den Namen einer gedrückten taste in der aktuellen Landessprache zurückgibt.

Irgendwie funktioniert das ganze aber nicht:
BlitzBasic: [AUSKLAPPEN]
Global KBS_tmpBuffer = CreateBank(32)
scancode = 40

api_GetKeyNameText( scancode Shl 16, KBS_tmpBuffer, BankSize(KBS_tmpBuffer))
result$ = PeekString(KBS_tmpBuffer, 0)
RuntimeError result


Function PeekString$(Bank,Offset)
While True
Byte = PeekByte(Bank,Offset)
If Byte = 0 Then
Exit
Else
txt$ = txt$ + Chr$(Byte)
EndIf
offset = offset+1
Wend
Return txt$
End Function

;Auszug aus der user32.decls:
;api_GetKeyNameText% (lParam%, lpBuffer*, nSize%) : \"GetKeyNameTextA\"


Wenn ich den
MSDN-Eintrag zu GetKeyNameText ansehe müsste der Code doch eigentlich stimmen...

Hat jemand eine Idee woran es liegen könnte?

EDIT:
damit hier nichts falsches rauskopiert wird habe ich mal die falsche Zeile BlitzBasic: [AUSKLAPPEN]
;api_GetKeyNameText% (lParam%, lpBuffer$, nSize%) : \"GetKeyNameTextA\"

durch die korrekte Version ersetzt
  • Zuletzt bearbeitet von airblaster am Mi, Aug 31, 2005 13:19, insgesamt einmal bearbeitet

Sebastian

BeitragMi, Aug 31, 2005 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich vermute dein lParam passt nicht ( o. ist ungültig).
lParam muss so aussehen wie der lParam einer WM_KEYDOWN - message (WM_KeyDown)
Folglich fehlen da villeicht ein par bits ...
Ich spiel mal ein bischen rum ....
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Sebastian

BeitragMi, Aug 31, 2005 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Kommando zurück !

Probier mal das :
BlitzBasic: [AUSKLAPPEN]

Global KBS_tmpBuffer = CreateBank(32)

Print api_GetKeyNameText(29 Shl 16, KBS_tmpBuffer, BankSize(KBS_tmpBuffer)) ; Ctrl


Ausgabe :
Code: [AUSKLAPPEN]

4


Das bedeutet es werden 4 byte (Strg) übergeben , bloß kommen die nie in der bank an !!
Und zwar weil der Pointer zu der Bank in der decls als string ($) steht, er müsste allerding als pointer eingetragen sein (*) !!!!

Nicht so:
Code: [AUSKLAPPEN]
api_GetKeyNameText% (lParam%, lpBuffer$, nSize%) :
"GetKeyNameTextA"
Sondern so:
Code: [AUSKLAPPEN]
api_GetKeyNameText% (lParam%, lpBuffer*, nSize%) : "GetKeyNameTextA"


Kleiner Fehler Große Wirkung ...
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !
  • Zuletzt bearbeitet von Sebastian am Do, Sep 01, 2005 11:45, insgesamt einmal bearbeitet
 

airblaster

BeitragMi, Aug 31, 2005 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, das war es wirklich Smile

Hätte nicht gedacht dass es an so einem kleinen Detail lag Embarassed

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group