anoniem Geplaatst: 14 april 2003 Delen Geplaatst: 14 april 2003 Hallo, Ik wil een programmaatje schrijven dat ik via Geplande Taken aan kan roepen dat, zodra je het aanroept het systeem Power-Off doet. In Windows zit een tool - shutdown.exe - die het systeem af kan sluiten, maar die ondersteunt Power-Off niet. Ik krijg dus een melding dat ik het systeem uit kan schakelen. Nu had ik wat in de Windows SDK help files zitten neuzen, en daar had ik iets gevonden over ExitWindowsEx. Maar veel wijzer wordt ik er niet van. Wie heeft hier verstand van? Quote Link naar reactie
anoniem Geplaatst: 14 april 2003 Auteur Delen Geplaatst: 14 april 2003 Eerst zo je als je onder NT draait de recht goed moeten zetten. (ook onder 2000 en XP deze zijn ook NT). [code:1:d047681516] var hProc: Cardinal; hToken: Cardinal; pLUID: Int64; pPriv: TTokenPrivileges; pNewPriv: TTokenPrivileges; pSize: Cardinal; if Win32Platform = VER_PLATFORM_WIN32_NT then begin hProc := GetCurrentProcess(); OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); LookupPrivilegeValue(nil, 'SeShutdownPrivilege', pLUID); pPriv.PrivilegeCount := 1; pPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; pPriv.Privileges[0].Luid := pLUID; pSize := SizeOf(pNewPriv); AdjustTokenPrivileges(hToken, False, pPriv, SizeOf(pPriv), pNewPriv, pSize); end;[/code:1:d047681516] Nu kan je de functie "ExitWindowsEx" aan roepen: [code:1:d047681516] ExitWindowsEx(EWX_SHUTDOWN,0); [/code:1:d047681516] De volgende optie kunnen worden mee gegeven: EWX_LOGOFF EWX_REBOOT EWX_FORCE EWX_POWEROFF EWX_SHUTDOWN Suc6 Quote Link naar reactie
anoniem Geplaatst: 14 april 2003 Auteur Delen Geplaatst: 14 april 2003 Windows kan je zo afsluiten : procedure TForm1.Button1Click(Sender: TObject); begin ExitWindowsEx(EWX_SHUTDOWN,$FF); { Flags: EWX_LOGOFF EWX_REBOOT EWX_FORCE EWX_POWEROFF EWX_SHUTDOWN $FF is simpelweg niet gebruikt, maar moet wel worden ingevuld ! } end; ik hoop dat het dat is dat je bedoeld! Groetjes, Wim. Quote Link naar reactie
anoniem Geplaatst: 14 april 2003 Auteur Delen Geplaatst: 14 april 2003 okebedankt wim en rckoenes. Ga het zometeen thuis uitproberen. Lukt het niet, dan vertel ik het hier wel. Quote Link naar reactie
anoniem Geplaatst: 14 april 2003 Auteur Delen Geplaatst: 14 april 2003 [quote:2bf9531fb7="DJPeedee"] Ik wil een programmaatje schrijven dat ik via Geplande Taken aan kan roepen dat, zodra je het aanroept het systeem Power-Off doet. In Windows zit een tool - shutdown.exe - die het systeem af kan sluiten, maar die ondersteunt Power-Off niet. Ik krijg dus een melding dat ik het systeem uit kan schakelen. Nu had ik wat in de Windows SDK help files zitten neuzen, en daar had ik iets gevonden over ExitWindowsEx. Maar veel wijzer wordt ik er niet van. Wie heeft hier verstand van?[/quote:2bf9531fb7] [code:1:2bf9531fb7] ************************************************** * Shutdown PC code for Delphi (c) 2003 H4xX0r * * (Compatible code voor Win9x/ME/NT/2000/XP) * ************************************************** function FunctionDetect(const LibName, FuncName: String; var LibPointer: Pointer): boolean; var LibHandle: THandle; begin Result := false; LibPointer := Nil; if (LoadLibrary(PChar(LibName)) = 0) then Exit; LibHandle := GetModuleHandle(PChar(LibName)); if (LibHandle <> 0) then begin LibPointer := GetProcAddress(LibHandle, PChar(FuncName)); if (LibPointer <> Nil) then Result := true; end; end; function SetPrivilege(const PrivilegeName: string; Enable: boolean): boolean; var tpPrev, tp: TTokenPrivileges; token: THandle; dwRetLen: DWord; OSVersionInfo: TOSVersionInfo; _OpenProcessToken: function ( ProcessHandle: THandle; DesiredAccess: Cardinal; var TokenHandle: Cardinal): LongBool; stdcall; _LookupPrivilegeValue: function ( lpSystemName: PChar; lpName: PChar; var lpLuid: Int64): LongBool; stdcall; _AdjustTokenPrivileges: function ( TokenHandle: Cardinal; DisableAllPrivileges: LongBool; const NewState: _TOKEN_PRIVILEGES; BufferLength: Cardinal; var PreviousSate: _TOKEN_PRIVILEGES; var ReturnLength: Cardinal): LongBool; stdcall; begin Assert(not (PrivilegeName = ''), 'Pre-conditie: PrivilegeName is niet ingevuld'); result := False; OSVersionInfo.dwOSVersionInfoSize := SizeOf(OsVersionInfo); if GetVersionEx(OSVersionInfo) then begin if (OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT) then begin if (FunctionDetect('ADVAPI32.DLL', 'OpenProcessToken',@_OpenProcessToken) and FunctionDetect('ADVAPI32.DLL', 'LookupPrivilegeValueA',@_LookupPrivilegeValue) and FunctionDetect('ADVAPI32.DLL', 'AdjustTokenPrivileges',@_AdjustTokenPrivileges)) then begin if _OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token) then try tp.PrivilegeCount := 1; if _LookupPrivilegeValue(Nil, PChar(PrivilegeName), tp.Privileges[0].LUID) then begin if Enable 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; finally CloseHandle(token); end else begin // ShowMessage(IntToStr(GetLastError)); end; end; end else begin result := True; end; end; end; function ShutdownMyPC: boolean; begin SetPrivilege('SeShutdownPrivilege', True); result := ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN,0) end; [/code:1:2bf9531fb7] Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen