Всем ачатовцам доброго времени суток. Нужно написать простую софтину для работы с оперативой. Там например размер памяти, тип, серийник, производитель, частота и т.д. Если есть сорсы какие нить под Visual Studio - вообще классно. Заранее большое спасибо.
Спасибо сейчас регнусь и качну. зы\ как то неудобно, штоли вышло.( все что нагугливал - были прожекты в основном на делфи и т.д. борландовские. а тут сразу есть. + посмотрю код - отпишу.
Ну вообще копай всё в сторону WMI. Потому как чтобы получить данную инфу нужно юзать или WMI или напрямую спрашивать оперативу об этом. Но напрямую спросить оперативу незя, потому это тока из под ядра можно сделать. Так что тока WMI через COM. Там просто
юзать нужно WMI как сказал slesh. http://stackoverflow.com/questions/1044215/memory-leak-using-wmi-in-delphi-7 пример. http://www.oidview.com/wmibrowser.html - Вот это тебе сильно облегчит жизнь
Рекомендую WMI Code Creator Генерит сразу на C#, VB.NET, VB Например, код получения скорости оперативки: Code: using System; using System.Management; using System.Windows.Forms; namespace WMISample { public class MyWMIQuery { public static void Main() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_PhysicalMemory"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("-----------------------------------"); Console.WriteLine("Win32_PhysicalMemory instance"); Console.WriteLine("-----------------------------------"); Console.WriteLine("Speed: {0}", queryObj["Speed"]); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } } } } У меня вывод данного кода такой:
это однозначно тру. но у мну все что можно получить на тачке - только емкость памяти... все остальное - пусто... что это может быть ? ОСь севен х86, на ноуте две линейки ОЗУ по гигу... и на вывод ничего...
если можно подробнее... для пространства имен root\CIMV2 все классы что я натискал это Win32_PerfFormattedData_PerfOS_Memory Win32_PhysicalMemory Win32_PerfRawData_PerfOS_Memory для типа памяти (DDR, DDR-2 etc) уже разобрался. вот как достучатся к серийнику, частоте, скорости записи etc - для меня пока еще загадка) что за классы юзать ? если уже есть код, плиз в тему Спасибо.
Perfomance Counter они же счетчики производительности Start - Run - perfmon.msc /s там можно посмотреть данные по использованию, загруженности и т.п. http://zamov.online.fr/EXHTML/CSharp/CSharp_927308.html http://www.geekpedia.com/tutorial211_Using-Performance-Counters-in-Csharp.html
Допустим с счетчиками производительности разобрался. накатал вот такой простой код: PHP: using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { performanceCounter1.CategoryName = "Memory"; performanceCounter1.CounterName = "Available Mbytes"; performanceCounter1.InstanceName = null; long aviMB = performanceCounter1.RawValue; richTextBox1.Text = string.Format("Availiable Memory: {0} MB \n", aviMB); } } } Но теперь вот в чем замутка - какими CounterName-мами для CategoryName = "Memory" получить такую инфо как например мне нужно обязательно для проги: 1) Частота работы 2) Объем памяти 3) серийник (не обязательно) 4) тип памяти (DDR, DDR-2 etc...) 5) прочее интересное (не обязательно)
NetSter 2) Объем памяти WMI - Win32_ComputerSystem - TotalPhysicalMemory подробнее - http://www.computerperformance.co.uk/vbscript/wmi_memory.htm Остальное без понятия
Win32_PhysicalMemory Class Идем по-порядку: 1) Частота работы Win32_PhysicalMemory - Speed - у меня 800 2) Объем памяти Win32_PhysicalMemory - Capacity - у меня 1073741824, это в байтах т.е. 1073741824 = 1 гиг 3) серийник (не обязательно) Win32_PhysicalMemory - SerialNumber, но у меня выдает SerNum0, кстати тоже выдает и everest 4) тип памяти (DDR, DDR-2 etc...) Win32_PhysicalMemory - MemoryType, тут: ... 17 - SDRAM 20 - DDR 21 - DDR2, остальные смотреть по ссылке више 5) прочее интересное (не обязательно) Как вариант, посмотреть, что выводят программы такие как everest, например:
да, заюзал этот класс. теперь уже хоть что то нарисовалось ) код примерно такой для всех методов. PHP: private void realMemory() { ManagementScope oMs = new ManagementScope(); ObjectQuery oQuery = new ObjectQuery("SELECT Capacity FROM Win32_PhysicalMemory"); ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery); ManagementObjectCollection oReturnCollection = oSearcher.Get(); foreach (ManagementObject oReturn in oReturnCollection) { textBox2.Text = string.Format(Convert.ToInt32(oReturn["Capacity"]) / 1048576 + " MB"); } } аналогично сделал для форм-фактор чипа и типа памяти. Щя играюсь с частотой. (SPEED)
Speed получить так и не удалось... вообще ничего не выводит. метод написан аналогично private void realMemory() (см. пост выше). у кого какие предложения по получению этого значения? )
А не забываешь менять в двух местах и в запросе: ObjectQuery oQuery = new ObjectQuery("SELECT Speed FROM Win32_PhysicalMemory"); ... oReturn["Speed"] ... т.е. вот такой код работает: Code: private void realSpeed() { ManagementScope oMs = new ManagementScope(); ObjectQuery oQuery = new ObjectQuery("SELECT Speed FROM Win32_PhysicalMemory"); ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery); ManagementObjectCollection oReturnCollection = oSearcher.Get(); foreach (ManagementObject oReturn in oReturnCollection) { textBox1.Text = oReturn["Speed"].ToString(); } } P.S.: Win7, VS2010RC, с админискими правами P.P.S.: может поможет указать в конструкторе Code: ManagementScope oMs = new ManagementScope("\\root\\cimv2");
не я там не втыкаю менять и все уже пашет для вот таких параметров (на твоем скрине нарисовал )) только скорость осталась. насчет указания в конструкторе - вариант нужно попробовать, только вот как без этого все значения есть а только скорости нету )) щя буду шаманить. результаты отпишу. ЗЫ\ всем спс за пождержку