[ blackZer0 @ 31.01.2007. 22:14 ] @
kako da napisem program normalno u jeziku C, koji ce kada se pokrene iz windowsa prikazati neku poruku i posle nekoliko sekundi restartovati racunar? |
[ blackZer0 @ 31.01.2007. 22:14 ] @
[ NrmMyth @ 31.01.2007. 22:45 ] @
[ caiser @ 31.01.2007. 22:59 ] @
Wow, nisam znao da windows ima shutdown komandu. Ovo ce mi lepo doci. :)
[ blackZer0 @ 01.02.2007. 19:16 ] @
a koju bibliotecku funkciju da pozovem, da li moze neko da mi napise konkretno program kako bi trebalo da izgleda...
[ tosa @ 02.02.2007. 01:30 ] @
Funkcija je, kao što ti je NrmMyth rekao, "system" a da bi mogao da
je zoveš moraš include-ovati <process.h>. Inače kada se već govori o shutdown komandi, pretpostavka je da je u pitanju windows pa to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu. [ Shadowed @ 02.02.2007. 01:37 ] @
Zasto bi morao da menja ring-level? Ako user koji pokrece program ima pravo da iskljuci racunar (a to ima cak i limited user), imace i program.
[ X Files @ 02.02.2007. 07:57 ] @
Postoji cela istorija 'načina' kako se može 'zagasiti' Windows, a postoji i istorija problem
koji su pratili te načine, u zavisnosti od toga koja su prava i privilegije postavljeni. Pored pomenutog system( "shutdown -r -f -t 03" ), koji je univerzalni wrapper koji bi trebalo da radi, Windows se gasi sa API-jem: Code: ExitWindowsEx(); ... pri čemu prethodno treba imati određene privilegije. Ukoliko me pamćenje dobro služi (na osnovu prijava korisnika po raznoraznim forumima), nekad nije dovoljno biti korisnik sa Admin pravima da bi se Windows ugasio, restartovao ili promenio User. Prethodno je potrebno pozvati: Code: AdjustTokenPrivileges() ... jer ExitWindowsEx() zahteva da 'calling process' ima SE_SHUTDOWN_NAME privilegije. Mislim da je to u suštini ovo (uvo uzeti sa rezervom):
Evo jedan primer (baziran na API-ju) koji sve to ima upakovano u jednu funkciju: Code: void SystemShutDown( int mode ) { HANDLE hToken; TOKEN_PRIVILEGES tkp; // AnsiString error; string error; // Get a token for this process. if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) error = "OpenProcessToken"; // Get the LUID for the shutdown privilege. LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ); tkp.PrivilegeCount = 1; // one privilege to set tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; // Get the shutdown privilege for this process. AdjustTokenPrivileges( hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 ); // Cannot test the return value of AdjustTokenPrivileges. if ( GetLastError() != ERROR_SUCCESS ) error = "AdjustTokenPrivileges"; switch( mode ) { // 0 = Forcefully close apps, shutdown and leave system at shutoff point case 0: if ( !ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE, 0 ) ) error = "ExitWindowsEx"; break; // 1 = Forcefully close apps, shutdown and reboot case 1: if ( !ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0 ) ) error = "ExitWindowsEx"; break; // 2 = Forcefully close apps, and logoff case 2: if ( !ExitWindowsEx( EWX_LOGOFF | EWX_FORCE, 0 ) ) error = "ExitWindowsEx"; break; // 3 = Forcefully close apps, shutdown and poweroff case 3: if ( !ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0 ) ) error = "ExitWindowsEx"; break; } } [ NrmMyth @ 02.02.2007. 09:31 ] @
Citat: tosa: Funkcija je, kao što ti je NrmMyth rekao, "system" a da bi mogao da je zoveš moraš include-ovati <process.h>. Inače kada se već govori o shutdown komandi, pretpostavka je da je u pitanju windows pa to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu. http://www.opengroup.org/onlin...09695399/functions/system.html I nalazi se u <stdlib.h>. [ TerrorsChild @ 22.03.2007. 21:11 ] @
Ovim putem bih se i predstavio kao novi član sam nekim iskustvom u C programiranju, C++-u, Asembleru, nešto malo C# i PHP. Nadam se da ču naučiti dosta ovdje. A sad back to topic (znam da je malo old, ali nije baš ni prahistorija so here it goes....)
Preuzeto sa gornjeg linka.... Citat: int system(const char *command); Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije. Ipak, sad sam se zainteresirao za ovu verziju koda sa system() u sebi. Dali bi to trebalo izgledati nekako ovako: Code: #include <proces.h> int main (void) { system ( "shutdown -r -f -t 03" ); return 0; } Ovo bi bila nekakva osnova. Ispravite me gdje griješim i pokažite mi kako da to izvedeme molim vas... [ SuPeR_MaSteR @ 22.03.2007. 23:59 ] @
Code: int system(const char *command); Citat: TerrorsChild: Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije. A ja bih rekao da je to prototip funkcije system celobrojne povratne vrednosti, koja ima jedan argument - const pointer na tip char. [ TerrorsChild @ 23.03.2007. 06:09 ] @
Da, valjda si u pravu....
A jesi primjetio da imam jednu veliku grešku, napisao sam "DEKLINACIJA" cjelobrojne varijable, umjesto deklaracija. Kao da je imenica, lol ![]() ![]() A kakav mi je onaj code gore, hoći li to raditi? Ispravci? [ TerrorsChild @ 24.03.2007. 08:45 ] @
I? Dali ima tko kakve ideje?
[ SuPeR_MaSteR @ 25.03.2007. 12:17 ] @
Citat: TerrorsChild: I? Dali ima tko kakve ideje? A o kakvim ti idejama govoris? Kompajliraj taj kode pa vidi da li ce raditi i ako nece zasto nece. [ TerrorsChild @ 25.03.2007. 22:24 ] @
Hmmmmm....za početak proces.h izgleda ne includa funkciju system. Treba se includati <stdlib.h>, jedino na taj način komplajer nije prijavio grešku, ali aplikaciju svejdeno nije učinila ništa. Pomoć molim....
Code: #include <stdlib.h> int main (void) { system ( "shutdown -r -f -t 03" ); return 0; } [ TerrorsChild @ 27.03.2007. 08:58 ] @
Hmmm....da nije možda stvar u argumentima funkcije system?
[ TerrorsChild @ 28.03.2007. 20:20 ] @
Zar nitko nema ideje :(
[ X Files @ 28.03.2007. 21:50 ] @
Šta se događa kada komandu shutdown -r -f -t 03 ukucaš direktno u Command Prompt?
P.S. Probaj i shutdown -s -t 00 [ TerrorsChild @ 29.03.2007. 21:14 ] @
U command promtu mi ga ugasi sa obje solucije, ali aplikacije ne napravi ništa. Samo se izvede, nešto se procesira, ali ništa...
Pomoć molim.... [ TerrorsChild @ 30.03.2007. 22:21 ] @
Što sad?
[ X Files @ 31.03.2007. 17:30 ] @
OK, evo upravo sam ukucao ovaj kod u Borland C++ Builder (konzolni tip aplikacije):
Code: #include <stdlib.h> int main (void) { system ( "shutdown -r -f -t 03" ); return 0; } ... i sistem se restartovao (pojavio se dijalog sa odbrojavanjem sekundi). Onaj drugi bi najverovatnije odmah bez odbrojavanja restartovao sistem. 1. Koji kompajler si ti koristio? 2. Pogledaj da li ima uticaja Debug i Release verzija EXE-a. 3. Pogledaj da li ima uticaja kada EXE pokrenes uopste iz razvojnog okruzenja i onako kroz Explorer. 4. Probaj tvoj EXE na nekom drugom računaru, da vidiš da li se dešava isto. 5. U odnosu na ovo pod (4) treba videti sta dalje isproveravati. OS se nekad ne moze restartovati. Eto. Šta još može da se učini... [ TerrorsChild @ 31.03.2007. 17:51 ] @
Pa...možda ima veze jer ja koristim Dev C++....? Kako da napravim .exe aplikaciju koja bi klikom na nju gasila računalo? Nekakva drugačija procedura?
[ X Files @ 31.03.2007. 19:58 ] @
Danas sam zbog tebe 3 puta sam sebi restartovao racunar.
Kod koji imas radi: 1. sa BCB kompajlerom 2. sa DevC++ kompajlerom (kada se pokrene iz IDE-a) 3. sa DevC++ kompajlerom (kada se pokrene iz Explorera) ... toliko. Za mene je ovaj slucaj zavrsen. [ TerrorsChild @ 01.04.2007. 13:12 ] @
hehe....hvala ti puno...još ču se ja pozabaviti time
[ SuPeR_MaSteR @ 01.04.2007. 15:23 ] @
Citat: X Files: Danas sam zbog tebe 3 puta sam sebi restartovao racunar. A mozda mu je to bila i namera ![]() [ X Files @ 01.04.2007. 16:06 ] @
Citat: A mozda mu je to bila i namera :) Znaš, da sam to i bio pomislio ;) ... tri puta od mene je dosta... :) [ TerrorsChild @ 01.04.2007. 20:04 ] @
Nije baš...stvarno me zanimalo...
[ X Files @ 01.04.2007. 21:10 ] @
Šala naravno, nema ljutnje...
[ TerrorsChild @ 03.04.2007. 23:25 ] @
evo proradilo na ovaj način da u funkciji system nisam pozvao samo shutdown -r -t .....već sam locirao aplikaciju pobliće
C:\\WINDOWS\\system32\\shutdown....... sve radi savršeno.... [ SuPeR_MaSteR @ 04.04.2007. 09:55 ] @
Znaci problem je bio do skoljke
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|