在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


