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++;
}
Знаю не все коды...пишите еще, необходимые!!
Помогите, пожалуйста, осуществить это!
И можно это же проделать на Делфи?Если да то на сколько будет отличаться код?
Код программы:
//---------------------------------------------------------------------------
#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++;
}
Знаю не все коды...пишите еще, необходимые!!
Помогите, пожалуйста, осуществить это!
И можно это же проделать на Делфи?Если да то на сколько будет отличаться код?