台灣最大程式設計社群網站
線上人數
1375
 
會員總數:238640
討論主題:185208
歡迎您免費加入會員
討論區列表 >> VB.NET >> 請問api之 GetTickCount 與 Environment.TickCount 之不同?
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問api之 GetTickCount 與 Environment.TickCount 之不同?
價值 : 500 QP  點閱數:10670 回應數:10

樓主

cch
初學者
90 209
2864 188
發送站內信

Environment.TickCount 為電腦啟動到現在時間,但有效期好像不到25天.
如果電腦三個月未關機,期間每個月才進入程式一次,有否辦法算出開機後到現在秒數.

本篇文章發表於2012-09-05 12:36
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

JoJo
檢舉此回應
Environment.TickCount is not enough
Determine the Time Since the Last Boot Up in Visual Basic
本篇文章回覆於2012-09-05 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

香帥
檢舉此回應
請參考http://www.cnblogs.com/jintianhu/archive/2010/09/01/1815031.html
詳述各計算時間的相關方法,不過大部分都會受到最大位元數的限制,例如API中的GetTickCount 連續開機49天以後取得返回值會歸0
Environment.TickCount 也一樣受到最大位元數的限制
本篇文章回覆於2012-09-07 22:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

香帥
檢舉此回應
補充
如果電腦三個月未關機,期間每個月才進入程式一次,有否辦法算出開機後到現在秒數.
那要自己做一個在未歸0前的暫存或調整超長整數來計時
本篇文章回覆於2012-09-07 22:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

ku3
捐贈 VP 給 ku3 檢舉此回應


 用系統時間配合 LastBootTime 就可以了呀。
本篇文章回覆於2012-09-07 23:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

ku3
捐贈 VP 給 ku3 檢舉此回應

長得大致像這樣:


本篇文章回覆於2012-09-08 00:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

cch
檢舉此回應
非常謝謝各位前輩指教.
看來GetTickCount 與 Environment.TickCount 都受到限制.
我主要是希望在取得電腦上次開機時間後,在執行程式(不一定何時執行,也許三天也許三十天)時不利用電腦現在時間而能算出已開機秒數.也就是我程式內的日期時間是以開機時間+已開機時間為主,不以使用者任意更改電腦時間後之時間為主.我原以為GetTickCount可以提供更好的參考價值.
經由各位前輩的指導,目前好像只能寫一條服務的常駐程式來溝通,不知還有無更好的方法.
本篇文章回覆於2012-09-08 08:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Pan01
檢舉此回應
To 樓主 ,
說實在的 由你的 文字 根本就 搞不清楚你要做甚麼事情 , 才需要 判斷 開機時間.

附上 說明實際上的需求 而非僅問某種解決方案的實現步驟 ,
有時候 你會得到更好的 解決方案.
本篇文章回覆於2012-09-09 21:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

cch
檢舉此回應
對不起!是我沒把用意說清楚.
其實有些系統功能為了作某些簡單控制,重要的是不讓使用者在進入程式部分功能時能隨便改電腦時間來能跳過這些管控,所以必須在程式內部算出真正時間.(排除將作業系統更改時間的權限關閉,另電腦時間也不時會跟主機同步),所以我的重點是求 開機時間+已開機時間,原以為GetTickCount為長整數,有效期遠比Environment.TickCount長,直接加上就可,但似乎不是這樣.
本篇文章回覆於2012-09-09 22:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

Alex_Lee
捐贈 VP 給 Alex_Lee 檢舉此回應
1. 參考 MSDN文件 Environment.TickCout屬性每隔 49.8 天會在負數的 Int32.MinValue 和 Int32.MaxValue 之間循環一次。
2. 不能直接讀取主機的時間?
本篇文章回覆於2012-09-10 01:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

Pan01
檢舉此回應
依 8f 的需求 ,
可用 檔案 或 Reister 儲存 讀取到的日期時間 與 TickCount值,
當然 存檔的內容必須進行編碼 , 讓 User 無法更改.

之後 的判斷 你 就可以 用 儲存的 日期時間 與 TickCount值,
比較 當前的日期時間與 當前 TickCount 值 ,
若誤差很大, 要嘛是 User 重開機, 或者是 User 修改電腦時間......

這一個應該是一個簡單的做法
本篇文章回覆於2012-09-10 09:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.