[ Marko Simulak @ 29.12.2012. 14:07 ] @
Cao :D, pokusavam da uradim neki programcic u C# za gasenje racunara, na osnovu podataka koje korisnik odabere.

Podaci su sledeci:
>> bira se datum, i tu proveravam da li je taj izabrani datum - danasnji datum, ako jeste, uradi to i to....
>> unosi se vreme, isti princip kao i za datum...

E sad, datum sam ok uradio, bar tako mislim, ali vreme ne znam kako, evo koda pa bi mi dobro dosla neka pomoc, sugestija:

Code:

 if (monthCalendar1.SelectionRange.Start.ToShortDateString() == DateTime.Now.ToShortDateString())    //ovako proveravam izabran datum
       .....

 if ((sati + ":" + minuti) == DateTime.Now.ToShortTimeString())      //vreme naravno nece ovako, "(sati + ":" + minuti)" je bezveze...Pomoc
      .....



Hvala :D
[ Marko Simulak @ 29.12.2012. 14:11 ] @
Uradio sam, tj potvridi mi da su isti ovako:

Code:

 if ((sati + ":" + minuti + " PM").ToString() == DateTime.Now.ToShortTimeString())
[ del-boy @ 29.12.2012. 22:52 ] @
Ovo neće raditi ako se program koristi prepodne. Ali bilo bi zanimljivo videti prijavu bug-a za ovaj kod ("Radi popodne, ali prepodne nešto neće" :) ).

Da bi ovo radilo pogledaj malo http://msdn.microsoft.com/en-u...ystem.datetime_properties.aspx pa uporedi promenljivu 'sati' sa DateTime.Now.Hour, minute sa minutima itd. Bolje nego da porediš stringove. Isto tako bi za datum mogao da uradiš. Takođe bi trebalo da osiguraš da porediš iste vremenske zone.
[ Marko Simulak @ 30.12.2012. 10:46 ] @
Da, skontao sam da ne radi prepodne, pa sam uradio ovako:

Code:

 string prepodne = (sati + ":" + minuti + " AM").ToString();              //za prepodne
 string poslepodne = (sati + ":" + minuti + " PM").ToString();           //za poslepodne
 string danas = DateTime.Now.ToShortTimeString();

 if (prepodne == danas || poslepodne == danas && (monthCalendar1.SelectionRange.Start.ToShortDateString() == DateTime.Now.ToShortDateString()))
     ...


Ali i dalje mi baguje, recimo ako su minute manje od 10, to se na racunaru oznacava kao 01,02....Tu nulu nece da mi ocita kako treba, pa izgleda da moram i nju u string da ukljucim (ako su minute < 10...)

Nesto "prljavo" deluje kod, mora to nekako drugacije..

Zanima me da li je moguce da mi korisnik izabere vreme, kao sto moze datum, nesto kao sat ili tako nesto, trazio sam al ne vidim tu opciju u toolbox-u.
[ Predrag Supurovic @ 30.12.2012. 11:18 ] @
Mislim da si ti to debelo omanuo. Umesto da se bakćeš sa stringovima, drži datum i vreme u datetime i onda to poredi ko čovek.
[ Marko Simulak @ 30.12.2012. 13:34 ] @
Pa da, pretpostavljam da ne ide ovako, ali u sustini radi nekako...

Pokusacu da napisem nesto bolje :D
[ dusans @ 30.12.2012. 14:03 ] @
Code:

if (new TimeSpan(sati, minuti, 0) == DateTime.Now.TimeOfDay) ...
[ Burgos @ 30.12.2012. 15:03 ] @
DateTime.Now.TimeOfDay uključuje i sekunde, pa je potrebno se to sredi.

Code:
if(DateTime.Now.TimeOfDay - new TimeSpan(sati, minuti, 0) < TimeSpan.FromSeconds(60))
            Console.WriteLine("ok");
[ Dejan Carić @ 30.12.2012. 15:54 ] @
Zar nije najlakše ovako ?
Code:
public bool IsCurrentTime(DateTime date)
{
    return date.ToString("yyyyMMddHHmm") == DateTime.Now.ToString("yyyyMMddHHmm");
}

Primena:

Code:
var shutdownTime = new DateTime(....); // pokupiš vrednosti sa svih kontrola
...
if (IsCurrentTime(shutdownTime))
{
    ... // kod za gašenje računara
}


[Ovu poruku je menjao Dejan Carić dana 30.12.2012. u 17:16 GMT+1]
[ Marko Simulak @ 30.12.2012. 19:00 ] @
Uf, ovako...poredio sam godinu, mesec, vreme => sve posebno...

Radi, rekao bih ok, s tim sto nije jos sve gotovo, ovo sam samo isprobavao.

Ostalo mi je jos da uradim da "program ceka", tj kada se unese npr: 19:54, a sada je 19:50...da saceka te 4 minute, i tek onda da uradio ono sto treba...Mislim to sa nekim timerom da uradim, ne znam jos, videcu...

Evo u sustini kako izgleda programcic.. User: Marko, Pass:1234

A da...program radi u backgroundu, videcete vec...



[Ovu poruku je menjao Marko Simulak dana 30.12.2012. u 20:30 GMT+1]
[ Marko Simulak @ 07.02.2013. 16:07 ] @
Pozdrav :D, potrebna mi je mala pomoc oko programa. Uradio sam ono staro, i radi sve ok, ali sad me muci nesto novo. Treba da imam 1 checkbox i ako je otkacen radi unetu vrednos SVAKI DAN, a ako ne, samo za danas. Ono sto treba da uradi jeste da ugasi racunar nakon odredjenog vremene, tj korisnik unese koliko vremena racunar moze da radi (npr. 2 sata), i kada isteknu ta 2 sata, program treba da ugasi komp. To nije problem, ali ukoliko korisnik koristi komp recimo 1h, i nakon toga ga ugasi pa nakon nekog vremena ponovo upali, program treba da NASTAVI sa odbrojavanjem, tj. da ugasi komp za 1h.

Pokusao sam da uradim kreiranjem registry kljuca, a vrednos kljuca predstavlja to uneto vreme. Onda idem kroz tajmer, i kada dodje do 0, gasi!

Ali...ne znam kako da se nakon ponovnog paljenja nastavi odbrojavanje preostalog vremena.

Malo je sve konfuzno, nadam se da cete razumeti ovo sto je napisano :D

Hvala.
[ Mihajlo Cvetanović @ 07.02.2013. 16:16 ] @
Na svakih 5 sekundi smanji vrednost u registru (ili gde god) za 5 sekundi. Kad program nastavi da radi imaće vrednost od koje treba da počne da smanjuje. Kad se vrednost smanji na 0 onda privedi posao kraju.
[ sallle @ 07.02.2013. 16:36 ] @
@marko
mislim da nisi dobro postavio problem.

Sa tvojom funkcionalnoscu (da gasis komp nakon 2h neprekidnog rada kompa) em pravis sebi komplikaciju, em bravis beskorisnu funkcionalnost.

Opcija da se ugasi komp za 2h, treba da gleda apsolutno vreme (ne samo vreme dok radi komp). Time se problem zapravo svodi da se postavi alarm za gasenje u trenutku : datetime.now+2h


Ako i dalje ostajes pri misljenju da treba da gledas samo vreme dok radi komp, onda treba da drzis neki fajl sa brojacem, i da na svaku sekundu inkrementiras/dekrementiras brojac u fajlu (u memoriji ne smes da drzis, jer ces izgubiti podatak ako se resetuje komp).

Najjednostavnije ti je da dignes timer koji ce da radi:

onEverySec(...){
bool ugasi = false;

// deo za gasenje posle nekog intervala
//dekrementiraj brojac u fajlu
// if (brojac<=0) delete(fajl), ugasi = true;

// deo za gasenje u nekom trenutku
// if (datetime.now ispunjava uslov za gasenje)
// ugasi = true;

// if(ugasi) execute("shutdown -h now")

}
}



[ Marko Simulak @ 07.02.2013. 17:23 ] @
DateTime.Now sam koristio za ovo prethodno...Nasao sam neko resenje, radi.

Trebalo bi da promenim izgled programa, ne dopada mi se ovako...ali cu nekom drugom prilikom da se igram s tim.

Evo kako to sve izgleda, ako neko uvidi nesto sto nije kako treba, sto bih mogao da popravim, neka kaze.

Hvala :D

A da... User: Marko Pass: 1234

[Ovu poruku je menjao Marko Simulak dana 07.02.2013. u 18:39 GMT+1]
[ Mihajlo Cvetanović @ 08.02.2013. 09:30 ] @
Neću da skidam i pokrećem exe, ali imam pitanje. Šta biva sa tajmerom ako korisnik ubije proces preko Task Managera?
[ Marko Simulak @ 08.02.2013. 12:17 ] @
Program se zatvori, tako da ni ne ugasi kad treba. Mada, ima dosta propusta, videcu da ga osiguram sto je moguce vise...Trenutno smisljam kako bih mogao da mu namestim, tj. popravim vizuelni izgled, i jos uvek nisam uradio da ako je checkbox otkacen da radi to svaki dan...
[ r3bl @ 05.04.2013. 00:16 ] @
I ja smatram da je jedini način da pišeš negdje vrijednosti i pri pokretanju da provjeriš odma tu vrijednost, ako se računar ugasio programski u fajlu je vrijednost 0, ako nije, vrijednost koju pišeš svakih 5 sekundi otvaraš automatski pri pokretanju i nastavljaš odbrojavanje, staviš program da se pokreće u startup programima sistema.

Ako je program stalno u pozadini i ako svakih par sekundi provjerava vrijednost iz nekog fajla, mogao bi da staviš još jedan red u taj fajl tako da ako je checkbox označen kad se pokrene danas program upiše se sutrašnji datum i vrijeme gašenja računara. Kada se program sutra pokrene, vrijednost se zamjenjuje danom poslije toga i tako. Praktički datum uvećavati za jedan više od trenutnog svaki put, pamtiti vrijeme kada treba da se ugasi i to je praktički to, onda samo izvršavati gašenje kada trenutna vrijednost bude jednaka vrijednosti u fajlu.

Valjda ćeš imati neke koristi od moje ideje.