Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [DDR] Функции для работы С\С++\С# (https://forum.antichat.xyz/showthread.php?t=194295)

NetSter 07.04.2010 16:53

[DDR] Функции для работы С\С++\С#
 
Всем ачатовцам доброго времени суток.
Нужно написать простую софтину для работы с оперативой.
Там например размер памяти, тип, серийник, производитель, частота и т.д.
Если есть сорсы какие нить под Visual Studio - вообще классно. ;)
Заранее большое спасибо.

noxjoker 07.04.2010 16:56

http://www.codeproject.com/KB/system/GetHardwareInformation.aspx

NetSter 07.04.2010 17:00

Цитата:

Сообщение от noxjoker
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

Цитата:

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

Рекомендую WMI Code Creator
Генерит сразу на 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

Цитата:

Сообщение от 0kt0ber
Рекомендую WMI Code Creator
Генерит сразу на 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

Цитата:

Сообщение от W!z@rD
Perfomance Counters для скорости и т.п.

если можно подробнее...
для пространства имен root\CIMV2
все классы что я натискал это
Win32_PerfFormattedData_PerfOS_Memory
Win32_PhysicalMemory
Win32_PerfRawData_PerfOS_Memory


для типа памяти (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

Цитата:

Сообщение от W!z@rD
Perfomance Counter они же счетчики производительности......

Допустим с счетчиками производительности разобрался.
накатал вот такой простой код:
PHP код:

using System;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void button1_Click(object senderEventArgs 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

Цитата:

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

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, например:
http://ipicture.ru/upload/100410/K52wvwtuEL.jpg

NetSter 11.04.2010 01:07

Цитата:

Сообщение от 0kt0ber

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

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

private void realMemory()
        {
            
ManagementScope oMs = new ManagementScope();
            
ObjectQuery oQuery = new ObjectQuery("SELECT Capacity FROM Win32_PhysicalMemory");
            
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMsoQuery);
            
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

Цитата:

Сообщение от NetSter
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

Цитата:

Сообщение от 0kt0ber
А не забываешь менять в двух местах и в запросе:
ObjectQuery oQuery = new ObjectQuery("SELECT Speed FROM Win32_PhysicalMemory");
...
oReturn["Speed"]
........

не я там не втыкаю менять и все уже пашет для вот таких параметров (на твоем скрине нарисовал ))
http://s43.radikal.ru/i099/1004/82/5e7f5a8964b9.jpg

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


Время: 18:20