Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Рассылка сайта "Планета Дельфи" Выпуск №6


Информационный Канал Subscribe.Ru


Здравствуйте, уважаемые подписчики! Сегодня я хочу рассказать вам об:

Определении версии Винды

Надо поставить на форму 2 Лейбла и одну кнопку. После чего написать:

type
  TWinVersion = (wvUnknown, wv95, wv98, wvME, wvNT3, wvNT4, wvW2K, wvXP);

function DetectWinVersion: TWinVersion;
var
  OSVersionInfo: TOSVersionInfo;
begin
  Result := wvUnknown;
  OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
  begin
    case OSVersionInfo.DwMajorVersion of
      3: Result := wvNT3;
      4: case OSVersionInfo.DwMinorVersion of
          0: if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
              Result := wvNT4
            else
              Result := wv95;
          10: Result := wv98;
          90: Result := wvME;
        end;
      5: case OSVersionInfo.DwMinorVersion of
          0: Result := wvW2K;
          1: Result := wvXP;
        end;
    end;
  end;
end;

function DetectWinVersionStr: string;
const
  VersStr: array[TWinVersion] of string = (
    'Unknown',
    'Windows 95',
    'Windows 98',
    'Windows ME',
    'Windows NT 3',
    'Windows NT 4',
    'Windows 2000',
    'Windows XP');
begin
  Result := VersStr[DetectWinVersion];
end;


procedure TForm1.Button1Click(Sender: TObject);
Var
  ver:TWinVersion;
begin
  Ver:=DetectWinVersion;
  Label1.Caption := IntToStr(ord(ver));
  Label2.Caption := DetectWinVersionStr;
end
 

определении каталога установки винды:

Надо поставить на форму Lable, Button и накатать:

var
Windir: string;
WindirP: PChar;
Res: Cardinal;

procedure TForm1.Button1Click(Sender: TObject);
begin
WinDirP := StrAlloc(MAX_PATH);
Res := GetWindowsDirectory(WinDirP, MAX_PATH);
if Res > 0 then
WinDir := StrPas(WinDirP);
Label1.Caption := WinDir;
end;


определении тактовой частоты процессора:

Надо написать эту функцию, а потом обращаться к ней по какому-то событию. Нажатию кнопки, например.

function GetCPUSpeed: double;
const
  DelayTime = 500; // время измерения в миллисекундах
var
  TimerHi, TimerLo: DWORD;
  PriorityClass, Priority: integer;
begin
  PriorityClass := GetPriorityClass(GetCurrentProcess);
  Priority := GetThreadPriority(GetCurrentThread);
  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
  Sleep(10);
  asm
    dw 310Fh 
    mov TimerLo, eax
    mov TimerHi, edx
  end;
  Sleep(DelayTime);
  asm
    dw 310Fh 
    sub eax, TimerLo
    sbb edx, TimerHi
    mov TimerLo, eax
    mov TimerHi, edx
  end;
  SetThreadPriority(GetCurrentThread, Priority);
  SetPriorityClass(GetCurrentProcess, PriorityClass);
  Result := TimerLo / (1000.0 * DelayTime);
end;

begin
  LabelCPUSpeed.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);
end;

На сегодня все. Я приношу свои извинения за столь маленький объем. Это связано с тем, что у меня было слишком много дел на этой неделе. Кроме этого, на следующей неделе (с 19 по 25 апреля) сайт вообще не будет обновляться и выпуска 25 апреля скорее всего не будет. Это связано с тем, что у меня 25 числа предварительное тестирование в вуз и я к нему усилено готовлюсь. Но я обещаю, что после 25 я вплотную займусь сайтом и реорганизую раздел Tips&Tricks с учетом бывших выпусков рассылки.


Кроме этого, я приглашаю всех желающих к участию в этом проекте. Пишите мне об этом. Кроме этого, все вопросы также направляйте мне. Также хочу услышать ваше мнение о том, нужен ли на сайте раздел "Юмор".

С уважением, Константин


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное