Войти

Показать полную графическую версию : [решено] Определение частоты процессора, видеопамяти и др.


Virtyaluk
24-01-2010, 21:36
Как сделать чтоб в окне программы отображалась тактовая частота процессора, информация о видеопамяти, оперативной памяти, ОС и др.?


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

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

#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
qE+, совсем недавно была тема Delphi - Определение количества RAM и количества видеопамяти (http://forum.oszone.net/thread-161171.html)

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

Drongo
24-01-2010, 22:39
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
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
P.S. Программа из прикрепленного файла не запустилась, просит vcl60.bpl »Это потому что при компиляции не снята галка "использовать пакеты" Вот рабочая прога.
И поместите все это в одно окошко в окне всей программы т.е. сюда: »Ну, поместить вы впринципе и сами можете, дело в том, что я не знаю структуры вашей программы, что и куда должно выводиться у вас... В моём примере всё выводится на Label1, Label2, и т.д...
если можно, напишите еще для определения ОС и VRAM »Боюсь, здесь тоже ничем не смогу помочь. :(

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

Drongo
26-01-2010, 12:59
- как сделать чтоб информация отображалась не при нажатии кнопки?
можно ли как-то MessageDlg(Information_String, mtInformation, TMsgDlgButtons() << mbOK, 0);
поместить в форму?? »Конечно, в комменте 4 (http://www.forum.oszone.net/post-1328892-4.html) на листинге (не в прикреклённом файле) примеры приведены. Нужно на форму кинуть компоненты Label1, Label2, и т.д.

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

Drongo
24-03-2010, 18:40
На сайте Майкрософт есть специальная утилита, которая показывает код для нужного устройства »Скинь название проги и ссылку на неё.

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

Virtyaluk
25-03-2010, 22:53
Скинь название проги и ссылку на неё. »
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.
Страница загрузки. (http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en)




© OSzone.net 2001-2012