Tastaturtreiber-Bug?! (Windows)

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Tastaturtreiber-Bug?! (Windows)

Beitrag von Regenduft »

Hi liebe Leute,

ich möchte mal um eure Hilfe bitten um herauszufinden, ob mein Tastaturtreiber vielleicht verbuggt ist. Am Ende dieses Postings findet ihr einen Testcode, der bei mir zu sehr seltsamen Ergebnissen führt, wenn ich seit dem Starten des PCs mindestens einmal die "Lautstärke-Runter-Taste" betätigt habe. (...oder wie diese Taste auch immer richtig heißt... :wink:)
Es ist übrigens egal, ob ich als x86 oder x64 Executeable kompiliere.

Wenn ein/zwei Leutchen den Testcode mal ausführen könnten und mir dann berichten, ob sie auch das Problem haben, dann würde mir das echt weiterhelfen!

Hier mal wie es bei mir zum Bug kommt (zum Reproduzieren):
  1. Rechner gestartet und noch keine Multimedia-Taste betätigt;
    Testcode gestartet, angezeigte Tasten sind korrekt (nämlich "keine" :wink:).
    Bild
  2. Einmal "Lautstärke-Runter" betätigt und wieder losgelassen;
    die Taste wird weiterhin als betätigt angezeigt!
    Bild
  3. Kurz das Fenster deaktiviert und wieder aktiviert (mit Alt-Tab oder "raus-und-rein-klicken");
    KeyboardPushed() arbeitet wieder richtig, GetAsyncKeyState_() bleibt weiter hängen!
    Bild

Wie immer vielen Dank im Voraus!

Code: Alles auswählen

EnableExplicit

Procedure.s GetVirtualKeyConstant( VirtualKey )
  CompilerSelect SizeOf( Integer )
    CompilerCase SizeOf( Quad ) : Protected *Ergebnis.String = ?VK_Table + ( VirtualKey & $FF ) << 3
    CompilerCase SizeOf( Long ) : Protected *Ergebnis.String = ?VK_Table + ( VirtualKey & $FF ) << 2
  CompilerEndSelect
  ProcedureReturn *Ergebnis\s
  DataSection ; VK-Table
    VK_Table:
    Data.i ?VK_00,?VK_01,?VK_02,?VK_03,?VK_04,?VK_05,?VK_06,?VK_07,?VK_08,?VK_09,?VK_0A,?VK_0B,?VK_0C,?VK_0D,?VK_0E,?VK_0F
    Data.i ?VK_10,?VK_11,?VK_12,?VK_13,?VK_14,?VK_15,?VK_16,?VK_17,?VK_18,?VK_19,?VK_1A,?VK_1B,?VK_1C,?VK_1D,?VK_1E,?VK_1F
    Data.i ?VK_20,?VK_21,?VK_22,?VK_23,?VK_24,?VK_25,?VK_26,?VK_27,?VK_28,?VK_29,?VK_2A,?VK_2B,?VK_2C,?VK_2D,?VK_2E,?VK_2F
    Data.i ?VK_30,?VK_31,?VK_32,?VK_33,?VK_34,?VK_35,?VK_36,?VK_37,?VK_38,?VK_39,?VK_3A,?VK_3B,?VK_3C,?VK_3D,?VK_3E,?VK_3F
    Data.i ?VK_40,?VK_41,?VK_42,?VK_43,?VK_44,?VK_45,?VK_46,?VK_47,?VK_48,?VK_49,?VK_4A,?VK_4B,?VK_4C,?VK_4D,?VK_4E,?VK_4F
    Data.i ?VK_50,?VK_51,?VK_52,?VK_53,?VK_54,?VK_55,?VK_56,?VK_57,?VK_58,?VK_59,?VK_5A,?VK_5B,?VK_5C,?VK_5D,?VK_5E,?VK_5F
    Data.i ?VK_60,?VK_61,?VK_62,?VK_63,?VK_64,?VK_65,?VK_66,?VK_67,?VK_68,?VK_69,?VK_6A,?VK_6B,?VK_6C,?VK_6D,?VK_6E,?VK_6F
    Data.i ?VK_70,?VK_71,?VK_72,?VK_73,?VK_74,?VK_75,?VK_76,?VK_77,?VK_78,?VK_79,?VK_7A,?VK_7B,?VK_7C,?VK_7D,?VK_7E,?VK_7F
    Data.i ?VK_80,?VK_81,?VK_82,?VK_83,?VK_84,?VK_85,?VK_86,?VK_87,?VK_88,?VK_89,?VK_8A,?VK_8B,?VK_8C,?VK_8D,?VK_8E,?VK_8F
    Data.i ?VK_90,?VK_91,?VK_92,?VK_93,?VK_94,?VK_95,?VK_96,?VK_97,?VK_98,?VK_99,?VK_9A,?VK_9B,?VK_9C,?VK_9D,?VK_9E,?VK_9F
    Data.i ?VK_A0,?VK_A1,?VK_A2,?VK_A3,?VK_A4,?VK_A5,?VK_A6,?VK_A7,?VK_A8,?VK_A9,?VK_AA,?VK_AB,?VK_AC,?VK_AD,?VK_AE,?VK_AF
    Data.i ?VK_B0,?VK_B1,?VK_B2,?VK_B3,?VK_B4,?VK_B5,?VK_B6,?VK_B7,?VK_B8,?VK_B9,?VK_BA,?VK_BB,?VK_BC,?VK_BD,?VK_BE,?VK_BF
    Data.i ?VK_C0,?VK_C1,?VK_C2,?VK_C3,?VK_C4,?VK_C5,?VK_C6,?VK_C7,?VK_C8,?VK_C9,?VK_CA,?VK_CB,?VK_CC,?VK_CD,?VK_CE,?VK_CF
    Data.i ?VK_D0,?VK_D1,?VK_D2,?VK_D3,?VK_D4,?VK_D5,?VK_D6,?VK_D7,?VK_D8,?VK_D9,?VK_DA,?VK_DB,?VK_DC,?VK_DD,?VK_DE,?VK_DF
    Data.i ?VK_E0,?VK_E1,?VK_E2,?VK_E3,?VK_E4,?VK_E5,?VK_E6,?VK_E7,?VK_E8,?VK_E9,?VK_EA,?VK_EB,?VK_EC,?VK_ED,?VK_EE,?VK_EF
    Data.i ?VK_F0,?VK_F1,?VK_F2,?VK_F3,?VK_F4,?VK_F5,?VK_F6,?VK_F7,?VK_F8,?VK_F9,?VK_FA,?VK_FB,?VK_FC,?VK_FD,?VK_FE,?VK_FF
    VK_00: : Data.s "$00/0 (illegal)"
    VK_01: : Data.s "#VK_LBUTTON"
    VK_02: : Data.s "#VK_RBUTTON"
    VK_03: : Data.s "#VK_CANCEL"
    VK_04: : Data.s "#VK_MBUTTON"
    VK_05: : Data.s "#VK_XBUTTON1"
    VK_06: : Data.s "#VK_XBUTTON2"
    VK_07: : Data.s "$07/7 (undefined)"
    VK_08: : Data.s "#VK_BACK"
    VK_09: : Data.s "#VK_TAB"
    VK_0A: : Data.s "$0A/10 (reserved)"
    VK_0B: : Data.s "$0B/11 (reserved)"
    VK_0C: : Data.s "#VK_CLEAR"
    VK_0D: : Data.s "#VK_RETURN"
    VK_0E: : Data.s "$0E/14 (undefined)"
    VK_0F: : Data.s "$0F/15 (undefined)"
    VK_10: : Data.s "#VK_SHIFT"
    VK_11: : Data.s "#VK_CONTROL"
    VK_12: : Data.s "#VK_MENU"
    VK_13: : Data.s "#VK_PAUSE"
    VK_14: : Data.s "#VK_CAPITAL"
    VK_15: : Data.s "#VK_KANA/HANGUL"
    VK_16: : Data.s "$16/22 (undefined)"
    VK_17: : Data.s "#VK_JUNJA"
    VK_18: : Data.s "#VK_FINAL"
    VK_19: : Data.s "#VK_KANJI/HANJA"
    VK_1A: : Data.s "$1A/26 (undefined)"
    VK_1B: : Data.s "#VK_ESCAPE"
    VK_1C: : Data.s "#VK_CONVERT"
    VK_1D: : Data.s "#VK_NONCONVERT"
    VK_1E: : Data.s "#VK_ACCEPT"
    VK_1F: : Data.s "#VK_MODECHANGE"
    VK_20: : Data.s "#VK_SPACE"
    VK_21: : Data.s "#VK_PRIOR"
    VK_22: : Data.s "#VK_NEXT"
    VK_23: : Data.s "#VK_END"
    VK_24: : Data.s "#VK_HOME"
    VK_25: : Data.s "#VK_LEFT"
    VK_26: : Data.s "#VK_UP"
    VK_27: : Data.s "#VK_RIGHT"
    VK_28: : Data.s "#VK_DOWN"
    VK_29: : Data.s "#VK_SELECT"
    VK_2A: : Data.s "#VK_PRINT"
    VK_2B: : Data.s "#VK_EXECUTE"
    VK_2C: : Data.s "#VK_SNAPSHOT"
    VK_2D: : Data.s "#VK_INSERT"
    VK_2E: : Data.s "#VK_DELETE"
    VK_2F: : Data.s "#VK_HELP"
    VK_30: : Data.s "#VK_0"
    VK_31: : Data.s "#VK_1"
    VK_32: : Data.s "#VK_2"
    VK_33: : Data.s "#VK_3"
    VK_34: : Data.s "#VK_4"
    VK_35: : Data.s "#VK_5"
    VK_36: : Data.s "#VK_6"
    VK_37: : Data.s "#VK_7"
    VK_38: : Data.s "#VK_8"
    VK_39: : Data.s "#VK_9"
    VK_3A: : Data.s "$3A/58 (undefined)"
    VK_3B: : Data.s "$3B/59 (undefined)"
    VK_3C: : Data.s "$3C/60 (undefined)"
    VK_3D: : Data.s "$3D/61 (undefined)"
    VK_3E: : Data.s "$3E/62 (undefined)"
    VK_3F: : Data.s "$3F/63 (undefined)"
    VK_40: : Data.s "$40/64 (undefined)"
    VK_41: : Data.s "#VK_A"
    VK_42: : Data.s "#VK_B"
    VK_43: : Data.s "#VK_C"
    VK_44: : Data.s "#VK_D"
    VK_45: : Data.s "#VK_E"
    VK_46: : Data.s "#VK_F"
    VK_47: : Data.s "#VK_G"
    VK_48: : Data.s "#VK_H"
    VK_49: : Data.s "#VK_I"
    VK_4A: : Data.s "#VK_J"
    VK_4B: : Data.s "#VK_K"
    VK_4C: : Data.s "#VK_L"
    VK_4D: : Data.s "#VK_M"
    VK_4E: : Data.s "#VK_N"
    VK_4F: : Data.s "#VK_O"
    VK_50: : Data.s "#VK_P"
    VK_51: : Data.s "#VK_Q"
    VK_52: : Data.s "#VK_R"
    VK_53: : Data.s "#VK_S"
    VK_54: : Data.s "#VK_T"
    VK_55: : Data.s "#VK_U"
    VK_56: : Data.s "#VK_V"
    VK_57: : Data.s "#VK_W"
    VK_58: : Data.s "#VK_X"
    VK_59: : Data.s "#VK_Y"
    VK_5A: : Data.s "#VK_Z"
    VK_5B: : Data.s "#VK_LWIN"
    VK_5C: : Data.s "#VK_RWIN"
    VK_5D: : Data.s "#VK_APPS"
    VK_5E: : Data.s "$5E/94 (reserved)"
    VK_5F: : Data.s "#VK_SLEEP"
    VK_60: : Data.s "#VK_NUMPAD0"
    VK_61: : Data.s "#VK_NUMPAD1"
    VK_62: : Data.s "#VK_NUMPAD2"
    VK_63: : Data.s "#VK_NUMPAD3"
    VK_64: : Data.s "#VK_NUMPAD4"
    VK_65: : Data.s "#VK_NUMPAD5"
    VK_66: : Data.s "#VK_NUMPAD6"
    VK_67: : Data.s "#VK_NUMPAD7"
    VK_68: : Data.s "#VK_NUMPAD8"
    VK_69: : Data.s "#VK_NUMPAD9"
    VK_6A: : Data.s "#VK_MULTIPLY"
    VK_6B: : Data.s "#VK_ADD"
    VK_6C: : Data.s "#VK_SEPARATOR"
    VK_6D: : Data.s "#VK_SUBTRACT"
    VK_6E: : Data.s "#VK_DECIMAL"
    VK_6F: : Data.s "#VK_DIVIDE"
    VK_70: : Data.s "#VK_F1"
    VK_71: : Data.s "#VK_F2"
    VK_72: : Data.s "#VK_F3"
    VK_73: : Data.s "#VK_F4"
    VK_74: : Data.s "#VK_F5"
    VK_75: : Data.s "#VK_F6"
    VK_76: : Data.s "#VK_F7"
    VK_77: : Data.s "#VK_F8"
    VK_78: : Data.s "#VK_F9"
    VK_79: : Data.s "#VK_F10"
    VK_7A: : Data.s "#VK_F11"
    VK_7B: : Data.s "#VK_F12"
    VK_7C: : Data.s "#VK_F13"
    VK_7D: : Data.s "#VK_F14"
    VK_7E: : Data.s "#VK_F15"
    VK_7F: : Data.s "#VK_F16"
    VK_80: : Data.s "#VK_F17"
    VK_81: : Data.s "#VK_F18"
    VK_82: : Data.s "#VK_F19"
    VK_83: : Data.s "#VK_F20"
    VK_84: : Data.s "#VK_F21"
    VK_85: : Data.s "#VK_F22"
    VK_86: : Data.s "#VK_F23"
    VK_87: : Data.s "#VK_F24"
    VK_88: : Data.s "$88/136 (unassigned)"
    VK_89: : Data.s "$89/137 (unassigned)"
    VK_8A: : Data.s "$8A/138 (unassigned)"
    VK_8B: : Data.s "$8B/139 (unassigned)"
    VK_8C: : Data.s "$8C/140 (unassigned)"
    VK_8D: : Data.s "$8D/141 (unassigned)"
    VK_8E: : Data.s "$8E/142 (unassigned)"
    VK_8F: : Data.s "$8F/143 (unassigned)"
    VK_90: : Data.s "#VK_NUMLOCK"
    VK_91: : Data.s "#VK_SCROLL"
    VK_92: : Data.s "#VK_OEM_FJ_JISHO"
    VK_93: : Data.s "#VK_OEM_FJ_MASSHOU"
    VK_94: : Data.s "#VK_OEM_FJ_TOUROKU"
    VK_95: : Data.s "#VK_OEM_FJ_LOYA"
    VK_96: : Data.s "#VK_OEM_FJ_ROYA"
    VK_97: : Data.s "$97/151 (unassigned)"
    VK_98: : Data.s "$98/152 (unassigned)"
    VK_99: : Data.s "$99/153 (unassigned)"
    VK_9A: : Data.s "$9A/154 (unassigned)"
    VK_9B: : Data.s "$9B/155 (unassigned)"
    VK_9C: : Data.s "$9C/156 (unassigned)"
    VK_9D: : Data.s "$9D/157 (unassigned)"
    VK_9E: : Data.s "$9E/158 (unassigned)"
    VK_9F: : Data.s "$9F/159 (unassigned)"
    VK_A0: : Data.s "#VK_LSHIFT"
    VK_A1: : Data.s "#VK_RSHIFT"
    VK_A2: : Data.s "#VK_LCONTROL"
    VK_A3: : Data.s "#VK_RCONTROL"
    VK_A4: : Data.s "#VK_LMENU"
    VK_A5: : Data.s "#VK_RMENU"
    VK_A6: : Data.s "#VK_BROWSER_BACK"
    VK_A7: : Data.s "#VK_BROWSER_FORWARD"
    VK_A8: : Data.s "#VK_BROWSER_REFRESH"
    VK_A9: : Data.s "#VK_BROWSER_STOP"
    VK_AA: : Data.s "#VK_BROWSER_SEARCH"
    VK_AB: : Data.s "#VK_BROWSER_FAVORITES"
    VK_AC: : Data.s "#VK_BROWSER_HOME"
    VK_AD: : Data.s "#VK_VOLUME_MUTE"
    VK_AE: : Data.s "#VK_VOLUME_DOWN"
    VK_AF: : Data.s "#VK_VOLUME_UP"
    VK_B0: : Data.s "#VK_MEDIA_NEXT_TRACK"
    VK_B1: : Data.s "#VK_MEDIA_PREV_TRACK"
    VK_B2: : Data.s "#VK_MEDIA_STOP"
    VK_B3: : Data.s "#VK_MEDIA_PLAY_PAUSE"
    VK_B4: : Data.s "#VK_LAUNCH_MAIL"
    VK_B5: : Data.s "#VK_LAUNCH_MEDIA_SELECT"
    VK_B6: : Data.s "#VK_LAUNCH_APP1"
    VK_B7: : Data.s "#VK_LAUNCH_APP2"
    VK_B8: : Data.s "$B8/184 (reserved)"
    VK_B9: : Data.s "$B9/185 (reserved)"
    VK_BA: : Data.s "#VK_OEM_1"
    VK_BB: : Data.s "#VK_OEM_PLUS"
    VK_BC: : Data.s "#VK_OEM_COMMA"
    VK_BD: : Data.s "#VK_OEM_MINUS"
    VK_BE: : Data.s "#VK_OEM_PERIOD"
    VK_BF: : Data.s "#VK_OEM_2"
    VK_C0: : Data.s "#VK_OEM_3"
    VK_C1: : Data.s "#VK_ABNT_C1 (?)"
    VK_C2: : Data.s "#VK_ABNT_C2 (?)"
    VK_C3: : Data.s "$C3/195 (reserved)"
    VK_C4: : Data.s "$C4/196 (reserved)"
    VK_C5: : Data.s "$C5/197 (reserved)"
    VK_C6: : Data.s "$C6/198 (reserved)"
    VK_C7: : Data.s "$C7/199 (reserved)"
    VK_C8: : Data.s "$C8/200 (reserved)"
    VK_C9: : Data.s "$C9/201 (reserved)"
    VK_CA: : Data.s "$CA/202 (reserved)"
    VK_CB: : Data.s "$CB/203 (reserved)"
    VK_CC: : Data.s "$CC/204 (reserved)"
    VK_CD: : Data.s "$CD/205 (reserved)"
    VK_CE: : Data.s "$CE/206 (reserved)"
    VK_CF: : Data.s "$CF/207 (reserved)"
    VK_D0: : Data.s "$D0/208 (reserved)"
    VK_D1: : Data.s "$D1/209 (reserved)"
    VK_D2: : Data.s "$D2/210 (reserved)"
    VK_D3: : Data.s "$D3/211 (reserved)"
    VK_D4: : Data.s "$D4/212 (reserved)"
    VK_D5: : Data.s "$D5/213 (reserved)"
    VK_D6: : Data.s "$D6/214 (reserved)"
    VK_D7: : Data.s "$D7/215 (reserved)"
    VK_D8: : Data.s "$D8/216 (unassigned)"
    VK_D9: : Data.s "$D9/217 (unassigned)"
    VK_DA: : Data.s "$DA/218 (unassigned)"
    VK_DB: : Data.s "#VK_OEM_4"
    VK_DC: : Data.s "#VK_OEM_5"
    VK_DD: : Data.s "#VK_OEM_6"
    VK_DE: : Data.s "#VK_OEM_7"
    VK_DF: : Data.s "#VK_OEM_8"
    VK_E0: : Data.s "$E0/224 (reserved)"
    VK_E1: : Data.s "#VK_OEM_AX"
    VK_E2: : Data.s "#VK_OEM_102"
    VK_E3: : Data.s "#VK_ICO_HELP"
    VK_E4: : Data.s "#VK_ICO_00"
    VK_E5: : Data.s "#VK_PROCESSKEY"
    VK_E6: : Data.s "#VK_ICO_CLEAR"
    VK_E7: : Data.s "#VK_PACKET"
    VK_E8: : Data.s "$E8/232 (unassigned)"
    VK_E9: : Data.s "#VK_OEM_RESET"
    VK_EA: : Data.s "#VK_OEM_JUMP"
    VK_EB: : Data.s "#VK_OEM_PA1"
    VK_EC: : Data.s "#VK_OEM_PA2"
    VK_ED: : Data.s "#VK_OEM_PA3"
    VK_EE: : Data.s "#VK_OEM_WSCTRL"
    VK_EF: : Data.s "#VK_OEM_CUSEL"
    VK_F0: : Data.s "#VK_OEM_ATTN"
    VK_F1: : Data.s "#VK_OEM_FINISH"
    VK_F2: : Data.s "#VK_OEM_COPY"
    VK_F3: : Data.s "#VK_OEM_AUTO"
    VK_F4: : Data.s "#VK_OEM_ENLW"
    VK_F5: : Data.s "#VK_OEM_BACKTAB"
    VK_F6: : Data.s "#VK_ATTN"
    VK_F7: : Data.s "#VK_CRSEL"
    VK_F8: : Data.s "#VK_EXSEL"
    VK_F9: : Data.s "#VK_EREOF"
    VK_FA: : Data.s "#VK_PLAY"
    VK_FB: : Data.s "#VK_ZOOM"
    VK_FC: : Data.s "#VK_NONAME"
    VK_FD: : Data.s "#VK_PA1"
    VK_FE: : Data.s "#VK_OEM_CLEAR"
    VK_FF: : Data.s "$FF/255 (illegal)"
  EndDataSection
