none
GetLastInputInfo と GetTickCount について (Win8.1 64bit) RRS feed

  • 问题

  • Windows 8.1 で動作する自作ソフトでGetLastInputInfo と GetTickCount を使用して
    無操作の時間を求める処理があります。
    1~2年程、問題なく動作していたのですが、最近になって上記2つの関数で取得した値が
     3251660133(約37日) 、 567334744(約6日) と、最後に操作した時間よりシステム起動からの時間が、
    小さくなる現象が確認されました。
    上記2つの想定外の値は、OSをシャットダウンしてソフトを再起動しても改善されず、
    シャットダウンメニューからの”再起動”を実施して値が改善されました。

    想定外の値が取得された方が、他にもいらっしゃれば、
    どの様な使用環境、使用方法で現象が発生したのかをご教示いただければと思います。

    補足
    環境は以下になります。
     Microsoft Windows8.1 64bit
     Visual Studio2010(C#)
     .NET Framework3.5

    2019年5月21日 3:44

全部回复

  • GetTickCountはドキュメントで説明されているように49.7日でループする値です。

    • OS起動日時をXとすると
    • GetLastInputInfoで得られた最後の操作日時はX+約37日
    • GetTickCountで得られた現在時刻はX+49.7日+約6日

    という値を示しており、無操作期間は約19日とかそういう状況だったりしますでしょうか?

    2019年5月21日 4:03
  • シャットダウンで「改善」されないというのは、Windows8から搭載された高速スタートアップの影響かと思います。高速スタートアップの場合、シャットダウンは実質ハイバネーションなので、GetTickCountの値はリセットされないようです。
    2019年5月21日 4:16
  • Hongliang様

    コメント返信ありがとうございました。

    現象の発生条件等がわかりませんので、

    電源オプションの高速スタートアップのチェックを外してみようかと考えております。

    2019年5月21日 10:35
  • 佐祐理 様

    コメント返信ありがとうございました。

    無操作時間は、3分間としています。1秒タイマを使用して、上記記載の2つの関数から値を取得し、3分間の差があれば無操作時間と判定する処理となっており、

    突然、キーボード、マウス操作を行っても、すぐに無操作時間経過と判定してしまう現象となり、関数の取得値lを調べたところ質問に記載の値とほぼ同様の値が

    1秒間隔で取得されておりこの様なことが起こるものかと質問させていただいた次第です。

    また、取得値がループしても、無操作時間を計測できる処理にはしているつもりです(ソフトは、50日以上動作させていることから)

    2019年5月21日 10:56
  • 失礼しました。

    念のための確認ですが、特にGetLastInputInfo側の戻り値は確認されていますでしょうか? nonzeroが得られた際の値でしょうか? C#とのことですので、Interop周りに誤りがある可能性も考えられるため、可能であればコード(定義及び呼び出し方法)を提示されることをお勧めします。

    2019年5月22日 7:12
  • 佐祐理 様

    コメント返信ありがとうございました。

    戻り値については、取得値の確認後、再起動してしまい現象が再現できなくなってしまったので未確認です。すみません。

    例えば、戻り値が異常だった場合、Tickカウンタのリセットなどは、可能なのでしょうか?

    Set 等で検索しましたが、それらしい関数が見当たりませんでしたの無理と想定しています。

    2019年5月22日 12:54