WindowsではユーザがしばらくPCを使用していな時に、スクリーンセーバーを起動させたり、自動デフラグを行わせたりしています。
このように、PCがアイドルの時に限って何らかの処理を行わせるようにしておくと、ユーザに負担を掛けることなく(処理が重くなることなく)タスクを実行できるので便利です。
このような処理を行うためには、ユーザが”何もしていない”時間を計測する必要なのですが、GetLastInputInfo()というWin32API関数を使用すると、この情報を取得可能です。
関数仕様は以下の形で、データの取得に成功すると戻り値に0以外の値が返ってきてくれます。
BOOL GetLastInputInfo( PLASTINPUTINFO plii ); |
引数で指定される構造体は以下の定義です。
typedef struct tagLASTINPUTINFO { UINT cbSize; // この構造体のサイズ DWORD dwTime; // 最後にユーザが操作してからの経過時間(tick count) } LASTINPUTINFO, *PLASTINPUTINFO; |
上記関数をC#から使いたい場合は以下のような感じで定義を行うとOKです。
using System.Runtime.InteropServices; [DllImport("User32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); internal struct LASTINPUTINFO { public uint cbSize; public uint dwTime; } |
構造体のcbSizeメンバは、以下のコードでセットします。
LASTINPUTINFO info = new LASTINPUTINFO(); info.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf( lastInPut ); |
今のご時勢は節電が意識されているので、ユーザが暫く使っていないと処理を中断させるようなアプリを作ってみるのも有りかも…
関連記事
コメントを残す