• ベストアンサー

windowsの連続起動時間取得

Windowsの連続起動時間を表示するプログラムを作りたいのですがどのようにしたらいいでしょうか? Vistaはタスクマネージャーから、XPのProはコマンドから起動時間を見る事は出来ますが、あいにくHomeという事なので練習も兼ねて作ってみたいと思った次第です。 関数としては、timeGettime()の制度がいいみたいなのでこれを使おうと思うのですが、単位はミリ秒で取得すると書いてありました。 また、47.1日を過ぎると桁あふれで戻ってしまうと聞きました。 ネットでいろいろ調べたのですが、fpsの測定に利用されてるみたいでサンプルもありましたが、純粋に起動時間を表示するならどのようにしたらいいでしょうか? timeGettime()自体がWindowsが起動してからの時間をミリ秒で返すのは分かっていますが、47日を超える起動でも正常にカウントするようには出来ないものでしょうか? サンプル的なものを教えていただければ大変助かります。 初心者のレベルなので何卒よろしくお願いします。 ちなみに、VisualStudio2008のC言語を使用しています

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >47日を超える起動でも正常にカウントするようには出来ないものでしょうか?  ↑  Windows Vista から次の API が利用可能になりました。  GetTickCount64(http://msdn.microsoft.com/en-us/library/ms724411(VS.85).aspx) ・Windows Vista 以前では利用できませんので回答者No.1さんのアドバイスにある  QueryPerformanceCounter 関数を利用して下さい。こちらは 64 ビットの整数です。  よって 47 日以上でも正常に取得可能。 サンプル: LARGE_INTEGER i64Count; DWORD i32Count; // 起動経過時間(64Bit) QueryPerformanceCounter( &i64Count ); // 起動経過時間(32Bit) timeBeginPeriod(1); i32Count = timeGetTime(); timeEndPeriod(1); i64Count⇒64ビット整数(i64Count.QuadPartを参照) i32Count⇒32ビット整数 64ビット整数の共用体 (http://msdn.microsoft.com/en-us/library/aa383713(VS.85).aspx) typedef union _LARGE_INTEGER {  struct {   DWORD LowPart;  // 符号付きの32ビット整数(下位)   LONG HighPart;  // 符号付きの32ビット整数(上位)  };  struct {   DWORD LowPart;  // 符号付きの32ビット整数(下位)   LONG HighPart;  // 符号付きの32ビット整数(上位)  } u;  LONGLONG QuadPart;  // 符号付きの64ビット整数 } LARGE_INTEGER, *PLARGE_INTEGER;

googleoooo
質問者

お礼

回答ありがとうございます。 サンプルソースまでつけていただいて本当に感謝しております。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

QueryPerformanceCounterで取得するとか。 http://www.google.co.jp/search?hl=ja&q=QueryPerformanceCounter&lr=lang_ja NTイベントログから起動メッセージを検索して、そこから起動時間を計算する手も。 http://www.google.co.jp/search?hl=ja&q=eventlog+6009&lr=lang_ja

googleoooo
質問者

お礼

回答ありがとうございます。 >QueryPerformanceCounter ↑こんな関数が! ありがとうございます。 さっそくリンクから見に行かせてもらいます

すると、全ての回答が全文表示されます。

関連するQ&A