Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Сделать Выкл. виндам   Найти похожие ветки 

 
Cash ©   (2003-11-12 21:43) [0]

Я точно не знаю, к какой теме это относится, но мне надо:
Сделать Выключение Виндов 9х, NT, XP.
Взял все три потаму, что, на мой взгляд, под 9x и NT,XP команды должны быть разными. Пишите, разъясняйте.


 
WithOut Any ... ©   (2003-11-12 22:02) [1]

Считаю, что для Win9x и WinMe проблем не должно возникать (rundll). А с WinNt (Win2k и WinXP) просто можно найти в FAQ (просто не интересовался)


 
Narayan ©   (2003-11-12 22:47) [2]

типа того...


procedure TForm1.Button1Click(Sender: TObject);
var hToken: THandle;
tkpNew: TTokenPrivileges;
RetLen: DWORD;
begin
If LookupPrivilegeValue(nil,"SeShutdownPrivilege",tkpNew.Privileges[0].Luid) Then
begin
tkpNew.PrivilegeCount := 1;
tkpNew.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
If OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, hToken) Then
If AdjustTokenPrivileges(hToken, FALSE, tkpNew, 0, nil, RetLen) Then
ExitWindowsEx(EWX_FORCE,0);
end;
end;


 
Вадим ©   (2003-11-13 00:02) [3]

unit WinST;

interface

uses
Windows, SysUtils;

type
TWinType = (wtWindows95, wtWindowsNT, wtWin32s, wtUnknown);
TWinExitType = (weNone, weLogoff, weReboot, weShutDown, wePowerOff);

function WinSTExecute(WinExitType: TWinExitType): Boolean;
function GetWinType: TWinType;

implementation

const
WinExitFlagsArr: array[TWinExitType] of Word =
(666, EWX_LOGOFF, EWX_REBOOT, EWX_SHUTDOWN, EWX_POWEROFF);

function SetPrivilege(sPrivilegeName: string;
bEnabled: Boolean): Boolean;
var
TPPrev,
TP: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
if not OpenProcessToken(GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
//FLastError := "Error: OpenProcessToken";
Exit;
end;

TP.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(sPrivilegeName), TP.Privileges[0].LUID) then
begin
if bEnabled then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
TP.Privileges[0].Attributes := 0;

dwRetLen := 0;
if AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev),
TPPrev, dwRetLen) then
Result := True
else
//FLastError := "Error: AdjustTokenPrivileges";
end;
CloseHandle(Token);
end;

function WinSTExecute(WinExitType: TWinExitType): Boolean;
var
Flags: Word;
begin
Result := False;
Flags := WinExitFlagsArr[WinExitType];
if Flags = 0 then Exit;

// if Unconditional then Flags := Flags or EWX_FORCE;

if GetWinType <> wtWindowsNT then
ExitWindowsEx(Flags, 0)
else
if SetPrivilege("SeShutdownPrivilege", True) then
begin
Result := ExitWindowsEx(Flags, 0);
SetPrivilege("SeShutdownPrivilege", False);
end;

// if not Result then
// FLastError := "Error: " + IntToStr(GetLastError);
end;

function GetWinType: TWinType;
var
VersionInfo: TOSVersionInfo;
begin
Result := wtUnknown;
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
case VersionInfo.dwPlatformId of
VER_PLATFORM_WIN32S: Result := wtWin32s;
VER_PLATFORM_WIN32_WINDOWS: Result := wtWindows95;
VER_PLATFORM_WIN32_NT: Result := wtWindowsNT;
end;
end;

end.


 
Cash ©   (2003-11-13 14:06) [4]

Товарищи. Товарищи. Как на счет разъяснений. Могу даже шаблон привести:
1. - О.С. {желательно; ели О.С. любая, то так и пшите}
2. - Типа, сам код. И все, что к нему приклеивается.
3. - Если не лень, то коментарии. :)

Да, и в общем, назрел тут вопросик, Как определить, в каких виндах обитает моя прога?(быть может несущественный, но тем не менее.)


 
clickmaker ©   (2003-11-13 14:08) [5]


> Cash © (13.11.03 14:06) [4]
> Да, и в общем, назрел тут вопросик, Как определить, в каких
> виндах обитает моя прога?(быть может несущественный, но
> тем не менее.)

Тебе ж Вадим © (13.11.03 00:02) [3] все написал. Читай внематочней


 
Cash ©   (2003-11-13 14:34) [6]

Сколько раз мне мама говорила, читать сообщения, а после писать ответы.
clickmaker: Да я на секунду выскочил в сеть. Пять минут назад все прочитал, далее сам додумывай. (время создания записи)

Объявляю благодарность Вадиму


 
Моджахедос   (2003-11-14 23:00) [7]

Ну, держи, может и мне благодарность объявишь :)


program SD;

uses
Windows;

{$R *.RES}

procedure ShutDown95;
begin
if NOT ExitWindowsEx (EWX_POWEROFF or EWX_FORCE,0) then
ExitWindowsEx (EWX_SHUTDOWN or EWX_FORCE,0)
end;

procedure ShutDownNT;
var
Dummy, Priv: TTokenPrivileges; TH: Cardinal;
LUID: TLargeInteger; RL: Cardinal;
begin

OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS or TOKEN_QUERY, TH);

LookUpPrivilegeValue(nil, "SESHUTDOWNPRIVILEGE", LUID);
Priv.PrivilegeCount:= 1;
Priv.Privileges[0].Luid:= LUID;
Priv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(TH,false,Priv,SizeOf(Priv),Dummy,RL);

if GetLastError <> ERROR_SUCCESS then
MessageBox (0,"Can not get SHUT DOWN privileges",
"Выключай кнопкой",MB_OK)
else
begin
if NOT ExitWindowsEx (EWX_POWEROFF or EWX_FORCE,0) then
ExitWindowsEx (EWX_SHUTDOWN,0)
end;

end;

{----------Main block------------}
var
OSRecord: OSVERSIONINFO;

begin
OSRecord.dwOSVersionInfoSize := SizeOf (OSVERSIONINFO);
GetVersionEx(OSRecord);

Case OSRecord.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS,
VER_PLATFORM_WIN32s: ShutDown95;

VER_PLATFORM_WIN32_NT: ShutDownNT;
end;
end.



 
Моджахедос   (2003-11-14 23:02) [8]

Как раз еще увидишь, как платформу определять.


 
Cash ©   (2003-11-14 23:04) [9]

Моджахедос: Твоя взяла.



Страницы: 1 вся ветка

Текущий архив: 2004.02.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-2272
BKGG
2004-01-13 12:11
2004.02.02
Скажите пожалусто, от кудо можно скачать дизассемблер.


3-1974
Петр
2004-01-09 10:13
2004.02.02
Ошибка с ADOQuery


14-2273
Kviz
2004-01-07 14:44
2004.02.02
Вот собрался новый мониторчик ЖК брать, прошу помощи.


3-1978
Innokenty
2004-01-09 03:21
2004.02.02
DB Access и поля Date/Time.


1-2189
V-A-V
2004-01-21 07:51
2004.02.02
Определение екзешника