EDK2开发UEFI应用无法读取用户输入问题求助
问题分析与解决方案
你的代码调用ReadKeyStroke时直接返回错误,核心原因是这个函数是非阻塞的——如果调用瞬间没有按键输入,它会立刻返回EFI_NOT_READY,不会等待用户按键。
修复方案
修改代码,先调用ConIn->WaitForKey等待用户输入,确保有按键后再读取:
#include "UserInput.h" EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable) { EFI_STATUS Status; EFI_INPUT_KEY Key; Print(L"Enter something: "); // 先等待用户按下按键 Status = SystemTable->ConIn->WaitForKey(SystemTable->ConIn); if (EFI_ERROR(Status)) { Print(L"Failed to wait for input\n"); return Status; } // 此时读取按键不会返回未就绪错误 Status = SystemTable->ConIn->ReadKeyStroke(SystemTable->ConIn, &Key); if (EFI_ERROR(Status)) { Print(L"Failed to read user input\n"); return Status; } Print(L"\nUser input: %c\n", Key.UnicodeChar); return EFI_SUCCESS; }
补充说明
WaitForKey是阻塞函数,会一直等待直到有按键输入,之后再调用ReadKeyStroke就能确保读取到有效输入。- 如果需要处理连续输入或特殊按键(比如功能键),可以循环调用这两个函数,同时判断
Key.ScanCode的值(非0时是扫描码,对应特殊按键)。
内容的提问来源于stack exchange,提问作者Shmurkio
相关产品推荐
相关产品推荐

