C# - Vypnutí PC pomocí časovače – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# - Vypnutí PC pomocí časovače – .NET – Fórum – Programujte.comC# - Vypnutí PC pomocí časovače – .NET – Fórum – Programujte.com

 

Hoffik0
Návštěvník
30. 4. 2010   #1
-
0
-

Zdravím. Snažím se konečně o prográmek, který by mi byl užitečný :-).

Uživatel by si měl zadat čas vypnutí pomocí numericUpDown -> nastavit sekundy, minuty a hodiny. Postup tohoto by se měl zobrazovat pomocí progressBaru a samotný vzrůstající čas (HH : MM : SS) pomocí labelu.

Jelikož je to moje první věc, pracující s progressBarem i s Timerem (a abych řekl pravdu, inspiroval jsem se všude možně..), výsledek vypadá "vtipně".
Práce je na tom (pro mě) hodně, proto bych potřeboval trošku nakopnout.

1) Rád bych zjistil, jestli je možné že mi bude to vypnutí fungovat (mám na mysli konkrétně ten jeden řádek s Process.Start..). Abych se tu nehnal za něčím a na konci zjistil, že to stejně musí vypadat úplně jinak.

2) Nějak bych potřeboval "propojit" ten progressBar s tím číselníkem. Doufal jsem, že to půjde pomocí určení progressBar.Maximum a přiřazením celkového počtu vteřin. Bohužel, tak jednoduché to tedy nebude..

No, dost už řečí. Tady přikládám, co jsem zatím spáchal:

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace CasovacPokus
{
public partial class Form1 : Form
{
int hodiny;
int minuty;
int sekundy;

public Form1()
{
InitializeComponent();
}

private void zacitClick(object sender, EventArgs e)
{
progressBar.Value = 0;
if (sekundyCiselnik.Value == 0 && minutyCiselnik.Value == 0 && hodinyCiselnik.Value == 0)
MessageBox.Show("Musíte zadat čas vypnutí!");
else progressBar.Maximum = (Convert.ToInt32(sekundyCiselnik.Value + minutyCiselnik.Value
* 60 + hodinyCiselnik.Value * 3600));
casovac.Start();
}

private void casovacTick(object sender, EventArgs e)
{
sekundy++;
if (sekundy == 60)
{
sekundy = 0;
minuty++;
}
if (minuty == 60)
{
minuty = 0;
hodiny++;
}
if (hodiny == 24)
hodiny = 0;

if (progressBar.Value == progressBar.Maximum)
{
casovac.Stop();
Process.Start("shutdown.exe", "-s -t 00");
}
popisek.Text = ("Čas odpočítávání - " +hodiny.ToString()+ " : " +minuty.ToString()+ " : " +sekundy.ToString());
}
}
}


Předem děkuji za rady, výtky, kopance.... :-)


Zdar




Nahlásit jako SPAM
IP: 83.208.228.–
"If you enter this world knowing you are loved and you leave this world knowing the same, then everything that happens in between can be dealt with." - Michael Jackson
liborb
~ Redaktor
+18
Guru
30. 4. 2010   #2
-
0
-

Je to v podstatě dobře. Jenom několik připomínek:

- časovač máš asi po vteřině, ale je zbytečné (a hlavně strašně nepřesné) počítat si čas sám. Při spuštění časovače si ulož čas a v časovači dělej rozdíl (TimeSpan) s aktuálním časem a porovnávej

- nikde nenastavuješ progressBar.Value, to za tebe nikdo neudělá :smile1: ... to budeš muset v reakci na časovač ... a zase nejlépe od rozdílu toho času

- ta podmínka (if (progressBar.Value == progressBar.Maximum) je sice dobře, ale lepší je to od toho času (to je spíš o vzhledu než o funkci)

- pokud chceš zjistit, jestli Process.Start(....) funguje, tak si to zkus, ne? Formulář, tlačítko .... a lup :smile1:

Nahlásit jako SPAM
IP: 85.207.166.–
velurex0
Stálý člen
30. 4. 2010   #3
-
0
-

Duplikuji co napsal liborb, jen si to dovolím trochu kodu na ukázku

V obsluze kliknutí

            zacatek = DateTime.UtcNow;

konec = zacatek + new TimeSpan(hodina, minuta, sekunda);
timer1.Start();


V obsluze timeru

            DateTime now = DateTime.UtcNow;

if (now >= konec)
{
timer1.Enabled = false;
// konec
}
else
{
progressBar1.Value = (int)((now - zacatek).Ticks * 100 / (konec - zacatek).Ticks);
}

Nahlásit jako SPAM
IP: 213.191.119.–
Mutagen0
Super člen
26. 5. 2010   #4
-
0
-

Chci se zeptat jak todle funguje ? Dekuji

          zacatek = DateTime.UtcNow;


konec = zacatek + new TimeSpan(hodina, minuta, sekunda);

timer1.Start();

Prootze nevim jak zacatek ma spojitost s koncem Dekuji ...

Nahlásit jako SPAM
IP: 82.202.104.–
Petrroll0
Stálý člen
26. 5. 2010   #5
-
0
-

Jestli to dobře chápu, tak se do "zacatek" uloží proměnná ukazující momentální čas. A do proměnné "konec" se uloží proměnná "zacatek" zvýšená o hodnotu za kterou se má PC vypnout. Pro lepší pochopení:
http://msdn.microsoft.com/en-us/library/system.timespan.aspx

Nahlásit jako SPAM
IP: 92.62.224.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Atmega32 casovace — založil jur3c

Vypnutí PC — založil p-motycak

Vypnuti — založil Jan Sedlák

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý