1. Предисловие.Приветствую всех любителей Delphi! В этой статье я хочу поведать вам об одной из замечательных, с моей точки зрения, технологии, разработанной Microsoft для облегчения нашей жизни. Теперь любой программист, используя любой современный язык программирования (не исключая и скрип языков!) может с лёгкостью узнать о своём компьютере практически всё. Теперь программисты всех "вероисповеданий" могут определить, какое оборудование установлено на их компьютере, узнать информацию о материнской плате и процессоре, параметры БИОСа, какие процессы запущены в данный момент, какова температура процессора и скорость вращения кулера, какие настройки графической системы, какие. Одним словом, все о чём вы так долго мечтали, стало доступно благодаря WMI. Звучит заманчиво, не так ли? ;)

Естественно, что WMI - это не только набор параметров. А что это такое - читайте ниже.

Автор: Алексей Павлов

Когда вы вызываете контекстное меню на иконке "Моего компьютера" и щёлкаете на команде "Свойства" - вы видите свойства системы. Эта статья позволит вам внести туда любой свой собственный текст и даже поместить рисунок!

 Для начала давайте заглянем в папку System, находящуюся в директории Windows и найдём там файл инициализации с именем Oeminfo.ini, нужно его отредактировать так, чтобы он выглядел следующим образом:

HKEYLocalMachine/Software/Microsoft/Windows/CurrentVersion/TimeZones/ - место, где в регистре хранится информация о временных зонах (Timezone). Двоичный код 'TZI' хранит информацию о начале и конце летнего времени. Есть какие-нибудь идеи насчет извлечения этих дат из этой двоичной величины?

 Попробуем описать решение тут:

 

Code:

uses

  Registry;

 

 

procedure GetOwnerAndCompanyName(var sOwner, sOrganization: string);

var

  reg: TRegistry;

  vi: TOSVersionInfo;

  sWindows: string;

begin

  reg      := TRegistry.Create;

  sWindows := '\Windows\';

  try

    vi.dwOSVersionInfoSize := SizeOf(vi);

    getversionex(vi);

    reg.RootKey := HKEY_LOCAL_MACHINE;

    if (vi.dwPlatformId = VER_PLATFORM_WIN32_NT) then sWindows := '\Windows NT\';

    if reg.OpenKey('Software\Microsoft' + sWindows + 'CurrentVersion', False) then

    begin

      // Name

     sOwner := reg.ReadString('RegisteredOwner');

      // Organization

     sOrganization := reg.ReadString('RegisteredOrganization');

    end;

  finally

    reg.Free;

  end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

  sOwner, sOrganization: string;

begin

  GetOwnerAndCompanyName(sOwner, sOrganization);

  Edit1.Text := sOwner;

  Edit2.Text := sOrganization;

end;

Хранится в глобальных переменных now, date, time

Структура SYSTEM_INFO содержит сведения о текущей системе компьютера. Это включает в себя архитектуру и Тип процессора, количество

процессоры в системе, размер страницы, и другая такая информация.

 

 Функция SetSystemTime.

Обрати внимание на привилегии.

 Автор ответа: podval

 

 

Code:

Type TOSVersion=(osUnknown, osUnknown9x, osUnknownNT, osWin95, osWin98, osWin98SE, osWinME, osWinNT, osWin2000, osXP);

{©Drkb v.3, ®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}

 

function GetOSVersion : TOSVersion;

var osVerInfo : TOSVersionInfo;

majorVer, minorVer : Integer;

begin

result := OsUnknown;

osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

if GetVersionEx(osVerInfo) then

begin

majorVer := osVerInfo.dwMajorVersion;

minorVer := osVerInfo.dwMinorVersion;

case osVerInfo.dwPlatformId of

VER_PLATFORM_WIN32_NT :

Case majorVer of

4:result := OsWinNT;

5:if minorVer=0 then result := OsWin2000

else

if minorVer=1 then result := OsXP else result := osUnknownNT;

else result := osUnknownNT;

end; {Case majorVer of}

VER_PLATFORM_WIN32_WINDOWS :

case majorVer of

4: Case minorVer of

0:result := OsWin95;

10: if osVerInfo.szCSDVersion[1] = 'A' then result := OsWin98SE else result := OsWin98;

90: result := OsWinME;

else result := osUnknown9x;

end;{Case minorVer of}

else result := osUnknown9x;

end{case majorVer of}

else result := OsUnknown;

end;{case osVerInfo.dwPlatformId of}

end;{if GetVersionEx(osVerInfo) then}

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

case GetOSVersion of

osUnknown: Showmessage('Unknown');

osWin95: Showmessage('Win95');

osWin98: Showmessage('Win98');

osWin98SE: Showmessage('Win98SE');

osWinME: Showmessage('WinME');

osWinNT: Showmessage('WinNT');

osWin2000: Showmessage('Win2000');

osXP: Showmessage('XP');

end;

end;

 

 

Следующий пример демонстрирует обработку сообщения WM_TIMECHANGE. Приложение, которое изменяет системное время, посылает сообщение WM_TIMECHANGE всем окнам верхнего уровня.

 

Code:

uses

Registry;

 

...

 

var

reg : TRegistry;

ts : TStrings;

i : integer;

begin

reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones', false);

if reg.HasSubKeys then

begin

   ts := TStringList.Create;

   reg.GetKeyNames(ts);

   reg.CloseKey;

   for i := 0 to ts.Count -1 do

   begin

     reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\' + ts.Strings[i], false);

     Memo1.Lines.Add(ts.Strings[i]);

     Memo1.Lines.Add(reg.ReadString('Display'));

     Memo1.Lines.Add(reg.ReadString('Std'));

     Memo1.Lines.Add(reg.ReadString('Dlt'));

     Memo1.Lines.Add('----------------------');

     reg.CloseKey;

   end;

   ts.Free;

end

else

   reg.CloseKey;

reg.free;

end;

 

  

Code:

Shellexecute(handle, 'Open', 'Rundll32.exe', 'shell32.dll,Control_RunDLL TIMEDATE.CPL', Pchar(Getsystemdir), 0);