簡體   English   中英

非阻塞式鍵盤輸入x64 Windows匯編/ C ++

[英]Non-blocking keyboard input x64 windows assembly / c++

我需要在Windows x64匯編中的代碼將:

a)以非阻塞方式從用戶鍵盤(stdin)讀取數據。

b)檢查是否有數據的方式,所以我知道我應該已經調用readFile還是跳過此步驟

c)修正我到目前為止所做的實現

到目前為止,我嘗試了功能PeekNamedPipe,但它似乎並不起作用。 這是我到目前為止的代碼:

mov     rcx,        dword -10
sub     rsp,        28h
call    GetStdHandle
add     rsp,        28h
mov     [std_in_handle],        rax

sub     rsp,        30h
mov rcx, qword [std_in_handle]
mov rdx, qword 0
mov r8d, dword 0
mov r9, qword 0
mov qword [rsp+0x20],   bytes_available
mov qword [rsp+0x28],   0
call PeekNamedPipe
add     rsp,        30h

cmp dword [bytes_available],    dword 0
je  .skip_reading_input

sub     rsp,        28h
mov rcx, qword [std_in_handle]
mov rdx, qword input_char
mov r8d, dword 1
mov r9, qword BytesRead
mov qword [rsp+0x20], 0
call ReadFile
add     rsp,        28h

.skip_reading_input

事實是,即使我在鍵盤上鍵入內容,bytes_available中的值也始終為0,因此始終會跳過readfile。

我設法使用此功能解決了我的特殊問題

外部GetAsyncKeyState

自上次調用該函數以來,它具有返回鍵或返回鍵時返回給定值的選項-因此我在程序開始時調用了此函數一次,然后檢查自該時間以來是否已調用該函數。 但是,使用這種方法時會遇到很多問題,因此我將盡快檢查其他人建議的問題,並可能會發布更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM