UEFI - 读取键盘按键并打印

 查询获取键盘按键所需要用到的Protocol

EFI_INPUT_KEY用来存储按键信息

那我们开始操作了,以下是示例代码

EFI_STATUS
EFIAPI
MainEntryPoint (
    IN EFI_HANDLE                     ImageHandle,
    IN EFI_SYSTEM_TABLE               *SystemTable )
{
    EFI_STATUS                Status;

    UINTN   Index = 0;
    UINTN   InputIndex = 0;
    CHAR16  InputKey[256];
    EFI_INPUT_KEY Key;
    EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
    
    //查询Handler是否支持指定的Protocol 
    Status = gBS->HandleProtocol (
                    gST->ConsoleInHandle,
                    &gEfiSimpleTextInProtocolGuid, 
                    (VOID*)&ConIn);
    if (EFI_ERROR(Status)) {
        return Status;
    }

    //打印要输入按键的提示
    gST->ConOut->OutputString(gST->ConOut, L"please press any key\n\r");

    while (TRUE)
    {
        //等待用户按下按键
        gBS->WaitForEvent (1, &gST->ConIn->WaitForKey, &Index);
        //读取到用户按下的按键并传值到变量Key
        Status = ConIn->ReadKeyStroke (ConIn, &Key);
        
        //按回车键结束
        if (Key.UnicodeChar == L'\r') 
        {
            gST->ConOut->OutputString(gST->ConOut, L"\n\r");
            break;
        }

        //将用户按下的按键字符遍历组合成字符串
        InputKey[InputIndex++] = Key.UnicodeChar;
        //打印用户按下的按键
        gST->ConOut->OutputString(gST->ConOut, &Key.UnicodeChar);
    }

    //以空字符结束
    InputKey[InputIndex] = '\0';
    
    //打印输入完的字符串
    gST->ConOut->OutputString(gST->ConOut, InputKey);

    return EFI_SUCCESS;

}

在Shell下运行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值