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