Windowsのプログラミングの質問です。


ログインしているユーザーが、マウスかキーボードの操作をしていることを知る方法はありますか?
(MSN Messengerの在席判断みたいなものに利用。一定時間内に操作されたか否かをフラグやカウンタで知る、あるいはマウスやキーボードの操作があったときにイベントを発生させて知る、など)
ただし、フック(SetWindowsHookEx)と、デバイスドライバのフィルタデバイス以外でお願いします。
COM+、API、.NETなどで出来るでしょうか?言語は何でもOKです。

宜しくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:2009/04/01 01:24:29
  • 終了:2009/04/02 23:08:31

ベストアンサー

id:ardarim No.1

ardarim回答回数892ベストアンサー獲得回数1422009/04/01 21:02:18

ポイント150pt

とりあえずネイティブWin32では。

GetLastInputInfo 関数

最後に発生した入力イベントの時刻を取得します。

BOOL GetLastInputInfo(
  PLASTINPUTINFO plii   // LASTINPUTINFO 構造体へのポインタ
);

パラメータ
plii 
最後の入力イベントの時刻が入る、LASTINPUTINFO 構造体へのポインタを指定します。 

戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。

解説
これは、入力のアイドル状態を検出する場合に使うことができます。

対応情報
Windows NT/2000:Windows 2000
Windows 95/98:対応していません
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用

.NETからもP/Invoke経由で呼べると思います。

id:HISI

どうも有り難うございます。

MSDNのヘルプにも

「これは、入力のアイドル状態を検出する場合に使うことができます。」

なんて、ばっちり書かれていますね。

これは希望の用途に使えそうです。

2009/04/02 23:05:14

その他の回答(1件)

id:ardarim No.1

ardarim回答回数892ベストアンサー獲得回数1422009/04/01 21:02:18ここでベストアンサー

ポイント150pt

とりあえずネイティブWin32では。

GetLastInputInfo 関数

最後に発生した入力イベントの時刻を取得します。

BOOL GetLastInputInfo(
  PLASTINPUTINFO plii   // LASTINPUTINFO 構造体へのポインタ
);

パラメータ
plii 
最後の入力イベントの時刻が入る、LASTINPUTINFO 構造体へのポインタを指定します。 

戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。

解説
これは、入力のアイドル状態を検出する場合に使うことができます。

対応情報
Windows NT/2000:Windows 2000
Windows 95/98:対応していません
ヘッダー:winuser.h 内で宣言
インポートライブラリ:user32.lib を使用

.NETからもP/Invoke経由で呼べると思います。

id:HISI

どうも有り難うございます。

MSDNのヘルプにも

「これは、入力のアイドル状態を検出する場合に使うことができます。」

なんて、ばっちり書かれていますね。

これは希望の用途に使えそうです。

2009/04/02 23:05:14
id:ohmix1 No.2

ohmix1回答回数235ベストアンサー獲得回数142009/04/01 23:58:15

ポイント10pt

過去に同様の質問をしたことがあります。

http://q.hatena.ne.jp/1096504507

上記のいくつかは.NETでもできますが、

このときは結局グローバルフックするDLLを作りました。

ちなみに、.NETでも例外的にグローバルフックできることもあるようですが。

http://hongliang.seesaa.net/article/7539988.html

以上

id:HISI

「過去に同様の質問をしたことがあります。」

そうなんですね・・・


質問に書きましたけれど

SetWindowsHookExは、使いたくないのです。

システムスレッドというのが、ハングしたときに不安定になるので。。

わざわざコメント欄を空けているのですから、なんでそっちに書いてくれなかったか・・・

2009/04/02 23:07:52
  • id:esecua
    キーロガーの事ですかね?
  • id:Reiaru
    キーロガーとは全く異なると思います。

    > MSN Messengerの在席判断みたいなもの

    ここが重要なのでしょう。
    あくまでもリアルタイム的にモニター上から各デスクの状況を監視できるような。

    設定した時間内に監視先がキーボードかマウスに触わらなければ「オフライン表示」となり、
    いずれかに触れば即座に「オンライン表示」となるようなイメージではないでしょうか。

    確かにそうしたソフトウェアは存在しますが、あくまでもサンプルソースを求めていらっしゃる様ですから、
    こちらでそれを見つけられない限りは回答する訳にもいきません。
    (そしてフックを用いずにその様な事を実現する手法を私は知りません)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません