Avatar billede Slettet bruger
20. december 2005 - 17:35 Der er 21 kommentarer og
1 løsning

Lukning, genstart, standby osv.

Hej eksperter!
Hvordan lukker jeg computeren via C++?
Genstarter?
Standby?
Dvale?
Skriv gerne hele koden!
Avatar billede arne_v Ekspert
20. december 2005 - 17:44 #1
Avatar billede Slettet bruger
20. december 2005 - 20:54 #2
Tak for det! Bruges de sammen med 'system()'?
Avatar billede bertelbrander Novice
20. december 2005 - 22:57 #3
Et simpelt eksempel der slukker computeren uden at spørge om noget som helst:

#include <windows.h>
#include <stdio.h>

BOOL SetPrivilege()
{
  HANDLE Token;
  LUID luid;
  TOKEN_PRIVILEGES tp;

  if(!OpenProcessToken(GetCurrentProcess(), TOKEN_WRITE, &Token))
  {
      printf("OpenThreadToken error: %u\n", GetLastError());
      return FALSE;
  }

  if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid))
  {
      printf("LookupPrivilegeValue error: %u\n", GetLastError());
      return FALSE;
  }


  tp.PrivilegeCount = 1;
  tp.Privileges[0].Luid = luid;
  tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  AdjustTokenPrivileges(Token,
                        FALSE,
                        &tp,
                        sizeof(TOKEN_PRIVILEGES),
                        (PTOKEN_PRIVILEGES )NULL,
                        (PDWORD )NULL);

  if (GetLastError() != ERROR_SUCCESS)
  {
      printf("AdjustTokenPrivileges error: %u\n", GetLastError());
      return FALSE;
  }

  return TRUE;
}

int main()
{
  if(!SetPrivilege())
  {
      printf("Failed to set privilege\n");
      return 0;
  }
  if(!ExitWindowsEx(EWX_POWEROFF, 0))
  {
      printf("Error: %d\n", GetLastError());
  }
}
Avatar billede Slettet bruger
21. december 2005 - 07:44 #4
Beklager - men jeg er lidt hysterisk...
Gider du skrive den i C++?
Med cout i stedet for printf?
Jeg forsår ikke det andet :(
Avatar billede arne_v Ekspert
21. december 2005 - 08:19 #5
printf versus cout har da intet med ExitWindowsEx kaldet at gøre
Avatar billede Slettet bruger
01. januar 2006 - 16:08 #6
printf versus cout har da intet med ExitWindowsEx kaldet at gøre
> Huh?
Hvad mener du?
Det har sikkert ikke noget at sige, men jeg forstår simpelthen ikke print.
Avatar billede arne_v Ekspert
01. januar 2006 - 17:12 #7
printf("Failed to set privilege\n");

kan rstattes af

cout << "Failed to set privilege" << endl;

men måske vil du skrive fejl til en log fil eller bruge en popup dialog box
eller noget andet
Avatar billede Slettet bruger
06. januar 2006 - 22:05 #8
Hvad betyder %u???
Avatar billede Slettet bruger
06. januar 2006 - 22:06 #9
Eller %d?
Avatar billede arne_v Ekspert
06. januar 2006 - 22:13 #10
%d betyder sæt argument ind som tal her
Avatar billede arne_v Ekspert
06. januar 2006 - 22:14 #11
printf("%d=%s\n",123,"abc");

udskriver:

123=abc

og svarer derfor til:

cout << 123 << "=" << "abc" << endl;
Avatar billede arne_v Ekspert
06. januar 2006 - 22:14 #12
%u står sikkert for unsigned tal
Avatar billede maqhem Nybegynder
18. januar 2006 - 13:20 #13
hvor meget skulle du have for, at skære koden ud i pap, altså fortælle hvorfor du skriver som du gør?

Koden virker jo fint, men hvad betyder det hele!? Hvorfor kan man ikke bare nøjes med:

#include <windows.h>
#include <stdio.h>

int main(){
    ExitWindowsEx(EWX_POWEROFF, 0);
}
Avatar billede bertelbrander Novice
19. januar 2006 - 01:01 #14
Man kan ikke "bare" kalde ExitWindowsEx under Windows NT/2000/XP, for så vil den ikke slukke.

Slår man op under ExitWindowsEx på msdn står der:
"Windows NT/2000: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges."

Du kan læse om "access control" og "Privileges" her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/access_control.asp

Det er en lidt indviklet...
Avatar billede maqhem Nybegynder
19. januar 2006 - 08:35 #15
Ja, det må jeg da sige :o

Pyt. Nu har jeg koden, om jeg så forstår den .... ja, det kommer jeg nook til en dag :)
Avatar billede Slettet bruger
01. april 2006 - 08:16 #16
Jeg fprstår i hvert fald ingenting.
Nå, put, bare smid et svar.
Dette spørgsmål trækker godt nok ud...
Avatar billede Slettet bruger
01. april 2006 - 08:16 #17
*pyt
Avatar billede Slettet bruger
01. april 2006 - 08:16 #18
*forstår
Avatar billede Slettet bruger
01. april 2006 - 08:16 #19
*GOD RETSTAVNING*
Avatar billede maqhem Nybegynder
01. april 2006 - 10:40 #20
kan ikke huske. Skal jeg svare?
Avatar billede Slettet bruger
01. april 2006 - 18:58 #21
Egentlig var det vist arne_v...
Whatever, for god venskabs skyld :)
Avatar billede Slettet bruger
01. april 2006 - 18:59 #22
--- LUKKET ---
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