人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

宜しくお願い致します。


●質問者: pkb_wn
●カテゴリ:コンピュータ
✍キーワード:.NET API MSN Messenger Windows イベント
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ardarim
●150ポイント ベストアンサー

とりあえずネイティブ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経由で呼べると思います。

◎質問者からの返答

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

MSDNのヘルプにも

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

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

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


2 ● ohmix1
●10ポイント

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

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

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

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

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

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

以上

◎質問者からの返答

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

そうなんですね・・・


質問に書きましたけれど

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