Программно получить ключ меню загрузки BIOS

Как я могу программно пройти через то, что означает клавиша меню загрузки BIOS (например, F11) на конкретном компьютере. Скажем, у меня есть приложение WinForms, которое технический специалист может запустить даже в административном режиме, и которое вернет горячую клавишу меню загрузки BIOS.

Одна мысль, которая у меня возникла, заключалась в том, чтобы использовать WMI и перечислить ключ Win32_BIOS, такой как код ниже, но эта информация не возвращает горячую клавишу меню загрузки BIOS, по крайней мере, не напрямую.

Вот фрагмент кода C#.

using System;
using System.Management;

private void Form1_Load(object sender, EventArgs e)
{
    EnumBios();
}

private void EnumBios()
{
    try
    {
        string query = "SELECT * FROM Win32_BIOS";
        using (ManagementObjectSearcher wmiBiosItems = new ManagementObjectSearcher(query))
        {
            string textProperties = string.Empty;
            foreach (ManagementObject wmiBiosItem in wmiBiosItems.Get())
            {
                textProperties += $"BIOS Information{Environment.NewLine}";
                foreach (PropertyData item in wmiBiosItem.Properties)
                {
                    textProperties += $"\t{item.Name}";
                    if (null != item.Value)
                        textProperties += $" = {item.Value.ToString()}";
                    textProperties += $"{Environment.NewLine}";
                }
            }

            // Display the information.
            this.TxtOutput.Text = textProperties;
        }
    }

    catch (Exception ex)
    {
        this.TxtOutput.Text = ex.Message;
    }
}

Вот результат:

BIOS Information
    BiosCharacteristics = System.UInt16[]
    BIOSVersion = System.String[]
    BuildNumber
    Caption = BIOS Date: 02/16/16 09:38:11 Ver: V1.13B0
    CodeSet
    CurrentLanguage = en|US|iso8859-1
    Description = BIOS Date: 02/16/16 09:38:11 Ver: V1.13B0
    EmbeddedControllerMajorVersion = 255
    EmbeddedControllerMinorVersion = 255
    IdentificationCode
    InstallableLanguages = 1
    InstallDate
    LanguageEdition
    ListOfLanguages = System.String[]
    Manufacturer = American Megatrends Inc.
    Name = BIOS Date: 02/16/16 09:38:11 Ver: V1.13B0
    OtherTargetOS
    PrimaryBIOS = True
    ReleaseDate = 20160216000000.000000+000
    SerialNumber = To be filled by O.E.M.
    SMBIOSBIOSVersion = V1.13
    SMBIOSMajorVersion = 2
    SMBIOSMinorVersion = 8
    SMBIOSPresent = True
    SoftwareElementID = BIOS Date: 02/16/16 09:38:11 Ver: V1.13B0
    SoftwareElementState = 3
    Status = OK
    SystemBiosMajorVersion = 4
    SystemBiosMinorVersion = 6
    TargetOperatingSystem = 0
    Version = ALASKA - 1072009

Я не думаю, что WMI поможет, хотя может. Как я могу программно определить BIOS, ни UEFI, ни устаревшая версия не применяется для отображения меню загрузки, клавиша меню загрузки?

Я не думаю, что Windows позволяет получить доступ к такой информации об оборудовании. по крайней мере, не с C#, такая информация может быть доступна только с языков более низкого уровня, таких как ассемблер или, может быть, c

preciousbetine 29.11.2018 18:53

Я сомневаюсь, что это вообще возможно. Меню горячих клавиш BIOS не является стандартом, оно является частью BIOS и может находиться в любом месте кода. Вы можете попробовать поискать читаемые (на английском?) Строки в BIOS и выполнить фильтрацию по горячим клавишам, но в лучшем случае это будет подвержено ошибкам.

NetMage 29.11.2018 19:51

@preciousbetine Я открыт для C или любого языка. Вызов C / C++ - это упражнение в Pinvoke. Даже написание драйвера было бы неприятностью, но ничего страшного. Я просто не знаю методики. Языковой материал относительно прост. Я боюсь того, что сказал NetMage, а не способа сделать это.

Sarah Weinberger 29.11.2018 20:23

Даже если бы в WMI была запись для этого, вы не могли бы ей доверять. Посмотрите на собственный пример вывода, там есть записи, которые OEM не смог правильно заполнить. Вы все время видите это в данных SMBIOS.

Anders 30.11.2018 14:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
563
0

Другие вопросы по теме