Einzelnen Beitrag anzeigen

MP3Freak

Registriert seit: 1. Jul 2008
Ort: irgendwo östlich von München
5 Beiträge
 
#9

Re: Smart Shutdown Manager

  Alt 1. Jul 2008, 11:15
Servus,
bin überrascht das des auch unter Ubuntu funzt.
Mit welcher Wine-Version war das?
Bzw. warst du als Root angemeldet oder als normaler Benutzer?

Ich werd dein Proggi ma unter OpenSuse probieren,
weil ich da ein Problem hab von Delphi aus die Kiste herunterzufahren.

Haste da zwecks Linux noch was spezielles eingebaut?
Folgender Code geht unter Windoof prima, hat aber eben unter Linux nicht funktioniert (einfach nix passiert)
weil Wine diesen API aufruf offenbar net an das System weitergibt.

Delphi-Quellcode:
 function ExWindows(const AFlag: Word; f9x, fnt, debug:boolean): Boolean;
 var
   vi : TOSVersionInfo;
   hToken : THandle;
   tp : TTokenPrivileges;
   h : DWord;
 begin
  result:= false;

  {wenn keiner der modi erzwungen ist, automatisch wählen}
  if (f9x = false) and (fnt = false) then
  begin;
   vi.dwOSVersionInfoSize:=SizeOf(vi);
   if GetVersionEx(vi) then
   begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
     fnt:= true;
    end
    else
    begin;
     f9x:= true;
    end;
   end;
  end;

  if debug=true then
  begin;
   if fnt=true then showmessage('NT System');
   if f9x=true then showmessage('9x System');

   if messagedlg('Wirklich ausführen?', mtconfirmation, [mbyes]+[mbno], 0) <> mryes then exit;
  end;

  {Ausführen (NT)}
  if fnt=true then
  begin;
      // Windows NT
      // Achtung bei Delphi 2 muß @hToken stehen ...
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
        exit; {wichtig}
      end;
  end;

  {Ausführen (9x)}
  if f9x = true then
  begin // Windows 9x
      Result := ExitWindowsEx(Aflag, 0);
      exit; {wichtig}
  end;

 end; {of exitwindows}
Gruß
Peter
  Mit Zitat antworten Zitat