AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken

PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken

Offene Frage von "himitsu"
Ein Thema von Phil3005 · begonnen am 7. Okt 2014 · letzter Beitrag vom 7. Okt 2014
Antwort Antwort
Phil3005
(Gast)

n/a Beiträge
 
#1

PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken

  Alt 7. Okt 2014, 15:43
Delphi-Version: 7
Hallo,

ich möchte einen Embedded PC unter Windows XP zu bestimmten Zeitpunkten in den Ruhezustand versetzten und nach einer bestimmten Zeit wieder zurück zu holen. Dies soll über ein Delphi Programm gelöst werden.
Ich habe dazu die Funktion SetSuspendState gefunden. Ich verstehe aber nicht wie ich die verwenden soll.

Außerdem habe ich im Internet folgenden Code gefunden:

{
The SetSuspendState function suspends the system by shutting power down.
Depending on the Hibernate parameter,
the system either enters a suspend (sleep) state or hibernation.

Syntax:
}

function SetSuspendState(
Hibernate: Boolean,
ForceCritical: Boolean,
DisableWakeEvent: Boolean);


{ Parameters:

Hibernate: If this parameter is TRUE, the system hibernates.
If the parameter is FALSE, the system is suspended.
ForceCritical: If this parameter is TRUE, the system suspends operation immediately;
if it is FALSE, the system broadcasts a PBT_APMQUERYSUSPEND event to
each application to request permission to suspend operation.
DisableWakeEvent: If this parameter is TRUE, the system disables all wake events.
If the parameter is FALSE, any system wake events remain enabled.


Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows 98 and later.
}

var
_SetSuspendState: function (Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL
stdcall = nil;

function LinkAPI(const module, functionname: string): Pointer; forward;

function SetSuspendState(Hibernate, ForceCritical,
DisableWakeEvent: Boolean): Boolean;
begin
if not Assigned(_SetSuspendState) then
@_SetSuspendState := LinkAPI('POWRPROF.dll', 'SetSuspendState');
if Assigned(_SetSuspendState) then
Result := _SetSuspendState(Hibernate, ForceCritical,
DisableWakeEvent)
else
Result := False;
end;

function LinkAPI(const module, functionname: string): Pointer;
var
hLib: HMODULE;
begin
hLib := GetModulehandle(PChar(module));
if hLib = 0 then
hLib := LoadLibrary(PChar(module));
if hLib <> 0 then
Result := getProcAddress(hLib, PChar(functionname))
else
Result := nil;
end;

// Example Call:
// Beispielaufruf:

procedure TForm1.Button1Click(Sender: TObject);
begin
SetSuspendState(True, False, False);
end;


vgl.:http://www.swissdelphicenter.com/de/...de.php?id=1401

Dieser Funktioniert so leider nicht. Ich verstehe dort auch nicht, wiso Assigned() verwendet wird. (Ich weiß was es macht, ich verstehe aber den Sinn dahinter nicht). Außerdem weiß ich nicht, was die gesamte Funktion LinkAPI macht .

Über schnelle Hilfe wäre ich sehr dankbar. Falls jemand Vorschläge hat, wie man den PC wieder aus dem Ruhemodus holt, wäre ich auch dafür dankbar

Mit freundlichen Grüßen
phil3005
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#2

AW: PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken

  Alt 7. Okt 2014, 15:53
Dieser Funktioniert so leider nicht.
Und was bedeutet das?
* Fehlermeldung (z.B. Exception)
* oder macht einfach nichts

Und was sagt der Debugger, wenn du mal nachsiehst was der Code macht?

Ich verstehe dort auch nicht, wiso Assigned() verwendet wird. (Ich weiß was es macht, ich verstehe aber den Sinn dahinter nicht).
Verstehe ich nicht, wenn du weißt was es macht, dann sollte doch der Sinn auch klar sein?

LinkAPI gibt NIL zurück, wenn es die DLL oder Funktion nicht findet.
Und if Assigned(LinkAPI) then macht nichts Anderes, als ein if @LinkAPI <> nil then (bei einem Methodenzeiger wird das mit dem <> etwas umständlich, weil das intern 2 Zeiger sind).

Außerdem weiß ich nicht, was die gesamte Funktion LinkAPI macht .
Denn Code hast du dir aber angesehn und du weißt was die 3 Funktionen darin machen?

- versuche die geladene DLL zu finden und gib das Handle zurück
- wenn noch nicht geladen, dann versuch die DLL zu laden und gib das Handle zurück
- wenn DLL gefunden/geladen, dann suche die exportierte Funktion und gib deren Zeiger zurück (und wenn nichts, dann NIL)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz