![]() |
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.: ![]() 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 |
AW: PC in Ruhezustand und nach bestimmter Zeit wieder aufwecken
Zitat:
* Fehlermeldung (z.B. Exception) * oder macht einfach nichts Und was sagt der Debugger, wenn du mal nachsiehst was der Code macht? Zitat:
LinkAPI gibt NIL zurück, wenn es die DLL oder Funktion nicht findet. Und
Delphi-Quellcode:
macht nichts Anderes, als ein
if Assigned(LinkAPI) then
Delphi-Quellcode:
(bei einem Methodenzeiger wird das mit dem <> etwas umständlich, weil das intern 2 Zeiger sind).
if @LinkAPI <> nil then
Zitat:
- 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:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz