PDA

Просмотр полной версии : [DDR] Функции для работы С\С++\С#


NetSter
07.04.2010, 16:53
Всем ачатовцам доброго времени суток.
Нужно написать простую софтину для работы с оперативой.
Там например размер памяти, тип, серийник, производитель, частота и т.д.
Если есть сорсы какие нить под Visual Studio - вообще классно. ;)
Заранее большое спасибо.

noxjoker
07.04.2010, 16:56
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

NetSter
07.04.2010, 17:00
http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
Спасибо сейчас регнусь и качну.
зы\ как то неудобно, штоли вышло.( все что нагугливал - были прожекты в основном на делфи и т.д. борландовские. а тут сразу есть.
+
посмотрю код - отпишу.

noxjoker
07.04.2010, 17:02
Будут вопросы пиши, но только по C#:)

slesh
07.04.2010, 17:06
Ну вообще копай всё в сторону WMI. Потому как чтобы получить данную инфу нужно юзать или WMI или напрямую спрашивать оперативу об этом. Но напрямую спросить оперативу незя, потому это тока из под ядра можно сделать. Так что тока WMI через COM. Там просто

NetSter
07.04.2010, 17:09
Друзья, спасибо за советы!
вот как иногда мало нужно для того что бы стать на правильный путь)

W!z@rD
07.04.2010, 17:26
юзать нужно WMI как сказал slesh.

http://stackoverflow.com/questions/1044215/memory-leak-using-wmi-in-delphi-7 пример.

http://www.oidview.com/wmibrowser.html - Вот это тебе сильно облегчит жизнь :)

0kt0ber
08.04.2010, 00:11
Всем ачатовцам доброго времени суток.
Нужно написать простую софтину для работы с оперативой.
Там например размер памяти, тип, серийник, производитель, частота и т.д.
Если есть сорсы какие нить под Visual Studio - вообще классно. ;)
Заранее большое спасибо.
Рекомендую WMI Code Creator (http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e)
Генерит сразу на C#, VB.NET, VB
Например, код получения скорости оперативки:

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);
}
}
}
}


У меня вывод данного кода такой:

-----------------------------------
Win32_PhysicalMemory instance
-----------------------------------
Speed: 800
-----------------------------------
Win32_PhysicalMemory instance
-----------------------------------
Speed: 800

NetSter
08.04.2010, 17:16
Рекомендую WMI Code Creator (http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e)
Генерит сразу на C#, VB.NET, VB
У меня вывод данного кода такой.........

это однозначно тру. но у мну все что можно получить на тачке - только емкость памяти... все остальное - пусто...

что это может быть ? ОСь севен х86, на ноуте две линейки ОЗУ по гигу...

http://img186.imageshack.us/img186/2292/76751534.png

и на вывод ничего...

http://img526.imageshack.us/img526/5246/97238841.png

W!z@rD
08.04.2010, 17:56
Perfomance Counters для скорости и т.п.

NetSter
08.04.2010, 18:51
Perfomance Counters для скорости и т.п.
если можно подробнее...
для пространства имен root\CIMV2
все классы что я натискал это
Win32_PerfFormattedData_PerfOS_Memory (http://msdn.microsoft.com/en-us/library/aa394268%28VS.85%29.aspx)
Win32_PhysicalMemory (http://msdn.microsoft.com/en-us/library/Aa394347)
Win32_PerfRawData_PerfOS_Memory (http://msdn.microsoft.com/en-us/library/aa394314%28VS.85%29.aspx)

для типа памяти (DDR, DDR-2 etc) уже разобрался.
вот как достучатся к серийнику, частоте, скорости записи etc - для меня пока еще загадка)
что за классы юзать ? если уже есть код, плиз в тему :)
Спасибо.

W!z@rD
08.04.2010, 20:27
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

NetSter
10.04.2010, 17:42
Perfomance Counter они же счетчики производительности......

Допустим с счетчиками производительности разобрался.
накатал вот такой простой код:
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);

}
}
}

http://s005.radikal.ru/i212/1004/cb/3a45c94a1f37.bmp

Но теперь вот в чем замутка - какими CounterName-мами для CategoryName = "Memory" получить такую инфо как например мне нужно обязательно для проги:
1) Частота работы
2) Объем памяти
3) серийник (не обязательно)
4) тип памяти (DDR, DDR-2 etc...)
5) прочее интересное (не обязательно)

W!z@rD
10.04.2010, 19:46
NetSter

2) Объем памяти
WMI - Win32_ComputerSystem - TotalPhysicalMemory
подробнее - http://www.computerperformance.co.uk/vbscript/wmi_memory.htm

Остальное без понятия :)

0kt0ber
10.04.2010, 20:13
Но теперь вот в чем замутка - какими CounterName-мами для CategoryName = "Memory" получить такую инфо как например мне нужно обязательно для проги:
1) Частота работы
2) Объем памяти
3) серийник (не обязательно)
4) тип памяти (DDR, DDR-2 etc...)
5) прочее интересное (не обязательно)

Win32_PhysicalMemory Class (http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx)
Идем по-порядку:
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, например:
http://ipicture.ru/upload/100410/K52wvwtuEL.jpg

NetSter
11.04.2010, 01:07
Win32_PhysicalMemory Class (http://msdn.microsoft.com/en-us/library/aa394347(VS.85).aspx) .......

да, заюзал этот класс.
теперь уже хоть что то нарисовалось )

код примерно такой для всех методов.

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)

NetSter
11.04.2010, 02:24
Speed получить так и не удалось... вообще ничего не выводит. метод написан аналогично private void realMemory() (см. пост выше).
у кого какие предложения по получению этого значения? )

0kt0ber
11.04.2010, 11:16
Speed получить так и не удалось... вообще ничего не выводит. метод написан аналогично private void realMemory() (см. пост выше).
у кого какие предложения по получению этого значения? )
А не забываешь менять в двух местах и в запросе:
ObjectQuery oQuery = new ObjectQuery("SELECT Speed FROM Win32_PhysicalMemory");
...
oReturn["Speed"]
...
т.е. вот такой код работает:
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.: может поможет указать в конструкторе
ManagementScope oMs = new ManagementScope("\\root\\cimv2");

NetSter
11.04.2010, 14:43
А не забываешь менять в двух местах и в запросе:
ObjectQuery oQuery = new ObjectQuery("SELECT Speed FROM Win32_PhysicalMemory");
...
oReturn["Speed"]
........
не я там не втыкаю менять и все уже пашет для вот таких параметров (на твоем скрине нарисовал ))
http://s43.radikal.ru/i099/1004/82/5e7f5a8964b9.jpg

только скорость осталась.
насчет указания в конструкторе - вариант нужно попробовать, только вот как без этого все значения есть а только скорости нету ))
щя буду шаманить. результаты отпишу.
ЗЫ\ всем спс за пождержку ;)