Member 11982907 Ответов: 1

Как отобразить общую физическую оперативную память и серийный номер BIOS в текстовом поле


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

Он отображает имя пользователя, домен, операционную систему, IP-адрес и несколько других битов информации.

С тех пор меня попросили расширить функциональность, включив в нее общую оперативную память и серийный номер компьютера, но, как бы я ни старался, я не могу заставить его отображаться в текстовом поле.

Что я уже пробовал:

Для оперативной памяти я попытался использовать счетчик производительности, но он показывал только доступную оперативную память. Итак, я думаю, что мне нужно использовать WMI?

Для сериала у меня есть вот это:

public static string GetMotherBoardID()
        {
            string mbInfo = String.Empty;
            ManagementScope scope = new ManagementScope("\\\\" + Environment.MachineName + "\\root\\cimv2");
            scope.Connect();
            ManagementObject wmiClass = new ManagementObject(scope, new ManagementPath("Win32_BaseBoard.Tag=\"Base Board\""), new ObjectGetOptions());

            foreach (PropertyData propData in wmiClass.Properties)
            {
                if (propData.Name == "SerialNumber")
                    mbInfo = String.Format("{0,-25}{1}", propData.Name, Convert.ToString(propData.Value));
            }

            return mbInfo;
            ITHelper.txtSerial.Text = mbInfo.ToString();
        }


Который отображает следующую ошибку

Ссылка на объект необходима для нестатического поля, метода или свойства


Для барана я уже пробовал

private static void DisplayTotalRam()
       {
           string Query = "SELECT MaxCapacity FROM Win32_PhysicalMemoryArray";
           ManagementObjectSearcher searcher = new ManagementObjectSearcher(Query);
           int amount = 0;
           foreach (ManagementObject memo in searcher.Get())
           {
               amount += Convert.ToInt32(Convert.ToInt64(memo["Capacity"]) / 1024 / 1024 / 1024);
               txtRam.Text = amount.ToString();
           }
       }


Но я получаю то же самое сообщение, что и выше

CPallini

Какая линия является оскорбительной?

Member 11982907

ITHelper.txtSerial.Text = mbInfo.Метод toString();

и

txtRam.Текст = сумма.Метод toString();

Спасибо

Richard MacCutchan

Вы пытаетесь получить доступ к полям вашей формы из статических методов.

1 Ответов

Рейтинг:
2

#realJSOP

0) Добавить ссылку на Microsoft.VisualBasic

1) Добавить using DEVICES=Microsoft.VisualBasic.Devices; в верхней части вашего файла

2) Сделайте это в своем коде: DEVICES.ComputerInfo info = new DEVICES.ComputerInfo();

3) осмотрите info свойства объекта для получения нужной информации.


Member 11982907

Я пробовал это, и все, что я получаю, это

txtRAM.Текст = устройства.ComputerInfo. и тогда никаких других опций или информации для отображения не будет

То же самое, что:

txtRam.Текст = Майкрософт.На языке VisualBasic.Устройств.ComputerInfo.

Больше ничего не заселено, только " равные"

Извините, я немного нуб во всем этом, так что, возможно, упускаю что-то очевидное.

#realJSOP

Быть "нубом" не оправдывает лень (научитесь пользоваться google или обратите внимание на всплывающие окна intellisense). Я обновил свой ответ.

Member 11982907

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