Avatar billede fbisen Nybegynder
11. januar 2008 - 21:00 Der er 7 kommentarer og
1 løsning

Standby med SetSuspendState

Jeg vil gerne have mit program til at sætte computeren i standby, og derefter vække den på et specifikt tidspunkt.

Hvis jeg kalder SetSuspendState(false, false, false), skulle den gå i standby, og jeg kan via SetWaitableTimer på en eller anden måde få computeren til at vågne på et specifikt tidspunkt.

Jeg har ikke leget med SetWaitableTimer. Lige nu kan jeg ikke få SetSuspendState til at virke. På compile tidspunkt får jeg følgende fejl:
[Linker Error] Unresolved external '__stdcall SetSuspendState(unsigned char, unsigned char, unsigned char)' referenced from BlaBla\SUSPEND\UNIT1.OBJ

Jeg kan ikke få programmet til at køre. Jeg har søgt på fejlen, og nogle steder står der noget om måske for gammelt SDK.
Jeg bruger Borland C++ Builder 6.

Hjælp!!!

Hvis nogen kan fortælle mig hvordan jeg får det til at virke, så vil noget hjælp til brug af SetWaitableTimer også være dejligt. Kan ikke lige se hvordan jeg bruger den.
Avatar billede arne_v Ekspert
11. januar 2008 - 21:06 #1
Den skulle have eksisteret siden Win2000.

Linker du mod PowrProf.lib ?
Avatar billede fbisen Nybegynder
11. januar 2008 - 21:33 #2
Det ved jeg ikke hvordan man lige gør.
Det jeg har gjort, er at inkludere PowrProf.h. Andet har jeg ikke gjort.
#include "PowrProf.h"

Linket til Microsoft forklaring:
http://msdn2.microsoft.com/en-us/library/aa373201.aspx
Avatar billede arne_v Ekspert
12. januar 2008 - 21:42 #3
Der må være en måde at instrurere BCB6 til at bruge et lib.
Avatar billede fbisen Nybegynder
13. januar 2008 - 10:29 #4
Jeg har prøvet Project -> Add to project.
Der har jeg så valgt filen PowrProf.lib.

Det giver den præcis samme fejl.
(Det skal siges, at jeg har filen fra Visual Studio, så den skulle konverteres med et BCB tool kaldet coff2omf.exe, fordi filen var et andet format)

Jeg kan ikke finde ud af hvor jeg ellers skulle fortælle BCB6 at bruge filen. Er det noget man gør i selve koden?
Avatar billede fbisen Nybegynder
13. januar 2008 - 11:56 #5
Jeg synes det er underligt, fordi i PowrProf.h, er funktionen defineret:
BOOLEAN WINAPI SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN);

Der findes ikke nogen med unsigned char. Men hvis jeg ikke inkluderer den, så kan den slet ikke finde SetSuspendState.
Desuden er versionen af PowrProf.h = 1
Avatar billede fbisen Nybegynder
12. juli 2008 - 09:06 #6
Jeg mener at have fået programmet til at virke med følgende kode:

typedef BOOL (WINAPI *SetSuspendState )(BOOL,BOOL,BOOL );

SetSuspendState pSetSuspendState=0;
HINSTANCE handle = ::LoadLibrary("Powrprof.dll");
if ( handle == 0 )
return;

if (handle)
pSetSuspendState = (SetSuspendState) ::GetProcAddress(handle,"SetSuspendState");
pSetSuspendState(false, false, false);  // Suspend system without forcing, and wakes on all events
::FreeLibrary(handle);

Jeg takker for hjælpen, skal vi dele pointsne arne_v, eller hvad synes du?
Avatar billede arne_v Ekspert
13. juli 2008 - 18:52 #7
Bare behold dem. LoadLibrary og GetProcAddress var ikke min anbefaling.
Avatar billede fbisen Nybegynder
13. juli 2008 - 19:14 #8
Bare iorden :)
Hav en god aften!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester