Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken (https://www.delphipraxis.net/182180-pc-ruhezustand-und-nach-bestimmter-zeit-wieder-aufwecken.html)

Phil3005 7. Okt 2014 14:43

Delphi-Version: 7

PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken
 
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 :-D.

Ü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

himitsu 7. Okt 2014 14:53

AW: PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken
 
Zitat:

Zitat von Phil3005 (Beitrag 1275127)
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?

Zitat:

Zitat von Phil3005 (Beitrag 1275127)
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
Delphi-Quellcode:
if Assigned(LinkAPI) then
macht nichts Anderes, als ein
Delphi-Quellcode:
if @LinkAPI <> nil then
(bei einem Methodenzeiger wird das mit dem <> etwas umständlich, weil das intern 2 Zeiger sind).

Zitat:

Zitat von Phil3005 (Beitrag 1275127)
Außerdem weiß ich nicht, was die gesamte Funktion LinkAPI macht :-D.

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)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:12 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