Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - System.Environment.TickCount cosa restituisce?
Forum - C# / VB.NET - System.Environment.TickCount cosa restituisce? - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:11
Venerdì, 14/02/2020
E quindi ora che hai corretto il codice il tempo come va? Non hai detto nulla...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1314
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 22:31
Venerdì, 14/02/2020


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 9:36
Venerdì, 06/03/2020
Testo quotato

Postato originariamente da nessuno:

E quindi ora che hai corretto il codice il tempo come va? Non hai detto nulla...



Purtroppo no ottengo sempre valori non coerenti.. se ho acceso il notebook da 10 minuti mi restituisce che é acceso da 7 giorni!!
Proprio non riesco a capire.. ho provato tutte le soluzioni suggerite ma il risultato non cambia...
scusate il ritardo con cui rispondo ma ero fuori...
Grazie a tutti8-|

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 9:40
Venerdì, 06/03/2020
Testo quotato

Postato originariamente da Carlo:

vedi se ti funziona questo esempio:
http://www.pierotofy.it/pages/sorgenti/dettagli/19553-Il_t ...


Grazie ma é proprio da questo che sono partito per trovare una soluzione ... ma come già detto tutte le soluzioni suggerite mi danno lo stesso risultato. Devo cominciare a credere a chi in un altro forum mi ha detto che non è colpa delle mie routine ma per come Windows 10 gestisce i dati di accensione spegnimento e aggiornamento..!! Tant'é...8-|

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1314
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:40
Venerdì, 06/03/2020
Si, Win10 gestisce la sospensione e l'ibernazione del PC, tali modalità non sono dei veri spegnimenti, per questo trovi tempi più lunghi di quello che ti aspetti, in Win10, un sistema per sapere da quanto tempo è partito il S.O, che è quello che cerchi tu, è andare a cercare nel log degli eventi del system di windows, data e ora di avvio kernel, che in VB.NET si fa così:
Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.  
  3.     Dim RiTeBo As New RichTextBox
  4.     Dim Button1 As New Button
  5.     Dim Button2 As New Button
  6.     Dim Label1 As New Label
  7.     Dim Eventi As New List(Of String)
  8.     Dim Timer1 As Timer
  9.     Dim OraACCENSIONE As Date
  10.  
  11.     Private Sub Button1_Click(sender As Object, e As EventArgs)
  12.         Dim EventoLogApp As New System.Diagnostics.EventLog("System") ' applicazione di diagnostica
  13.         Eventi.Clear()
  14.         RiTeBo.Clear()
  15.         RiTeBo.Refresh()
  16.         ' ricerca dall'inizio, ID 12 = avvio, ID 13 = arresto
  17.         For i = 1 To EventoLogApp.Entries.Count - 1
  18.             If i Mod 50 = 0 Then Label1.Text = i : Label1.Refresh()
  19.             If EventoLogApp.Entries(i).InstanceId.ToString = 12 Then
  20.                 Eventi.Add("------ ACCENSIONE PC IN EVENTO N. " & i)
  21.                 Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
  22.                 Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
  23.                 Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
  24.                 Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
  25.                 Eventi.Add("")
  26.             End If
  27.             If EventoLogApp.Entries(i).InstanceId.ToString = 13 Then
  28.                 Eventi.Add("------ SPEGNIMENTO PC IN EVENTO N. " & i)
  29.                 Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
  30.                 Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
  31.                 Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
  32.                 Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
  33.                 Eventi.Add("")
  34.             End If
  35.         Next
  36.         RiTeBo.Lines = Eventi.ToArray
  37.     End Sub
  38.  
  39.     Private Sub Button2_Click(sender As Object, e As EventArgs)
  40.         Dim EventoLogApp As New System.Diagnostics.EventLog("System")
  41.         Eventi.Clear()
  42.         RiTeBo.Clear()
  43.         ' ricerca dalla fine, per trovare più velocemente l'ultimo avvio
  44.         For i = EventoLogApp.Entries.Count - 1 To 1 Step -1
  45.             Label1.Text = i
  46.             Label1.Refresh()
  47.             If EventoLogApp.Entries(i).InstanceId.ToString = 12 Then
  48.                 Eventi.Add("------ ULTIMA ACCENSIONE IN EVENTO N. " & i)
  49.                 Eventi.Add(EventoLogApp.Entries(i).TimeGenerated.ToString)
  50.                 OraACCENSIONE = EventoLogApp.Entries(i).TimeGenerated
  51.                 Eventi.Add(EventoLogApp.Entries(i).Source.ToString)
  52.                 Eventi.Add("ID: " & EventoLogApp.Entries(i).InstanceId.ToString)
  53.                 Eventi.Add("PC: " & EventoLogApp.Entries(i).MachineName.ToString)
  54.                 timer1.Enabled = True
  55.                 Exit For
  56.             End If
  57.         Next
  58.         RiTeBo.Lines = Eventi.ToArray
  59.     End Sub
  60.  
  61.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
  62.         ' preparazione del Form
  63.         Button1.Text = "CERCA tutti"
  64.         Button1.Location = New Point(10, 10)
  65.         AddHandler Button1.Click, AddressOf Button1_Click
  66.         Me.Controls.Add(Button1)
  67.         Button2.Text = "CERCA ultima accensione"
  68.         Button2.Location = New Point(90, 10)
  69.         Button2.Width = 150
  70.         AddHandler Button2.Click, AddressOf Button2_Click
  71.         Me.Controls.Add(Button2)
  72.         Label1.Location = New Point(240, 16)
  73.         Label1.AutoSize = True
  74.         Me.Controls.Add(Label1)
  75.         RiTeBo.Location = New Point(10, 50)
  76.         Me.Controls.Add(RiTeBo)
  77.         Me.Size = New Size(400, 500)
  78.         Me.Text = "EVENTI ON/OFF - C.B."
  79.         timer1 = New Timer
  80.         AddHandler timer1.Tick, AddressOf timer1_tick
  81.         timer1.Interval = 1000
  82.         timer1.Enabled = False
  83.     End Sub
  84.  
  85.     Private Sub Form1_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
  86.         RiTeBo.Size = New Size(Me.Width - 40, Me.Height - 100)
  87.     End Sub
  88.  
  89.     Private Sub timer1_tick(sender As Object, e As EventArgs)
  90.         Label1.Text = Now.Subtract(OraACCENSIONE).ToString("G")
  91.     End Sub
  92. End Class



