在Shell下面编写工具程序,我们经常需要和用户进行交互,需要取得客户按键的信息。
对于这个问题,可以使用 EFI_SIMPLE_TEXT_INPUT_PROTOCOL 的 ReadKeyStroke 来解决【参考1】
写一个小程序来验证一下
#include <Uefi.h> #include <Library/UefiLib.h> #include <Library/ShellCEntryLib.h> #include <stdio.h> #include <stdlib.h> #include <wchar.h> #include <time.h> #include <Protocol/EfiShell.h> #include <Library/ShellLib.h> #include <Protocol/SimpleFileSystem.h> #include <Protocol/BlockIo.h> #include <Library/DevicePathLib.h> #include <Library/HandleParsingLib.h> #include <Library/SortLib.h> #include <Library/MemoryAllocationLib.h> #include <Library/BaseMemoryLib.h> extern EFI_BOOT_SERVICES *gBS; extern EFI_SYSTEM_TABLE *gST; extern EFI_RUNTIME_SERVICES *gRT; extern EFI_SHELL_ENVIRONMENT2 *mEfiShellEnvironment2; extern EFI_HANDLE gImageHandle; int EFIAPI main ( IN int Argc, IN char **Argv ) { EFI_INPUT_KEY Key; EFI_STATUS Status; while (1) { Status= gST -> ConIn -> ReadKeyStroke(gST->ConIn,&Key); if (Status == EFI_SUCCESS) { break; } gST -> ConOut -> OutputString(gST->ConOut,L"Test......"); gBS->Stall(500); } Print(L"\n\r Scancode [%d], UnicodeChar [%c] \n\r",Key.ScanCode,Key.UnicodeChar); return EFI_SUCCESS; }
按下 F1 检测结果:
按下 q键 检测结果:
代码下载
参考:
1.UEFI 2.4 P445