[DDR] Функции для работы С\С++\С#

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NetSter, 7 Apr 2010.

  1. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Всем ачатовцам доброго времени суток.
    Нужно написать простую софтину для работы с оперативой.
    Там например размер памяти, тип, серийник, производитель, частота и т.д.
    Если есть сорсы какие нить под Visual Studio - вообще классно. ;)
    Заранее большое спасибо.
     
    _________________________
  2. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    http://www.codeproject.com/KB/system/GetHardwareInformation.aspx
     
    1 person likes this.
  3. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Спасибо сейчас регнусь и качну.
    зы\ как то неудобно, штоли вышло.( все что нагугливал - были прожекты в основном на делфи и т.д. борландовские. а тут сразу есть.
    +
    посмотрю код - отпишу.
     
    _________________________
  4. noxjoker

    noxjoker Member

    Joined:
    7 Aug 2009
    Messages:
    189
    Likes Received:
    24
    Reputations:
    0
    Будут вопросы пиши, но только по C#:)
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну вообще копай всё в сторону WMI. Потому как чтобы получить данную инфу нужно юзать или WMI или напрямую спрашивать оперативу об этом. Но напрямую спросить оперативу незя, потому это тока из под ядра можно сделать. Так что тока WMI через COM. Там просто
     
    1 person likes this.
  6. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Друзья, спасибо за советы!
    вот как иногда мало нужно для того что бы стать на правильный путь)
     
    _________________________
  7. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    юзать нужно WMI как сказал slesh.

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

    http://www.oidview.com/wmibrowser.html - Вот это тебе сильно облегчит жизнь :)
     
    1 person likes this.
  8. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    Рекомендую 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);
                }
            }
        }
    }
    
    У меня вывод данного кода такой:
     
    1 person likes this.
  9. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    это однозначно тру. но у мну все что можно получить на тачке - только емкость памяти... все остальное - пусто...

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

    [​IMG]

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

    [​IMG]
     
    _________________________
  10. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Perfomance Counters для скорости и т.п.
     
  11. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    если можно подробнее...
    для пространства имен root\CIMV2
    все классы что я натискал это
    Win32_PerfFormattedData_PerfOS_Memory
    Win32_PhysicalMemory
    Win32_PerfRawData_PerfOS_Memory


    для типа памяти (DDR, DDR-2 etc) уже разобрался.
    вот как достучатся к серийнику, частоте, скорости записи etc - для меня пока еще загадка)
    что за классы юзать ? если уже есть код, плиз в тему :)
    Спасибо.
     
    _________________________
    #11 NetSter, 8 Apr 2010
    Last edited: 8 Apr 2010
  12. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    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
     
  13. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Допустим с счетчиками производительности разобрался.
    накатал вот такой простой код:
    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);

            }
        }
    }
    [​IMG]

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

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    NetSter

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

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

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    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, например:
    [​IMG]
     
    2 people like this.
  16. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    да, заюзал этот класс.
    теперь уже хоть что то нарисовалось )

    код примерно такой для всех методов.
    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)
     
    _________________________
  17. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Speed получить так и не удалось... вообще ничего не выводит. метод написан аналогично private void realMemory() (см. пост выше).
    у кого какие предложения по получению этого значения? )
     
    _________________________
  18. 0kt0ber

    0kt0ber Member

    Joined:
    28 Jan 2010
    Messages:
    15
    Likes Received:
    5
    Reputations:
    0
    А не забываешь менять в двух местах и в запросе:
    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");
     
    #18 0kt0ber, 11 Apr 2010
    Last edited: 11 Apr 2010
  19. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    не я там не втыкаю менять и все уже пашет для вот таких параметров (на твоем скрине нарисовал ))
    [​IMG]

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