Как я могу программно пройти через то, что означает клавиша меню загрузки 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, ни устаревшая версия не применяется для отображения меню загрузки, клавиша меню загрузки?
Я сомневаюсь, что это вообще возможно. Меню горячих клавиш BIOS не является стандартом, оно является частью BIOS и может находиться в любом месте кода. Вы можете попробовать поискать читаемые (на английском?) Строки в BIOS и выполнить фильтрацию по горячим клавишам, но в лучшем случае это будет подвержено ошибкам.
@preciousbetine Я открыт для C или любого языка. Вызов C / C++ - это упражнение в Pinvoke. Даже написание драйвера было бы неприятностью, но ничего страшного. Я просто не знаю методики. Языковой материал относительно прост. Я боюсь того, что сказал NetMage, а не способа сделать это.
Даже если бы в WMI была запись для этого, вы не могли бы ей доверять. Посмотрите на собственный пример вывода, там есть записи, которые OEM не смог правильно заполнить. Вы все время видите это в данных SMBIOS.





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