アクティブでは無いウィンドウにキーボード入力を認識させたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
natsuno
記事: 7
登録日時: 6年前

アクティブでは無いウィンドウにキーボード入力を認識させたい

#1

投稿記事 by natsuno » 6年前

Windows7を使っています.
自作のスクリーンセーバーを作ってみようと思ってます.
考え方も自己流で,( SetWindowPos等を用いて ) 最前面に最大化ウィンドウを出して動画的に描画します.
DirectX(DXライブラリ)を使って描画しています.
マウスやキーボードで入力が行われているときはウィンドウ自体を透明化( ShowWindow(SW_HIDE) ) して隠したいと思います.
ある程度の時間,何も入力が行われてなかったらスクリーンセーバー起動みたいにしたいと思っています.

マウス(ポインタ)の場所は連続的に観測(認識)できます.

問題はキーボード入力が認識できてません.
DirectXウィンドウがアクティブなときだけ(かな?),キー入力を認識するのですが,
そうじゃないときはキー入力を認識してくれません.
DXライブラリ関数のGetHitKeyStateAll()等や
WindowsAPIのGetKeyboardState()等では認識するときとしてないときがありました.

何かいい方法は無いでしょうか?
知恵を貸してくれましたら幸いです.

アバター
usao
記事: 1564
登録日時: 6年前

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#2

投稿記事 by usao » 6年前

そういったことの必要性のあるソフトを作ったことがないので可能かどうかわかりませんが
グローバルフック で実現できないでしょうか?
(なんか,dllを作んないとダメ,とか,セキュリティ的な文句を言われるかも?とか,面倒そうな雰囲気だった気もしますが)

アバター
みけCAT
記事: 6226
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#3

投稿記事 by みけCAT » 6年前

「等」に何が入るかわかりませんが、GetAsyncKeyState関数は使えませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

natsuno
記事: 7
登録日時: 6年前

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#4

投稿記事 by natsuno » 6年前

返信ありがとうございます.
usao さんが書きました:そういったことの必要性のあるソフトを作ったことがないので可能かどうかわかりませんが
グローバルフック で実現できないでしょうか?
(なんか,dllを作んないとダメ,とか,セキュリティ的な文句を言われるかも?とか,面倒そうな雰囲気だった気もしますが)
初めて聞く単語でしたが,調べてみたら確かにこれなら実現できるかも知れませんね.
そうすると常にアクティブウィンドウへのメッセージを見張る感じですかね.
みけCAT さんが書きました:「等」に何が入るかわかりませんが、GetAsyncKeyState関数は使えませんか?
使ってみてたんですが無理そうでした.GetKeyState()とGetAsyncKeyState()の違いをあまり理解しきれていないのですが,
認識するときとしないときがあって,とりあえずウィンドウがアクティブな時だけ反応してるのかなという印象を受けました.

もうちょっと頑張ってみます!

natsuno
記事: 7
登録日時: 6年前

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#5

投稿記事 by natsuno » 6年前

GetAsyncKeyState関数で出来ました!
小文字の'a' ~ 'z'ではなく,キーボード入力は大文字のほうのASCIIだったのですね.
ありがとうございました!

naohiro19
記事: 256
登録日時: 9年前
住所: 愛知県

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#6

投稿記事 by naohiro19 » 6年前

GetAsyncKeyState の引数は VK_なんたら という定数マクロを渡します。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#7

投稿記事 by ISLe » 6年前

naohiro19 さんが書きました:GetAsyncKeyState の引数は VK_なんたら という定数マクロを渡します。
error C2065: 'VK_A' : 定義されていない識別子です。
#by VS Express 2012 for Windows Desktop
というコンパイルエラーが出るのですが。
0~9とA~Zが全部エラーになります。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: アクティブでは無いウィンドウにキーボード入力を認識させたい

#8

投稿記事 by YuO » 6年前

in GetAsyncKeyState function (Windows)
vKey [in]
Type: int

The virtual-key code. For more information, see Virtual Key Codes.
MSDNを読めば分かりますが,全てにVK_から始まる定数が用意されているわけではありません。
Windows APIの動作に疑問を感じたなら,まずはMSDNを読むことをお薦めします。

---- Histroy ----
2013-06-01T20:47+09:00 最終行の文頭に「Windows APIの」を追加

閉鎖

“C言語何でも質問掲示板” へ戻る