[tkinter][Windows]Unexpected state report for the tab key
eryksun at gmail.com
Mon Oct 25 02:48:22 EDT 2021
On 10/24/21, Stefan Ram <ram at zedat.fu-berlin.de> wrote:
> ram at zedat.fu-berlin.de (Stefan Ram) writes:
>>tab_down_hllDll.GetKeyState(tab_down_VK_TAB) & 0b1000000000000000
> In the meantime, I read about "GetAsyncKeyState". I thought that
> this would solve my problem, but no.
Odd. It works for me in the classic console and the Windows Terminal
pseudoconsole. The tab key's up/down state is updated immediately.
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
user32 = ctypes.WinDLL('user32', use_last_error=True)
VK_TAB = 0x09
return bool(user32.GetAsyncKeyState(VK_TAB) & 0x8000)
"""Flush the input buffer of the process (pseudo)console."""
with open('conin$') as f:
h = msvcrt.get_osfhandle(f.fileno())
for i in range(100):
print('tab down:', tab_down())
Flushing the console input buffer isn't necessary. I just prefer it
instead of leaving the key presses in the buffer.
Usually a GUI wants GetKeyState() instead, which is synchronized with
input messages in the thread's message queue as they're processed. But
GetAsyncKeyState() should do what you want, if you don't need
synchronization with input messages.
More information about the Python-list