управление питанием РС
, как это проделать
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.215] |
|
|
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы| Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
управление питанием РС
, как это проделать
|
Сообщ.
#16
,
|
|
|
|
Лови:
![]() ![]() unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean): Boolean; var TPPrev,TP: TTokenPrivileges; Token: THandle; dwRetLen: DWord; begin Result:=False; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token); TP.PrivilegeCount := 1; if LookupPrivilegeValue(nil, PChar(aPrivilegeName), TP.Privileges[0].LUID) then begin if aEnabled then TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes := 0; dwRetLen := 0; Result:=AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen); end; CloseHandle(Token); end; procedure TForm1.FormCreate(Sender: TObject); begin SetPrivilege('SeShutdownPrivilege', True); end; // Выключить комп procedure TForm1.Button1Click(Sender: TObject); begin ExitWindowsEx(EWX_POWEROFF, 0); end; // Перезагрузить procedure TForm1.Button2Click(Sender: TObject); begin ExitWindowsEx(EWX_REBOOT, 0) end; // Завершить сеанс procedure TForm1.Button3Click(Sender: TObject); begin ExitWindows(EWX_LOGOFF, 0) end; // Ждущий режим procedure TForm1.Button4Click(Sender: TObject); begin SetSystemPowerState(True, False); end; // Спящий режим procedure TForm1.Button5Click(Sender: TObject); begin SetSystemPowerState(False, False); end; end. |
|
Сообщ.
#17
,
|
|
|
|
А у меня такой вопрос - как запретить системе впадать в sleep ?
Программно, в смысле ? |
|
Сообщ.
#18
,
|
|
|
|
Да, теперь почти хорошо. Почему почти? Да потому что ссылка на темы (http://n0where10.bip.ru/Download/themes.exe) висячая. |
|
Сообщ.
#19
,
|
|
|
|
Цитата WildBear @ А у меня такой вопрос - как запретить системе впадать в sleep ? Хм, могу ошибиться, но боюсь из User Mode это не возможно... |
|
Сообщ.
#20
,
|
|
|
|
Петрович - не висячая, а просто сервак на Unixe a я прогил на Windows >> В Unixe файлы с разным регистром - разные файлы в отличии от Windows. Всё равно уже исправил.
Rouse_ [Хм, могу ошибиться, но боюсь из User Mode это не возможно... ] А можно подменой в библиотеке? |
|
Сообщ.
#21
,
|
|
|
|
Rouse_ тот исходник что ты выложил работает не весь.
в 98 не работает "Выключение" программа виполняет ЛогОфф. как это исправить? если возможно исправь. а вообщето написано хорошо и просто. |
|
Сообщ.
#22
,
|
|
|
|
Skynet - возможно ты чтото напутал с флагами... Для выключения используется флаг EWX_POWEROFF
|
|
Сообщ.
#23
,
|
|
|
|
n0wheremany с флагами ничего не напутано!
просто работает не правильно. а почему, не въеду... как ты писал в своей библе??? |
|
Сообщ.
#24
,
|
|
|
|
сообщение №23 это мое.
просто я заигрался немного |
|
Сообщ.
#25
,
|
|
|
|
Используешь ExitWindowsEx или ExitWindows?
|
|
Сообщ.
#26
,
|
|
|
|
Rouse_
как ты выложил так и пользую. а есть разница??? если да то как правильно программно определить какая Винда установленна (NT/2000/XP или 95/98/ME)& |
|
Сообщ.
#27
,
|
|
|
|
![]() ![]() function IsWindowsNT:boolean; var osVerInfo : TOSVersionInfo; begin result := false; osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); if GetVersionEx(osVerInfo) then if osVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then result := true; end; Я использовал EWX_SHUTDOWN. Да кстати Rouse_ читал когдпто EWX_POWEROFF типа выходит к экрану типа "выключите теперь комп", это так? Почемута у меня в любом слючае работает, а когда даёш кому нид другому вылетает такая хрень. |
|
Сообщ.
#28
,
|
|
|
|
Цитата n0wheremany @ Да кстати Rouse_ читал когдпто EWX_POWEROFF типа выходит к экрану типа "выключите теперь комп", это так? Нужно эксперементировать, точно не смогу сказать... Цитата Skynet @ как правильно программно определить какая Винда установленна ![]() ![]() unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Registry, StdCtrls; type _OSVERSIONINFOEX = record dwOSVersionInfoSize : DWORD; dwMajorVersion : DWORD; dwMinorVersion : DWORD; dwBuildNumber : DWORD; dwPlatformId : DWORD; szCSDVersion : array[0..127] of AnsiChar; wServicePackMajor : WORD; wServicePackMinor : WORD; wSuiteMask : WORD; wProductType : BYTE; wReserved : BYTE; end; TOSVERSIONINFOEX = _OSVERSIONINFOEX; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; function GetVersionExA(var lpVersionInformation: TOSVersionInfoEX): BOOL; stdcall; external kernel32; const VER_NT_WORKSTATION :Integer = 1; VER_SUITE_ENTERPRISE :Integer = 2; VER_NT_SERVER :Integer = 3; VER_SUITE_DATACENTER :Integer = 128; VER_SUITE_PERSONAL :Integer = 512; var Form1: TForm1; implementation {$R *.dfm} function OSInfo:String; var NTBres, BRes: Boolean; OSVI: TOSVERSIONINFO; OSVI_NT: TOSVERSIONINFOEX; TmpStr: String; begin Result := 'Error'; NTBRes := False; try OSVI_NT.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFOEX); NTBRes := GetVersionExA(OSVI_NT); OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); BRes := GetVersionEx(OSVI); except OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); BRes := GetVersionEx(OSVI); end; if (not BRes) and (not NTBres) then Exit; Move(OSVI, OSVI_NT, SizeOf(TOSVersionInfo)); case OSVI_NT.dwPlatformId of VER_PLATFORM_WIN32_NT: begin if OSVI_NT.dwMajorVersion <= 4 then Result := 'Windows NT '; if (OSVI_NT.dwMajorVersion = 5) and (OSVI_NT.dwMinorVersion = 0) then Result := 'Windows 2000 '; if (OSVI_NT.dwMajorVersion = 5) and (OSVI_NT.dwMinorVersion = 1) then Result := 'Windows XP '; if NTBres then begin if OSVI_NT.wProductType = VER_NT_WORKSTATION then begin if OSVI_NT.wSuiteMask = VER_SUITE_PERSONAL then Result := Result + 'Personal' else Result := Result + 'Professional'; end else if OSVI_NT.wProductType = VER_NT_SERVER then begin if OSVI_NT.wSuiteMask = VER_SUITE_DATACENTER then Result := Result + 'DataCenter Server' else if OSVI_NT.wSuiteMask = VER_SUITE_ENTERPRISE then Result := Result + 'Advanced Server' else Result := Result + 'Server'; end; end else begin with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKeyReadOnly('SYSTEM\CurrentControlSet\Control\ProductOptions') then try TmpStr := UpperCase(ReadString('ProductType')); if TmpStr = 'WINNT' then Result := Result + 'Workstation'; if TmpStr = 'SERVERNT' then Result := Result + 'Server'; finally CloseKey; end; finally Free; end; end; end; VER_PLATFORM_WIN32_WINDOWS : begin if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 0) then begin Result := 'Windows 95 '; if OSVI.szCSDVersion[1] = 'C' then Result := Result + 'OSR2'; end; if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 10) then begin Result := 'Windows 98 '; if OSVI.szCSDVersion[1] = 'A' then Result := Result + 'SE'; end; if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 90) then Result := 'Windows Me'; end; VER_PLATFORM_WIN32s: Result := 'Microsoft Win32s'; else Result := 'Unknown'; end; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(OSInfo); end; end. |
|
Сообщ.
#29
,
|
|
|
|
Rouse_
спасибо тебе за исходник я его себе сохранил. еще раз убеждаюсь в великодушности программистов! но есть очень маленькое Но.... мне ненужен такой огромный код, мне бы всего навсего узнать Винда линейки НТ или нет, для того чтоб знать какой функцией пользоватся. |
|
Сообщ.
#30
,
|
|
|
|
n0wheremany, вот эту конструкцию
![]() ![]() if osVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then result := true; Гораздо красивее и логичнее переписать как: ![]() ![]() Result := osVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT; Добавлено Цитата Skynet @ мне ненужен такой огромный код, мне бы всего навсего узнать Винда линейки НТ или нет, для того чтоб знать какой функцией пользоватся Есть такая переменная Win32Platform вот какие значения она может примерять: Цитата VER_PLATFORM_WIN32s System is Win32s. VER_PLATFORM_WIN32_WINDOWS System is Windows 95. VER_PLATFORM_WIN32_NT System is Windows NT. Поэтому тебе достаточно лишь проверять ее состояние не прибегая к написанию своих функций... |