EndProcedure

Procedure.s GetPBKeyConstant( PB_Key )
  CompilerSelect SizeOf( Integer )
    CompilerCase SizeOf( Quad ) : Protected *Ergebnis.String = ?PBK_Table + ( PB_Key & $FF ) << 3
    CompilerCase SizeOf( Long ) : Protected *Ergebnis.String = ?PBK_Table + ( PB_Key & $FF ) << 2
  CompilerEndSelect
  ProcedureReturn *Ergebnis\s
  DataSection ; PB-Key-Table
    PBK_Table:
    Data.i ?PBK_00,?PBK_01,?PBK_02,?PBK_03,?PBK_04,?PBK_05,?PBK_06,?PBK_07,?PBK_08,?PBK_09,?PBK_0A,?PBK_0B,?PBK_0C,?PBK_0D,?PBK_0E,?PBK_0F
    Data.i ?PBK_10,?PBK_11,?PBK_12,?PBK_13,?PBK_14,?PBK_15,?PBK_16,?PBK_17,?PBK_18,?PBK_19,?PBK_1A,?PBK_1B,?PBK_1C,?PBK_1D,?PBK_1E,?PBK_1F
    Data.i ?PBK_20,?PBK_21,?PBK_22,?PBK_23,?PBK_24,?PBK_25,?PBK_26,?PBK_27,?PBK_28,?PBK_29,?PBK_2A,?PBK_2B,?PBK_2C,?PBK_2D,?PBK_2E,?PBK_2F
    Data.i ?PBK_30,?PBK_31,?PBK_32,?PBK_33,?PBK_34,?PBK_35,?PBK_36,?PBK_37,?PBK_38,?PBK_39,?PBK_3A,?PBK_3B,?PBK_3C,?PBK_3D,?PBK_3E,?PBK_3F
    Data.i ?PBK_40,?PBK_41,?PBK_42,?PBK_43,?PBK_44,?PBK_45,?PBK_46,?PBK_47,?PBK_48,?PBK_49,?PBK_4A,?PBK_4B,?PBK_4C,?PBK_4D,?PBK_4E,?PBK_4F
    Data.i ?PBK_50,?PBK_51,?PBK_52,?PBK_53,?PBK_54,?PBK_55,?PBK_56,?PBK_57,?PBK_58,?PBK_59,?PBK_5A,?PBK_5B,?PBK_5C,?PBK_5D,?PBK_5E,?PBK_5F
    Data.i ?PBK_60,?PBK_61,?PBK_62,?PBK_63,?PBK_64,?PBK_65,?PBK_66,?PBK_67,?PBK_68,?PBK_69,?PBK_6A,?PBK_6B,?PBK_6C,?PBK_6D,?PBK_6E,?PBK_6F
    Data.i ?PBK_70,?PBK_71,?PBK_72,?PBK_73,?PBK_74,?PBK_75,?PBK_76,?PBK_77,?PBK_78,?PBK_79,?PBK_7A,?PBK_7B,?PBK_7C,?PBK_7D,?PBK_7E,?PBK_7F
    Data.i ?PBK_80,?PBK_81,?PBK_82,?PBK_83,?PBK_84,?PBK_85,?PBK_86,?PBK_87,?PBK_88,?PBK_89,?PBK_8A,?PBK_8B,?PBK_8C,?PBK_8D,?PBK_8E,?PBK_8F
    Data.i ?PBK_90,?PBK_91,?PBK_92,?PBK_93,?PBK_94,?PBK_95,?PBK_96,?PBK_97,?PBK_98,?PBK_99,?PBK_9A,?PBK_9B,?PBK_9C,?PBK_9D,?PBK_9E,?PBK_9F
    Data.i ?PBK_A0,?PBK_A1,?PBK_A2,?PBK_A3,?PBK_A4,?PBK_A5,?PBK_A6,?PBK_A7,?PBK_A8,?PBK_A9,?PBK_AA,?PBK_AB,?PBK_AC,?PBK_AD,?PBK_AE,?PBK_AF
    Data.i ?PBK_B0,?PBK_B1,?PBK_B2,?PBK_B3,?PBK_B4,?PBK_B5,?PBK_B6,?PBK_B7,?PBK_B8,?PBK_B9,?PBK_BA,?PBK_BB,?PBK_BC,?PBK_BD,?PBK_BE,?PBK_BF
    Data.i ?PBK_C0,?PBK_C1,?PBK_C2,?PBK_C3,?PBK_C4,?PBK_C5,?PBK_C6,?PBK_C7,?PBK_C8,?PBK_C9,?PBK_CA,?PBK_CB,?PBK_CC,?PBK_CD,?PBK_CE,?PBK_CF
    Data.i ?PBK_D0,?PBK_D1,?PBK_D2,?PBK_D3,?PBK_D4,?PBK_D5,?PBK_D6,?PBK_D7,?PBK_D8,?PBK_D9,?PBK_DA,?PBK_DB,?PBK_DC,?PBK_DD,?PBK_DE,?PBK_DF
    Data.i ?PBK_E0,?PBK_E1,?PBK_E2,?PBK_E3,?PBK_E4,?PBK_E5,?PBK_E6,?PBK_E7,?PBK_E8,?PBK_E9,?PBK_EA,?PBK_EB,?PBK_EC,?PBK_ED,?PBK_EE,?PBK_EF
    Data.i ?PBK_F0,?PBK_F1,?PBK_F2,?PBK_F3,?PBK_F4,?PBK_F5,?PBK_F6,?PBK_F7,?PBK_F8,?PBK_F9,?PBK_FA,?PBK_FB,?PBK_FC,?PBK_FD,?PBK_FE,?PBK_FF
    PBK_00: : Data.s "$00/0 (undefined)"
    PBK_01: : Data.s "#PB_Key_Escape"
    PBK_02: : Data.s "#PB_Key_1"
    PBK_03: : Data.s "#PB_Key_2"
    PBK_04: : Data.s "#PB_Key_3"
    PBK_05: : Data.s "#PB_Key_4"
    PBK_06: : Data.s "#PB_Key_5"
    PBK_07: : Data.s "#PB_Key_6"
    PBK_08: : Data.s "#PB_Key_7"
    PBK_09: : Data.s "#PB_Key_8"
    PBK_0A: : Data.s "#PB_Key_9"
    PBK_0B: : Data.s "#PB_Key_0"
    PBK_0C: : Data.s "#PB_Key_Minus"
    PBK_0D: : Data.s "#PB_Key_Equals"
    PBK_0E: : Data.s "#PB_Key_Back"
    PBK_0F: : Data.s "#PB_Key_Tab"
    PBK_10: : Data.s "#PB_Key_Q"
    PBK_11: : Data.s "#PB_Key_W"
    PBK_12: : Data.s "#PB_Key_E"
    PBK_13: : Data.s "#PB_Key_R"
    PBK_14: : Data.s "#PB_Key_T"
    PBK_15: : Data.s "#PB_Key_Y"
    PBK_16: : Data.s "#PB_Key_U"
    PBK_17: : Data.s "#PB_Key_I"
    PBK_18: : Data.s "#PB_Key_O"
    PBK_19: : Data.s "#PB_Key_P"
    PBK_1A: : Data.s "#PB_Key_LeftBracket"
    PBK_1B: : Data.s "#PB_Key_RightBracket"
    PBK_1C: : Data.s "#PB_Key_Return"
    PBK_1D: : Data.s "#PB_Key_LeftControl"
    PBK_1E: : Data.s "#PB_Key_A"
    PBK_1F: : Data.s "#PB_Key_S"
    PBK_20: : Data.s "#PB_Key_D"
    PBK_21: : Data.s "#PB_Key_F"
    PBK_22: : Data.s "#PB_Key_G"
    PBK_23: : Data.s "#PB_Key_H"
    PBK_24: : Data.s "#PB_Key_J"
    PBK_25: : Data.s "#PB_Key_K"
    PBK_26: : Data.s "#PB_Key_L"
    PBK_27: : Data.s "#PB_Key_SemiColon"
    PBK_28: : Data.s "#PB_Key_Apostrophe"
    PBK_29: : Data.s "#PB_Key_Grave"
    PBK_2A: : Data.s "#PB_Key_LeftShift"
    PBK_2B: : Data.s "#PB_Key_BackSlash"
    PBK_2C: : Data.s "#PB_Key_Z"
    PBK_2D: : Data.s "#PB_Key_X"
    PBK_2E: : Data.s "#PB_Key_C"
    PBK_2F: : Data.s "#PB_Key_V"
    PBK_30: : Data.s "#PB_Key_B"
    PBK_31: : Data.s "#PB_Key_N"
    PBK_32: : Data.s "#PB_Key_M"
    PBK_33: : Data.s "#PB_Key_Comma"
    PBK_34: : Data.s "#PB_Key_Period"
    PBK_35: : Data.s "#PB_Key_Slash"
    PBK_36: : Data.s "#PB_Key_RightShift"
    PBK_37: : Data.s "#PB_Key_Multiply"
    PBK_38: : Data.s "#PB_Key_LeftAlt"
    PBK_39: : Data.s "#PB_Key_Space"
    PBK_3A: : Data.s "#PB_Key_Capital"
    PBK_3B: : Data.s "#PB_Key_F1"
    PBK_3C: : Data.s "#PB_Key_F2"
    PBK_3D: : Data.s "#PB_Key_F3"
    PBK_3E: : Data.s "#PB_Key_F4"
    PBK_3F: : Data.s "#PB_Key_F5"
    PBK_40: : Data.s "#PB_Key_F6"
    PBK_41: : Data.s "#PB_Key_F7"
    PBK_42: : Data.s "#PB_Key_F8"
    PBK_43: : Data.s "#PB_Key_F9"
    PBK_44: : Data.s "#PB_Key_F10"
    PBK_45: : Data.s "#PB_Key_NumLock"
    PBK_46: : Data.s "#PB_Key_Scroll"
    PBK_47: : Data.s "#PB_Key_Pad7"
    PBK_48: : Data.s "#PB_Key_Pad8"
    PBK_49: : Data.s "#PB_Key_Pad9"
    PBK_4A: : Data.s "#PB_Key_Subtract"
    PBK_4B: : Data.s "#PB_Key_Pad4"
    PBK_4C: : Data.s "#PB_Key_Pad5"
    PBK_4D: : Data.s "#PB_Key_Pad6"
    PBK_4E: : Data.s "#PB_Key_Add"
    PBK_4F: : Data.s "#PB_Key_Pad1"
    PBK_50: : Data.s "#PB_Key_Pad2"
    PBK_51: : Data.s "#PB_Key_Pad3"
    PBK_52: : Data.s "#PB_Key_Pad0"
    PBK_53: : Data.s "#PB_Key_Decimal"
    PBK_54: : Data.s "$54/84 (undefined)"
    PBK_55: : Data.s "$55/85 (undefined)"
    PBK_56: : Data.s "$56/86 (undefined)"
    PBK_57: : Data.s "#PB_Key_F11"
    PBK_58: : Data.s "#PB_Key_F12"
    PBK_59: : Data.s "$59/89 (undefined)"
    PBK_5A: : Data.s "$5A/90 (undefined)"
    PBK_5B: : Data.s "$5B/91 (undefined)"
    PBK_5C: : Data.s "$5C/92 (undefined)"
    PBK_5D: : Data.s "$5D/93 (undefined)"
    PBK_5E: : Data.s "$5E/94 (undefined)"
    PBK_5F: : Data.s "$5F/95 (undefined)"
    PBK_60: : Data.s "$60/96 (undefined)"
    PBK_61: : Data.s "$61/97 (undefined)"
    PBK_62: : Data.s "$62/98 (undefined)"
    PBK_63: : Data.s "$63/99 (undefined)"
    PBK_64: : Data.s "$64/100 (undefined)"
    PBK_65: : Data.s "$65/101 (undefined)"
    PBK_66: : Data.s "$66/102 (undefined)"
    PBK_67: : Data.s "$67/103 (undefined)"
    PBK_68: : Data.s "$68/104 (undefined)"
    PBK_69: : Data.s "$69/105 (undefined)"
    PBK_6A: : Data.s "$6A/106 (undefined)"
    PBK_6B: : Data.s "$6B/107 (undefined)"
    PBK_6C: : Data.s "$6C/108 (undefined)"
    PBK_6D: : Data.s "$6D/109 (undefined)"
    PBK_6E: : Data.s "$6E/110 (undefined)"
    PBK_6F: : Data.s "$6F/111 (undefined)"
    PBK_70: : Data.s "$70/112 (undefined)"
    PBK_71: : Data.s "$71/113 (undefined)"
    PBK_72: : Data.s "$72/114 (undefined)"
    PBK_73: : Data.s "$73/115 (undefined)"
    PBK_74: : Data.s "$74/116 (undefined)"
    PBK_75: : Data.s "$75/117 (undefined)"
    PBK_76: : Data.s "$76/118 (undefined)"
    PBK_77: : Data.s "$77/119 (undefined)"
    PBK_78: : Data.s "$78/120 (undefined)"
    PBK_79: : Data.s "$79/121 (undefined)"
    PBK_7A: : Data.s "$7A/122 (undefined)"
    PBK_7B: : Data.s "$7B/123 (undefined)"
    PBK_7C: : Data.s "$7C/124 (undefined)"
    PBK_7D: : Data.s "$7D/125 (undefined)"
    PBK_7E: : Data.s "$7E/126 (undefined)"
    PBK_7F: : Data.s "$7F/127 (undefined)"
    PBK_80: : Data.s "$80/128 (undefined)"
    PBK_81: : Data.s "$81/129 (undefined)"
    PBK_82: : Data.s "$82/130 (undefined)"
    PBK_83: : Data.s "$83/131 (undefined)"
    PBK_84: : Data.s "$84/132 (undefined)"
    PBK_85: : Data.s "$85/133 (undefined)"
    PBK_86: : Data.s "$86/134 (undefined)"
    PBK_87: : Data.s "$87/135 (undefined)"
    PBK_88: : Data.s "$88/136 (undefined)"
    PBK_89: : Data.s "$89/137 (undefined)"
    PBK_8A: : Data.s "$8A/138 (undefined)"
    PBK_8B: : Data.s "$8B/139 (undefined)"
    PBK_8C: : Data.s "$8C/140 (undefined)"
    PBK_8D: : Data.s "$8D/141 (undefined)"
    PBK_8E: : Data.s "$8E/142 (undefined)"
    PBK_8F: : Data.s "$8F/143 (undefined)"
    PBK_90: : Data.s "$90/144 (undefined)"
    PBK_91: : Data.s "$91/145 (undefined)"
    PBK_92: : Data.s "$92/146 (undefined)"
    PBK_93: : Data.s "$93/147 (undefined)"
    PBK_94: : Data.s "$94/148 (undefined)"
    PBK_95: : Data.s "$95/149 (undefined)"
    PBK_96: : Data.s "$96/150 (undefined)"
    PBK_97: : Data.s "$97/151 (undefined)"
    PBK_98: : Data.s "$98/152 (undefined)"
    PBK_99: : Data.s "$99/153 (undefined)"
    PBK_9A: : Data.s "$9A/154 (undefined)"
    PBK_9B: : Data.s "$9B/155 (undefined)"
    PBK_9C: : Data.s "#PB_Key_PadEnter"
    PBK_9D: : Data.s "#PB_Key_RightControl"
    PBK_9E: : Data.s "$9E/158 (undefined)"
    PBK_9F: : Data.s "$9F/159 (undefined)"
    PBK_A0: : Data.s "$A0/160 (undefined)"
    PBK_A1: : Data.s "$A1/161 (undefined)"
    PBK_A2: : Data.s "$A2/162 (undefined)"
    PBK_A3: : Data.s "$A3/163 (undefined)"
    PBK_A4: : Data.s "$A4/164 (undefined)"
    PBK_A5: : Data.s "$A5/165 (undefined)"
    PBK_A6: : Data.s "$A6/166 (undefined)"
    PBK_A7: : Data.s "$A7/167 (undefined)"
    PBK_A8: : Data.s "$A8/168 (undefined)"
    PBK_A9: : Data.s "$A9/169 (undefined)"
    PBK_AA: : Data.s "$AA/170 (undefined)"
    PBK_AB: : Data.s "$AB/171 (undefined)"
    PBK_AC: : Data.s "$AC/172 (undefined)"
    PBK_AD: : Data.s "$AD/173 (undefined)"
    PBK_AE: : Data.s "$AE/174 (undefined)"
    PBK_AF: : Data.s "$AF/175 (undefined)"
    PBK_B0: : Data.s "$B0/176 (undefined)"
    PBK_B1: : Data.s "$B1/177 (undefined)"
    PBK_B2: : Data.s "$B2/178 (undefined)"
    PBK_B3: : Data.s "#PB_Key_PadComma"
    PBK_B4: : Data.s "$B4/180 (undefined)"
    PBK_B5: : Data.s "#PB_Key_Divide"
    PBK_B6: : Data.s "$B6/182 (undefined)"
    PBK_B7: : Data.s "$B7/183 (undefined)"
    PBK_B8: : Data.s "#PB_Key_RightAlt"
    PBK_B9: : Data.s "$B9/185 (undefined)"
    PBK_BA: : Data.s "$BA/186 (undefined)"
    PBK_BB: : Data.s "$BB/187 (undefined)"
    PBK_BC: : Data.s "$BC/188 (undefined)"
    PBK_BD: : Data.s "$BD/189 (undefined)"
    PBK_BE: : Data.s "$BE/190 (undefined)"
    PBK_BF: : Data.s "$BF/191 (undefined)"
    PBK_C0: : Data.s "$C0/192 (undefined)"
    PBK_C1: : Data.s "$C1/193 (undefined)"
    PBK_C2: : Data.s "$C2/194 (undefined)"
    PBK_C3: : Data.s "$C3/195 (undefined)"
    PBK_C4: : Data.s "$C4/196 (undefined)"
    PBK_C5: : Data.s "#PB_Key_Pause"
    PBK_C6: : Data.s "$C6/198 (undefined)"
    PBK_C7: : Data.s "#PB_Key_Home"
    PBK_C8: : Data.s "#PB_Key_Up"
    PBK_C9: : Data.s "#PB_Key_PageUp"
    PBK_CA: : Data.s "$CA/202 (undefined)"
    PBK_CB: : Data.s "#PB_Key_Left"
    PBK_CC: : Data.s "$CC/204 (undefined)"
    PBK_CD: : Data.s "#PB_Key_Right"
    PBK_CE: : Data.s "$CE/206 (undefined)"
    PBK_CF: : Data.s "#PB_Key_End"
    PBK_D0: : Data.s "#PB_Key_Down"
    PBK_D1: : Data.s "#PB_Key_PageDown"
    PBK_D2: : Data.s "#PB_Key_Insert"
    PBK_D3: : Data.s "#PB_Key_Delete"
    PBK_D4: : Data.s "$D4/212 (undefined)"
    PBK_D5: : Data.s "$D5/213 (undefined)"
    PBK_D6: : Data.s "$D6/214 (undefined)"
    PBK_D7: : Data.s "$D7/215 (undefined)"
    PBK_D8: : Data.s "$D8/216 (undefined)"
    PBK_D9: : Data.s "$D9/217 (undefined)"
    PBK_DA: : Data.s "$DA/218 (undefined)"
    PBK_DB: : Data.s "$DB/219 (undefined)"
    PBK_DC: : Data.s "$DC/220 (undefined)"
    PBK_DD: : Data.s "$DD/221 (undefined)"
    PBK_DE: : Data.s "$DE/222 (undefined)"
    PBK_DF: : Data.s "$DF/223 (undefined)"
    PBK_E0: : Data.s "$E0/224 (undefined)"
    PBK_E1: : Data.s "$E1/225 (undefined)"
    PBK_E2: : Data.s "$E2/226 (undefined)"
    PBK_E3: : Data.s "$E3/227 (undefined)"
    PBK_E4: : Data.s "$E4/228 (undefined)"
    PBK_E5: : Data.s "$E5/229 (undefined)"
    PBK_E6: : Data.s "$E6/230 (undefined)"
    PBK_E7: : Data.s "$E7/231 (undefined)"
    PBK_E8: : Data.s "$E8/232 (undefined)"
    PBK_E9: : Data.s "$E9/233 (undefined)"
    PBK_EA: : Data.s "$EA/234 (undefined)"
    PBK_EB: : Data.s "$EB/235 (undefined)"
    PBK_EC: : Data.s "$EC/236 (undefined)"
    PBK_ED: : Data.s "$ED/237 (undefined)"
    PBK_EE: : Data.s "$EE/238 (undefined)"
    PBK_EF: : Data.s "$EF/239 (undefined)"
    PBK_F0: : Data.s "$F0/240 (undefined)"
    PBK_F1: : Data.s "$F1/241 (undefined)"
    PBK_F2: : Data.s "$F2/242 (undefined)"
    PBK_F3: : Data.s "$F3/243 (undefined)"
    PBK_F4: : Data.s "$F4/244 (undefined)"
    PBK_F5: : Data.s "$F5/245 (undefined)"
    PBK_F6: : Data.s "$F6/246 (undefined)"
    PBK_F7: : Data.s "$F7/247 (undefined)"
    PBK_F8: : Data.s "$F8/248 (undefined)"
    PBK_F9: : Data.s "$F9/249 (undefined)"
    PBK_FA: : Data.s "$FA/250 (undefined)"
    PBK_FB: : Data.s "$FB/251 (undefined)"
    PBK_FC: : Data.s "$FC/252 (undefined)"
    PBK_FD: : Data.s "$FD/253 (undefined)"
    PBK_FE: : Data.s "$FE/254 (undefined)"
    PBK_FF: : Data.s "#PB_Key_All"
  EndDataSection
EndProcedure

If OpenWindow( 0 , #PB_Ignore , #PB_Ignore , 320 , 70 , "KeyConstInfo" ) = #False 
  MessageRequester( "Fehler" , "OpenWindow() fehlgeschlagen." + #CRLF$ + "KeyConstInfo wird nun beendet..." ) : End
EndIf

If InitSprite() = #False
  MessageRequester( "Fehler" , "InitSprite() fehlgeschlagen." + #CRLF$ + "KeyConstInfo wird nun beendet..." ) : End
EndIf

If OpenWindowedScreen( WindowID(0) , 0 , 0 , WindowWidth(0) , WindowHeight(0) ) = #False
  MessageRequester( "Fehler" , "OpenWindowedScreen() fehlgeschlagen." + #CRLF$ + "KeyConstInfo wird nun beendet..." ) : End
EndIf

If InitKeyboard() = #False
  MessageRequester( "Fehler" , "InitKeyboard() fehlgeschlagen." + #CRLF$ + "KeyConstInfo wird nun beendet..." ) : End
EndIf

Repeat
  
  Define i
  
  ExamineKeyboard()
  Define PBKey$ = "[ kein Tastendruck ]"
  For i = 0 To $FF
    If KeyboardPushed( i )
      Define PBKey$ = GetPBKeyConstant( i )
      Break
    EndIf
  Next
  
  Define VKey$ = "[ kein Tastendruck ]"
  For i = 0 To $FF
    If GetAsyncKeyState_( i ) & $8000
      Define VKey$ = GetVirtualKeyConstant( i )
      Break
    EndIf
  Next
  
  ClearScreen( 0 )
  
  If StartDrawing( ScreenOutput() )
    DrawText(  10 , 10 , "PureBasic-Key:" , $FFFFFF , 0 )
    DrawText( 150 , 10 , PBKey$           , $FFFFFF , 0 )
    DrawText(  10 , 30 , "Virutal-Key:"   , $FFFFFF , 0 )
    DrawText( 150 , 30 , VKey$            , $FFFFFF , 0 )
    StopDrawing()
  EndIf
  
  FlipBuffers()
  
Until WaitWindowEvent() = #PB_Event_CloseWindow
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Tastaturtreiber-Bug?! (Windows)

Beitrag von Regenduft »

Nachtrag: Die Indizien mehren sich, dass es ein Treiber-Bug ist (Dell Studio 1558 Laptop). Ich habe mal per Low-Level-Keyboard-Hook debuggt (ich poste den Code lieber nicht, da ich "Hook-Noob" bin) und mal die Media-Tasten durch probiert. Wie man sieht fehlen bei #VK_VOLUME_DOWN und #VK_VOLUME_UP die Meldungen, dass die Tasten wieder losgelassen wurden... oder interpretiere ich hier etwas falsch?

Bild
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Tastaturtreiber-Bug?! (Windows)

Beitrag von NicTheQuick »

Sieht echt komisch aus. Aber da du jetzt ja schon einen LowLevel-Keyboardhook hast, könntest du den ja gleich dafür benutzen das Problem zu beseitigen, indem du wenige Millisekunden nach einem Keydown einfach ein Keyup schickst. Ansonsten dem Treiberhersteller eine Mail schreiben.
Bild
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Tastaturtreiber-Bug?! (Windows)

Beitrag von Regenduft »

[ EDIT: sinnloses Offtopic entfernt ]

Danke für die Antwort!

Habe jetzt mal einen kleinen Testcode gebastelt, der soweit schonmal läuft! Allerdings werde ich noch das PostEvent() (bei dem ich zum schnellen Testen die Parameter böse zweckentfremdet habe) durch ein SignalSemaphore() ersetzen, also das ganze mit einem Thread versuchen zu realisieren.

Das PostEvent() bremst böse aus... Dachte nicht, dass die Event-Queue sofort beim Aufruf vom PostEvent() schon weiter abgefrühstückt wird...

Code: Alles auswählen

EnableExplicit

CompilerIf Defined(LLKHF_EXTENDED,#PB_Constant)=0 : #LLKHF_EXTENDED = #KF_EXTENDED >> 8 : CompilerElse : CompilerError "inzwischen definiert" : CompilerEndIf
CompilerIf Defined(LLKHF_INJECTED,#PB_Constant)=0 : #LLKHF_INJECTED = $00000010         : CompilerElse : CompilerError "inzwischen definiert" : CompilerEndIf
CompilerIf Defined(LLKHF_ALTDOWN ,#PB_Constant)=0 : #LLKHF_ALTDOWN  = #KF_ALTDOWN >> 8  : CompilerElse : CompilerError "inzwischen definiert" : CompilerEndIf
CompilerIf Defined(LLKHF_UP      ,#PB_Constant)=0 : #LLKHF_UP       = #KF_UP >> 8       : CompilerElse : CompilerError "inzwischen definiert" : CompilerEndIf

Global KeyboardHookID

Procedure LowLevelKeyboardProc( nCode , wParam, *lParam.KBDLLHOOKSTRUCT )
  With *lParam
    If nCode = #HC_ACTION And ( \vkCode = #VK_VOLUME_UP Or \vkCode = #VK_VOLUME_DOWN )
      PostEvent( #PB_Event_FirstCustomValue , \vkCode , \scanCode , \flags , \time )
    EndIf
  EndWith
  ProcedureReturn CallNextHookEx_( 0 , nCode , wParam , *lParam )
EndProcedure

Procedure CALLBACK__PB_Event_FirstCustomValue()
  
  Define llFlags = EventType()
  
  If llFlags & #LLKHF_EXTENDED And llFlags & ( #LLKHF_INJECTED | #LLKHF_ALTDOWN | #LLKHF_UP ) = #False
    
    Define KeyRelease.INPUT
    With KeyRelease
      \type       = #INPUT_KEYBOARD
      \ki\wVk     = EventWindow()
      \ki\wScan   = EventGadget()
      \ki\dwFlags = #KEYEVENTF_EXTENDEDKEY | #KEYEVENTF_KEYUP
      \ki\time    = EventData() + 100
      
      Delay( 100 )
      
      If SendInput_( 1 , @KeyRelease , SizeOf(INPUT) ) = #False
        MessageRequester( "Dell-Studio-1558-Keyfix" , "SendInput_() = #False" , #MB_ICONERROR )
        If KeyboardHookID : UnhookWindowsHookEx_( KeyboardHookID ) : End : EndIf
      EndIf
      
    EndWith
    
  EndIf
  
  
EndProcedure

If OpenWindow( 0 , 0 , 0 , 0 , 0 , "Dell-Studio-1558-Keyfix" , #PB_Window_Invisible ) = #False
  MessageRequester( "Dell-Studio-1558-Keyfix" , "OpenWindow() = #False" , #MB_ICONERROR )
  End
EndIf
BindEvent( #PB_Event_FirstCustomValue , @CALLBACK__PB_Event_FirstCustomValue() )
KeyboardHookID = SetWindowsHookEx_( #WH_KEYBOARD_LL , @LowLevelKeyboardProc() , 0 , 0 )

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
If KeyboardHookID : UnhookWindowsHookEx_( KeyboardHookID ) : End : EndIf
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten