You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:01:00