Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
14-2343
Думкин
2004-01-10 06:45
2004.02.02
С днем рождения! 10 января.


4-2420
Вадим
2003-11-25 10:00
2004.02.02
Поверх всех окон


14-2276
Teren
2004-01-02 18:01
2004.02.02
Странная ситуация с файлом


1-2153
DimonNew
2004-01-21 17:36
2004.02.02
ComboBox и массив


4-2410
Doomin
2003-11-25 15:55
2004.02.02
Запус процесса от имени другого пользователя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский