Mitenkäs VB:llä sais windowsin käynnissäoloajan esille?
Käynnissäoloaika millisekunteina selviää helposti WinApin GetTickCount-funktion avulla. Enemmän koodia tarvitaan sitten siihen, että millisekunnit muutetaan käyttäjälle järkevämpään muotoon. Tämä onnistuu, kun tiedetään että päivässä on 86400, tunnissa 3600 ja minuutissa 60 sekuntia.
Private Declare Function GetTickCount Lib "kernel32" () As Long Private Sub Form_Click() Dim koa As Long Dim paivat As Integer, tunnit As Integer Dim minuutit As Integer, sekunnit As Integer koa = GetTickCount koa = koa / 1000 paivat = koa \ 86400 koa = koa - paivat * 86400 tunnit = koa \ 3600 koa = koa - tunnit * 3600 minuutit = koa \ 60 koa = koa - minuutit * 60 sekunnit = koa MsgBox "Järjestelmä on ollut käynnissä " & _ paivat & " päivää, " & _ tunnit & " tuntia, " & _ minuutit & " minuuttia ja " & _ sekunnit & " sekuntia." End Sub
miten sa ton uptimen c++ssalla???
No Windows-ympäristössä tuo menee ihan samalla tavalla, tässä käännös C-kielelle.
#include <windows.h> int main(void) { long koa; int paivat, tunnit, minuutit, sekunnit; koa = GetTickCount(); koa = koa / 1000; paivat = koa / 86400; koa = koa - paivat * 86400; tunnit = koa / 3600; koa = koa - tunnit * 3600; minuutit = koa / 60; koa = koa - minuutit * 60; sekunnit = koa; printf("Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia", paivat, tunnit, minuutit, sekunnit); }
kiitti!
EDIT: miten sais ton tehtyä silleen se avais win-apilla messageboxin jonne se kirjottas ton litanian ja lopettais ohjelman saman tien. siis se vaan näyttäis ton ajan ja ohjelma sulkeutus ilman että aukeaa mitään ikkunaa
EDIT:EDIT: oon aika tumpelo näissä c++hommissa
Lisää ensinnäkin ohjelman alkuun merkkijonomuuttujan määrittely:
char tieto[100];
Ja sitten korvaa loppu tällä:
sprintf(tieto, "Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia.", paivat, tunnit, minuutit, sekunnit); MessageBox(0, tieto, "Tiedoksi", 0);
gitos!
Onkohan sellanen mahdollista, että kun WINDOWS sammuu niin se ohjelma tallentaa tiedot vasta sitte jonnekki? Eli jos ohjelman sammuttaa, mutta windows on vielä päällä niin se ei rekisteröi niitä tietoja.
mulla antaa tämän (kerkesin kokeilla vasta nyt): 19 uptimecomp.cpp
implicit declaration of function `int sprintf(...)'
Koodi:
#include <windows.h> char tieto[100]; int main(void) { long koa; int paivat, tunnit, minuutit, sekunnit; koa = GetTickCount(); koa = koa / 1000; paivat = koa / 86400; koa = koa - paivat * 86400; tunnit = koa / 3600; koa = koa - tunnit * 3600; minuutit = koa / 60; koa = koa - minuutit * 60; sekunnit = koa; sprintf(tieto, "Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia.", paivat, tunnit, minuutit, sekunnit); MessageBox(0, tieto, "Tiedoksi", 0); }
lainaus:
Käynnissäoloaika millisekunteina selviää helposti WinApin GetTickCount-funktion avulla. Enemmän koodia tarvitaan sitten siihen, että millisekunnit muutetaan käyttäjälle järkevämpään muotoon. Tämä onnistuu, kun tiedetään että päivässä on 86400, tunnissa 3600 ja minuutissa 60 sekuntia.
Private Declare Function GetTickCount Lib "kernel32" () As Long Private Sub Form_Click() Dim koa As Long Dim paivat As Integer, tunnit As Integer Dim minuutit As Integer, sekunnit As Integer koa = GetTickCount koa = koa / 1000 paivat = koa \ 86400 koa = koa - paivat * 86400 tunnit = koa \ 3600 koa = koa - tunnit * 3600 minuutit = koa \ 60 koa = koa - minuutit * 60 sekunnit = koa MsgBox "Järjestelmä on ollut käynnissä " & _ paivat & " päivää, " & _ tunnit & " tuntia, " & _ minuutit & " minuuttia ja " & _ sekunnit & " sekuntia." End Sub
Mikäs tuossa mättää, kun yritän tuota ajaa, niin antaa buffer overfloun (error 6)
rivi: koa = koa - tunnit * 3600
MSDN:n mukaan koitin muuttaa tuon toisen koa muuttujan clng(koa), mutta ei apua :(
Debugissa tulee jokaisen muuttujaan kyllä luku. Onkohan sen Longille liian suuri? koa = 78000
Ongelma ratkesi.
Koneessani oli joku häikkä ja kun se korjaantui, niin toimi ongelmitta, kuten myös tuo toisen viestini freediskspace hommakin.
Ei näyttänyt ratkeavankaan.
Jostain kumman syystä kun päiviä alkaa kerääntymään, tulee ohjelman käynnistyessä virheilmoitus:
Run-time error '6':
Overflow
Onko kenelläkään vinkkiä kuinka tuon voisi ohittaa?
Kannattaisi alustaa kaikki Long tyyppiseksi koska integer on vain 16000 ja risat pitkä.
jeps. luulin jo kokeilevani sitäkin, mutta nyt uudestaan kokeiltuani toimii longilla ilman virheilmoituksia.
Kiitokset avusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.