2

特定の Windows マシンが現在人間によって使用されているかどうかをプログラムで確認する最も簡単な方法は何ですか?

インターネット接続がかなり限られているため、「ポライトネス モニター」を作成することを考えています。基本的には、現在誰がインターネットをアクティブに使用しているかをいつでも確認する方法です。これにより、誰かが大きなファイルをダウンロードする必要がある場合に、煩わしさを最小限に抑えることができます。他の人に (そして、これらの統計を履歴に保持して、アップリンクが遅延しすぎない時期を予測できるようにします)。私は、アクティビティを推測するために使用できる証拠の複数の情報源を収集しようとしています.

Windows ユーザーにとっては、入力中か、マウスを動かしているか、またはその他の同等のアクティビティの尺度を確認できると非常に便利です。System.Diagnostics.Processクラスを使用して、特定のプロセス (オンライン ゲームやその他の帯域幅を大量に消費するアプリ) が実行されているかどうか、およびそれらがいつ起動されたかを確認することを既に検討しました。一般的なユーザーランド プロセス (firefox、iTunes など) のいずれかが過去 30 分間に起動された場合、椅子に座って何かをしているミートバッグがあることは合理的な賭けだと思います。アクティビティを検出したら、サーバーに小さな HTTP POST リクエスト (「やあ、私は生きていて何かをしている!」というメッセージ) を送信し、Linux ボックスで実行されている Web アプリケーションが更新されて、ユーザーがアクティブであることを示します。

IM ステータスの使用を検討しましたが、IM クライアントごとに OS 統合のレベルが異なるようです。すべての善良な Web 2.0 市民と同様に、私ももちろん Twitter を使用しています。;)

免責事項: 私は Windows を避ける UNIX と Mac 派です。Mono で .NET をいじったことはありますが、Win32 API には触れたことがありません。穏やかな。

4

1 に答える 1

3

あなたは見たいかもしれませんGetLastInputInfo

このGetLastInputInfo関数は、最後の入力イベントの時刻を取得します。

これは、 interop経由で呼び出す Windows API 関数です。

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout( LayoutKind.Sequential )]
struct LASTINPUTINFO
{
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

    [MarshalAs(UnmanagedType.U4)]
    public int cbSize;    
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
}

編集:ええと、質問で使用している言語を指定しませんでした。参照したので、.Netベースであると想定しましたSystem.Diagonstics.Process

于 2009-12-21T04:40:54.250 に答える