Borland C++ FAQ
Страница 14. Устройства


 

Устройства

  1. Открытие привода CD-ROM

    // Чтобы программно открыть привод CD-ROM, подключите
    // после vcl.h заголовочный файл mmsystem.h
    // и вызовите функцию mciSendString:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    mciSendString("Set cdaudio door open wait", NULL, 0, Handle);
    }

  2. Закрытие привода CD-ROM

    // Чтобы программно закрыть привод CD-ROM, подключите
    // после vcl.h заголовочный файл mmsystem.h
    // и вызовите функцию mciSendString:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    mciSendString("Set cdaudio door closed wait", NULL, 0, Handle);
    }

  3. Программное выключение монитора

    // Следующий код выключит монитор
    SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

  4. Программное включение монитора

    // Следующий код включит монитор
    SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);

  5. Как выключить/перезагрузить компьютер

    // Для включения/перезагрузки компьютера вызовите
    // функцию ExitWindowsEx


    // выключить компьютер
    ExitWindowsEx(EWX_SHUTDOWN, 0);
    // перезагрузить компьютер
    ExitWindowsEx(EWX_REBOOT, 0);
    // завершить сеанс пользователя
    ExitWindowsEx(EWX_LOGOFF, 0);

  6. Сколько оперативной памяти

    // Для того чтобы узнать сколько оперативной
    // памяти на компьютере введите следующий код:

    MEMORYSTATUS mem;
    memset((void*)&mem,0,sizeof(mem));
    mem.dwLength=sizeof(mem);
    GlobalMemoryStatus(&mem);
    MessageDlg("Total memory:"+IntToStr(mem.dwTotalPhys),
    mtInformation, TMsgDlgButtons() << mbOK, 0);

  7. Как определить, подключена ли мышь

    // Введите следующий код:
    if(GetSystemMetrics(SM_MOUSEPRESENT))
    MessageDlg("Мышь подключена!", mtInformation, TMsgDlgButtons() << mbOK, 0);
    else
    MessageDlg("Мышь не найдена!", mtError, TMsgDlgButtons() << mbOK, 0);

  8. Название процессора

    // Введите следующий код:
    AnsiString ProcessorName="Unknown";
    TRegistry *reg = new TRegistry;
    try {
    reg->RootKey = HKEY_LOCAL_MACHINE;
    reg->OpenKey("Hardware\\Description"
    "\\System\\CentralProcessor\\0", false);
    ProcessorName=reg->ReadString("ProcessorNameString");
    }
    __finally
    {
    delete reg;
    }
    MessageDlg(ProcessorName, mtInformation, TMsgDlgButtons() << mbOK, 0);

  9. Определение набора расширенных инструкций поддерживающий процессором

    // Введите следующий код:
    Memo1->Lines->Add("Поддерживаемые инструкции:"); 
DWORD brt; bool AMD,MMX; 
__asm {
mov eax,1
cpuid
mov brt,edx
}
if(brt&(1<<23))
{
MMX=true;
Memo1->Lines->Add("MMX");
}
if(brt&(1<<25)) { if(brt&(1<<24)) {
__try
{
__asm xorps xmm0, xmm0
Memo1->Lines->Add("SSE");
}
__except(EXCEPTION_EXECUTE_HANDLER){} 

if(brt&(1<<26))
{
__try
{
__asm xorpd xmm0,xmm0
Memo1->Lines->Add("SSE2");
}
__except(EXCEPTION_EXECUTE_HANDLER){}
}
}
}
__asm {
mov eax,0x80000000
cpuid
cmp eax,0x80000000
jc notamd
mov eax,0x80000001
cpuid
mov brt,edx
mov AMD,1
notamd:
}
if(AMD)
if((MMX)&&(brt&(1<<31)))
Memo1->Lines->Add("3DNOW!");  

  1. Определение тактовой частоты CPU

    // При помощи этой функции можно определить тактовую частоту CPU:
    double CPUSpeed(void) { DWORD dwTimerHi, dwTimerLo; double dRes; 
asm { DW 0x310F mov dwTimerLo, EAX mov dwTimerHi, EDX } Sleep (500); 
asm { DW 0x310F sub EAX, dwTimerLo sub EAX, dwTimerHi mov dwTimerLo, EAX 
mov dwTimerHi, EDX } dRes = dwTimerLo/(1000.0*500); return dRes; }

 

 
« Предыдущая статья