![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отключение в XP????????????? [D6, WinXP]
CRACKISH © (2003-01-28 20:20:00)Люди как сделать так:
Чтобы прога узнавала что за платформа(98,XP), если виндос 98 то такой код для выключения кампа, если XP то такой (нипишите пожалуйста код)??????????
DVM (2003-02-02 01:07:00) [1]Вот так еще можно:
procedure MSWinShutdownEx(Wnd:hWnd);
type TMSShDwn = procedure(aWnd: hWnd); stdcall;
var MSShDwn: TMSShDwn;
begin
@MSShDwn := GetProcAddress(GetModuleHandle(PChar("shell32.dll")), pchar(60));
MSShDwn(Wnd);
end;
drpass (2003-01-31 18:35:00) [2]Вот извращенцы! Вот так будет прекрасно работать в любой системе без всяких проверок:
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, "SeShutdownPrivilege",tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength);
end;
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
:)))
DVM (2003-01-31 16:45:00) [3]Есть еще вариант, но пока только больше теоретический.
В shell32.dll есть функция выключающая комп. Та, которой Explorer пользуется.
Но она недокументирована.
Михайлов Антон (2003-01-30 18:36:00) [4]хе...
вот мой вариант :)
Procedure Shutdown;
var
hToken: THandle;
tkp: TTokenPrivileges;
ReturnLength: Cardinal;
begin
If Win32Platform = VER_PLATFORM_WIN32_WINDOWS Then
Begin
if not ExitWindowsEx(EWX_Force or
EWX_PowerOff or
EWX_ShutDown, 0) then
MessageBox(0, "An application refused to terminate", "Win32", MB_OK);
end;
If Win32Platform = VER_PLATFORM_WIN32_NT Then
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
LookupPrivilegeValue(nil, "SeShutdownPrivilege",tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength)then
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);
end;
end;
Код не тестировался.... но я думаю работать будет :)
DVM (2003-01-30 09:29:00) [5]EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF
А то некоторые компы не выключаются, а доходят до заставки
"Теперь питание компьютера..."
ДМ (2003-01-30 05:18:00) [6]Код для выключения Виндов, никакую версию проверять не надо...
procedure shutdown;
var
hToken:THandle;
tkp,PrevState:_TOKEN_PRIVILEGES;
k:DWORD;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(PrevState), PrevState, k);
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0);
end;
DVM (2003-01-29 21:02:00) [7]http://delphibase.endimus.com/?action=viewtopic&topic=syscontrol
CRACKISH (2003-01-29 20:47:00) [8]А как выключить камп в XP!!!!!!! зарание благодарен!!!!!
CRACKISH (2003-01-29 08:33:00) [9]спасибо! большое!!!!!!!!!!!!!!!!!
Ich Hasse (2003-01-28 21:53:00) [10]Вот так получить версию Windows
function GettingWinVer: string;
var
temp1,
temp2,
temp3: integer;
osvi: OSVERSIONINFO;
begin
osvi.dwOSVersionInfoSize:=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
temp1:=osvi.dwMajorVersion;
temp2:=osvi.dwMinorVersion;
temp3:=osvi.dwPlatformId;
if temp1=4 then
begin
if temp2=0 then
begin
if temp3=VER_PLATFORM_WIN32_WINDOWS then
Result:="Windows 95";
end;
end;
if temp1=4 then
begin
if temp2=10 then
Result:="Windows 98";
end;
if temp1=4 then
begin
if temp2=90 then
Result:="Windows Me";
end;
if temp1=3 then
begin
if temp2=51 then
Result:="Windows NT 3.51";
end;
if temp1=4 then
begin
if temp2=0 then
Result:="Windows NT 4.0";
end;
if temp1=5 then
begin
if temp2=0 then
Result:="Windows 2000";
end;
if temp1=5 then
begin
if temp2=1 then
Result:="Windows XP";
end;
end;
Карлсон (2003-01-28 20:33:00) [11]а подумать самому не судьба?
если по делу, то просто проверяешь версию виндов, а далее сам додумай.
весь код в ФАК"е