У компьютеров ATX есть функция Sleep. Эта программа заставляет компьютер "заснуть".

 

Code:

SetSystemPowerState(False, True);  //Forces the system down

SetSystemPowerState(True, False); //Makes a "soft" off

 

 

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;

Code:

 

function TimedShutDown(Computer: string; Msg: string; Time: Word; Force: Boolean; Reboot: Boolean): Boolean;

var

  rl: Cardinal;

  hToken: Cardinal;

  tkp: TOKEN_PRIVILEGES;

begin

  //get user privileges to shutdown the machine, we are talking about win nt and 2k here

if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then

    ShowMessage('Cannot open process token.')

  else

  begin

    if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then

    begin

      tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

      tkp.PrivilegeCount := 1;

      AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);

      if GetLastError <> ERROR_SUCCESS then

       ShowMessage('Error adjusting process privileges.');

    end

  else

    ShowMessage('Cannot find privilege value.');

  end;

 

  Result := InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot)

end;

 

//Start shut down

procedure TForm1.Button1Click(Sender: TObject);

begin

  if not TimedShutDown('\\computername', 'you have to shutdown', 30, true, true) then

    ShowMessage('function failed...');

end;

 

//Abort shut down

procedure TForm1.Button2Click(Sender: TObject);

begin

  AbortSystemShutdown('\\computername');

end;

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

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

 

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

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

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

 

Code:

uses

JwaWinBase;

 

//...

 

procedure TForm1.Button1Click(Sender: TObject);

var

si: STARTUPINFOW;

pif: PROCESS_INFORMATION;

res: Bool;

s: string;

begin

//set StartUpInfoW first

si.cb := SizeOf(startupinfow);

si.dwFlags  := STARTF_USESHOWWINDOW;

si.wShowWindow := SW_SHOWDEFAULT;

si.lpReserved := nil;

si.lpDesktop := nil;

si.lpTitle := 'Konsole';

// run CreateProcessWithLogonW...

res := CreateProcessWithLogonW('Security', 'ArViCor', 'test', LOGON_WITH_PROFILE,

   'c:\win2kas\system32\regedt32.exe', nil

   , CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);

if booltostr(res) = '0' then

begin

 

   //if an error occures, show the error-code

   //this code can be 'translated' with 'net helpmsg ' on command-prompt

   str(GetLastError, s);

   ShowMessage('CreateProcessWithLogonResult: ' + booltostr(res) + #10 +

     'GetLastError: ' + s);

end;

end;

 

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

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

 

Для некоторых функций вы должны получить разрешение на компьютере с Windows.

 (т.е. для того чтобы выключить или перезагрузить Windows с exitwindowsex, либо изменить системное время)

Следующий код содержит процедуру настройки привилегий. Функция AdjustTokenPrivileges () включает или отключает привилегии

в указанном token доступа.

 

 

 

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;

 

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

const

TokenSize = 800; //  (SizeOf(Pointer)=4 *200)

var

hToken: THandle;

pTokenInfo: PTOKENPRIVILEGES;

ReturnLen: Cardinal;

i: Integer;

PrivName: PChar;

DisplayName: PChar;

NameSize: Cardinal;

DisplSize: Cardinal;

LangId: Cardinal;

begin

GetMem(pTokenInfo, TokenSize);

if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,

   hToken) then ShowMessage('OpenProcessToken error');

if not GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize, ReturnLen) then

   ShowMessage('GetTokenInformation error');

GetMem(PrivName, 255);

GetMem(DisplayName, 255);

for i := 0 to pTokenInfo.PrivilegeCount - 1 do

begin

   DisplSize := 255;

   NameSize  := 255;

   LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName, Namesize);

   LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize, LangId);

   ListBox1.Items.Add(PrivName +^I + DisplayName);

end;

FreeMem(PrivName);

FreeMem(DisplayName);

FreeMem(pTokenInfo);

end;