Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Определение частоты процессора, видеопамяти и др. (http://forum.oszone.net/showthread.php?t=164548)

Virtyaluk 24-01-2010 21:36 1328849

Определение частоты процессора, видеопамяти и др.
 
Как сделать чтоб в окне программы отображалась тактовая частота процессора, информация о видеопамяти, оперативной памяти, ОС и др.?

Код здесь!

Код программы:
Код:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Label1Click(TObject *Sender)
{

}
//---------------------------------------------------------------------------

Определения частоты процессора:
Код:

double CPUSpeed(void)
 {
  DWORD dwTimerHi, dwTimerLo;
  asm
    {
      DW 0x310F
      mov dwTimerLo, EAX
      mov dwTimerHi, EDX
    }
  Sleep (500);
  asm
    {
      DW 0x310F
      sub EAX, dwTimerLo
      sub EDX, dwTimerHi
      mov dwTimerLo, EAX
      mov dwTimerHi, EDX
    }
  return dwTimerLo/(1000.0*500);
 }

Определения частоты обновления экрана:
Код:

HDC hDCScreen = GetDC(NULL);

int RefreshFrequency = GetDeviceCaps(hDCScreen, VREFRESH);

ReleaseDC(NULL, hDCScreen);

Определение размеры экрана:
Код:

TRect rect;
if( SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0) ) {
// получили размер рабочей области
ShowMessage("WorkArea size is "+AnsiString(rect.Width())+"x"+AnsiString(rect.Height()));
} else {
// не удалось получить размер рабочей области
ShowMessage("GetWorkArea failed");
}

Изменения разрешения экрана:
Код:

DEVMODE dm;
dm.dmSize = sizeof(DEVMODE);
int index = 0;
while (EnumDisplaySettings(NULL, index, &dm))
{
 if (dm.dmPelsWidth == 800 && dm.dmPelsHeight == 600)
 {
  dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
  LONG result = ChangeDisplaySettings(&dm, CDS_TEST);
  if (result == DISP_CHANGE_SUCCESSFUL)
  {
    ChangeDisplaySettings(&dm, 0);
    break;
  }
  else if (result == DISP_CHANGE_RESTART)
  {
    ShowMessage("Требуется перезагрузка");
    break;
  }
  else
  {
    ShowMessage("Установка не поддерживается монитором");
    break;
  }
 }
 index++;
}

Знаю не все коды...пишите еще, необходимые!!

Помогите, пожалуйста, осуществить это!
И можно это же проделать на Делфи?Если да то на сколько будет отличаться код?

Admiral 24-01-2010 22:15 1328871

qE+, совсем недавно была тема Delphi - Определение количества RAM и количества видеопамяти

Virtyaluk 24-01-2010 22:36 1328890

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

Drongo 24-01-2010 22:39 1328892

Вложений: 1
qE+, У меня такой код есть.

1. Разрешение монитора
Код:

...
// Узнаём разрешение монитора
  Label1->Caption = String(Screen->Monitors[0]->Width) + "x" +Screen->Monitors[0]->Height;
...

2. Узнаём количество оперативной памяти
Код:

...
// Узнаём количество оперативной памяти
  TMemoryStatus MS;
  MS.dwLength = sizeof(MS);
  GlobalMemoryStatus(&MS);
  Label2->Caption = String("Всего памяти:                        ") + FormatFloat("#,###' МБ'", MS.dwTotalPhys / 1024);
  CHAR lpMemLoad[5];
  sprintf(lpMemLoad, "%d %%", MS.dwMemoryLoad);
  Label3->Caption = String("Использование ОЗУ:              ") + lpMemLoad;
...

3. Всего памяти.
Код:

...
  MEMORYSTATUS mem;
  memset((void*)&mem, 0, sizeof(mem));
  mem.dwLength = sizeof(mem);
  GlobalMemoryStatus(&mem);
  Label4->Caption = String("Всего памяти: ") + IntToStr(mem.dwTotalPhys);
...

И проект прикреплю, честно скажу, не мой, скачал с другого форума, но в своё время мне этот проект немного помог.

Virtyaluk 24-01-2010 22:47 1328902

Drongo,
спасибо за код.
если можно, напишите еще для определения ОС и VRAM
И поместите все это в одно окошко в окне всей программы т.е. сюда:
Код:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Label1Click(TObject *Sender)
{

}
//---------------------------------------------------------------------------

P.S. Программа из прикрепленного файла не запустилась, просит vcl60.bpl - ОСь у меня Win7U

Drongo 24-01-2010 22:58 1328910

Вложений: 1
Цитата:

Цитата qE+
P.S. Программа из прикрепленного файла не запустилась, просит vcl60.bpl »

Это потому что при компиляции не снята галка "использовать пакеты" Вот рабочая прога.
Цитата:

Цитата qE+
И поместите все это в одно окошко в окне всей программы т.е. сюда: »

Ну, поместить вы впринципе и сами можете, дело в том, что я не знаю структуры вашей программы, что и куда должно выводиться у вас... В моём примере всё выводится на Label1, Label2, и т.д...
Цитата:

Цитата qE+
если можно, напишите еще для определения ОС и VRAM »

Боюсь, здесь тоже ничем не смогу помочь. :(

Virtyaluk 25-01-2010 22:40 1329822

Drongo,
исходя из прикрепленного вами файла:
- как сделать чтоб информация отображалась не при нажатии кнопки?
- можно ли как-то MessageDlg(Information_String, mtInformation, TMsgDlgButtons() << mbOK, 0);
поместить в форму??

Drongo 26-01-2010 12:59 1330230

Цитата:

Цитата qE+
- как сделать чтоб информация отображалась не при нажатии кнопки?
можно ли как-то MessageDlg(Information_String, mtInformation, TMsgDlgButtons() << mbOK, 0);
поместить в форму?? »

Конечно, в комменте 4 на листинге (не в прикреклённом файле) примеры приведены. Нужно на форму кинуть компоненты Label1, Label2, и т.д.

Virtyaluk 24-03-2010 14:44 1376092

Всем спасибо за помощь, сам решил все!
На сайте Майкрософт есть специальная утилита, которая показывает код для нужного устройства.

Drongo 24-03-2010 18:40 1376277

Цитата:

Цитата Virtyaluk
На сайте Майкрософт есть специальная утилита, которая показывает код для нужного устройства »

Скинь название проги и ссылку на неё.

Решением поделиться можешь?

Virtyaluk 25-03-2010 22:53 1377288

Цитата:

Цитата Drongo
Скинь название проги и ссылку на неё. »

WMI Code Creator v1.0
The WMI Code Creator tool allows you to generate VBScript, C#, and VB .NET code that uses WMI to complete a management task such as querying for management data, executing a method from a WMI class, or receiving event notifications using WMI.
Страница загрузки.


Время: 04:49.

Время: 04:49.
© OSzone.net 2001-