Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izvorni kod za gasenje racunara posle nekog vremena

[es] :: C/C++ programiranje :: Izvorni kod za gasenje racunara posle nekog vremena

[ Pregleda: 5316 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

wargamehide
Sex & Ex
`

Član broj: 17397
Poruke: 51
*.ptt.yu.



Profil

icon Izvorni kod za gasenje racunara posle nekog vremena14.03.2004. u 09:54 - pre 225 meseci
Moze li neko da objavi izvorni kod za gasenje posle nekog proizvoljnog vremena
maybe baby
baby meybe
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.smin.sezampro.yu.



Profil

icon Re: Izvorni kod za gasenje racunara posle nekog vremena20.03.2004. u 23:00 - pre 225 meseci
Kako ne bih doprineo sirenju navike, da se traze _kompletna_ resenja "domacih zadataka", slede samo neophodni delovi, umesto kompletnog programa.
Za Win9x OS-e, dovoljan je poziv API funkcije
Code:
ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0);
Medjutim, na OS-ima zasnovanim na NT jezgru (WinNT/2k/XP) potrebno je omoguciti tu "privilegiju" (ako je dozvoljeno) za tekuci proces.
Funkcija koja bi omogucavala tu "privilegiju" mogla bi da izgleda ovako:
Code:
BOOL EnablePrivilege(LPTSTR privilege)
{
        BOOL success;
        HANDLE token;
        LUID luid;
        TOKEN_PRIVILEGES tokenPrivileges;

        /* dobijanje vrednosti "token-a" za tekuci (ovaj) proces */
        success = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                                                                                &token);
        if (!success)
                return FALSE;
        /* dobijanje vrednosti za datu "privilegiju" */
        success = LookupPrivilegeValue(0, privilege, &luid);
        if (!success)
                return FALSE;
        /* omogucavanje same "privilegije" */
        tokenPrivileges.PrivilegeCount = 1;
        tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        tokenPrivileges.Privileges[0].Luid = luid;
        success = AdjustTokenPrivileges(token, FALSE, &tokenPrivileges, 0, 0, 0);
        /* ako se dogodila greska, vraca se "pogresno" (FALSE - 0). U suprotnom... */
        if (GetLastError() != ERROR_SUCCESS)
                return FALSE;
        /* vraca se "tacno" (TRUE - 1) */
        return TRUE;
}

odnosno za onemogucavanje te "privilegije":
Code:
BOOL DisablePrivilege(LPTSTR privilege)
{
        HANDLE token;
        LUID luid;
        BOOL success;
        TOKEN_PRIVILEGES tokenPrivileges;

        /* dobijanje vrednosti "token-a" za tekuci (ovaj) proces */
        success = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
                                                                                &token);
        if (!success)
                return FALSE;
        /* dobijanje vrednosti za datu "privilegiju" */
        success = LookupPrivilegeValue(0, privilege, &luid);
        if (!success)
                return FALSE;
        /* onemogucavanje "privilegije" */
        tokenPrivileges.PrivilegeCount = 1;
        tokenPrivileges.Privileges[0].Luid = luid;
        tokenPrivileges.Privileges[0].Attributes = 0;
        success = AdjustTokenPrivileges(token, FALSE, &tokenPrivileges, 0, 0, 0);
        if (GetLastError() != ERROR_SUCCESS)
                HandleError("AjdustTokenPrivilege()");
        return TRUE;
}

Nakon omogucavanje "privilegije" za tekuci proces, na isti nacin kao i kod Win9x se poziva funkcija ExitWindowsEx(), nakon cega se "privilegija" uobicajeno onemogucava.

Za gasenje racunara nakon odredjenog vremenskog perioda, moze se umesto ExitWindowsEx() pozvati funkcija InitiateSystemShutdown(), ili uz naknadni poziv ExitWindowsEx() funkcije, funkcija Sleep(), (opet) ili (ako je u pitanju "event-driven" Win32 API program) meriti proteklo vreme obradjivnajem poruke WM_TIMER...
 
Odgovor na temu

wargamehide
Sex & Ex
`

Član broj: 17397
Poruke: 51
*.ptt.yu.



Profil

icon Re: Izvorni kod za gasenje racunara posle nekog vremena21.03.2004. u 21:16 - pre 225 meseci
Citat:
Kako ne bih doprineo sirenju navike, da se traze _kompletna_ resenja "domacih zadataka", slede samo neophodni delovi, umesto kompletnog programa.




Ovo je sasvim OK, ali nije dobro ako se nezna programiranje
maybe baby
baby meybe
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
195.252.80.*



Profil

icon Re: Izvorni kod za gasenje racunara posle nekog vremena22.03.2004. u 00:20 - pre 225 meseci
Ako se ne zna programiranje u C/C++-u (odnosno, samo C-u), onda ne treba ni pocinjati sa Win32 API programiranjem. U ovom slucaju, takodje preporucujem da se posete "TOP" teme u ovom forumu.

Madjutim, ako se, zna napisati jednostavan "Hello World" program u C/C++-u, onda se relativno lako mogu dodati funkcije (kao i pozivi funkcija) koje sam naveo uz objasnjenje, kako bi se dobio program koji bi iskljucivao racunar (pod Windows OS-om) nakon odredjenog vremenskog perioda.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Izvorni kod za gasenje racunara posle nekog vremena

[ Pregleda: 5316 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.