Poi con l'ora di sistema fai il calcolo di quanto tempo è trascorso, come vedi nella sub timer1_tick. Da questo esempio prendi quello che ti serve, il codice aggiunge anche i componenti sul form, basta che incolli tutto in un nuovo progetto WinForm.
In system c'è tutto e di più, ho filtrato solo quello che è riferito all'avvio/arresto del kernel

Allegato anche il progetto completo.


Carlo ha allegato un file: LettoreEVENTI.zip (46422 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 06/03/2020 alle 17:10


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 18:09
Venerdì, 06/03/2020
Grazie Carlo.
Ho scaricato e provato il tuo progetto completo.
Premetto che ho spento il PC alle 16:30 di oggi 6-3-2020 e l'ho appena riacceso alle 18:00, scaricato il tuo progetto e provato per vedere l'ultima accensione ed ottengo questo risultato:

------ ULTIMA ACCENSIONE IN EVENTO N. 30902
29/02/2020 08:58:54
Microsoft-Windows-UserModePowerService
ID: 12
PC: ALNB02

come vedi già la data é errata e di conseguenza l'ora... sembrerebbe che faccia riferimento a quando é avvenuto l'ultimo aggiornamento .. ma non ne sono sicuro; certo non mi da la data di oggi e le ore 18:00 quando é stato accesso l'ultima volta...
Mi pare davvero un mistero... lascio a voi di risolvere questo strano mistero di windows 10...
Grazie per tutto e buon lavoro:nono:

PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 18:42
Venerdì, 06/03/2020
Ciao Carlo volevo aggiornare te e quanti sono interessati ... provando e riprovando ho scoperto andando anche ad analizzare
Visualizzatore Eventi in strumenti di amministrazione di windows..

nel tuo progetto solo in button2 ho cambiato If EventoLogApp.Entries(i).InstanceId.ToString = 1 Then ed ora ho questo risultato dopo aver rispento e riaccesso il pc (ho un hp elitebook ):

------ ULTIMA ACCENSIONE IN EVENTO N. 32068
06/03/2020 18:35:31
Microsoft-Windows-Power-Troubleshooter
ID: 1
PC: ALNB02


PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1314
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:51
Venerdì, 06/03/2020
Testo quotato

Postato originariamente da alip1:
------ ULTIMA ACCENSIONE IN EVENTO N. 30902
29/02/2020 08:58:54
Microsoft-Windows-UserModePowerService
ID: 12
PC: ALNB02


Come vedi dal messaggio Windows è in funzione dal 29 febbraio: Microsoft-Windows-UserModePowerService

La modifica che hai fatto leggendo l'ID 1, legge un'altro evento, che non so se si presenta sempre in tutte le macchine e con tutti i sitemi operativi, l'ho provato su due PC Win7 e Win10, e funzionano anche da me, se ti va bene ok, oppure puoi trovare anche altri eventi, se togli l'if li vedi tutti, come nel visualizzatore eventi e puoi selezionare quello che vuoi.
Per ogni evento puoi anche avere altre info per esempio se aggiungi la riga:  Eventi.Add(EventoLogApp.Entries(i).Message)
avrai l'info estesa dell'evento.
Il log degli eventi del system di windows, è zeppo di informazioni, e il tuo è particolarmente esteso più di 32000 voci, il mio ne ha meno di 4000.
Ti consiglio di andare su "opzioni risparmio energia" e scegliere in alto a sinistra la voce: "Specifica comportamento pulsanti di alimentazione" e "Specificare cosa avviene quando viene chiuso il coperchio"
Con il pulsante di alimentazione scegli "Arresta il sistema", gli altri scegli tu, sospensione e ibernazione non riavviano veramente windows.

Ultima modifica effettuata da Carlo il 06/03/2020 alle 20:36


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo