Windows7を使っています.
自作のスクリーンセーバーを作ってみようと思ってます.
考え方も自己流で,( SetWindowPos等を用いて ) 最前面に最大化ウィンドウを出して動画的に描画します.
DirectX(DXライブラリ)を使って描画しています.
マウスやキーボードで入力が行われているときはウィンドウ自体を透明化( ShowWindow(SW_HIDE) ) して隠したいと思います.
ある程度の時間,何も入力が行われてなかったらスクリーンセーバー起動みたいにしたいと思っています.
マウス(ポインタ)の場所は連続的に観測(認識)できます.
問題はキーボード入力が認識できてません.
DirectXウィンドウがアクティブなときだけ(かな?),キー入力を認識するのですが,
そうじゃないときはキー入力を認識してくれません.
DXライブラリ関数のGetHitKeyStateAll()等や
WindowsAPIのGetKeyboardState()等では認識するときとしてないときがありました.
何かいい方法は無いでしょうか?
知恵を貸してくれましたら幸いです.
アクティブでは無いウィンドウにキーボード入力を認識させたい
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
そういったことの必要性のあるソフトを作ったことがないので可能かどうかわかりませんが
グローバルフック で実現できないでしょうか?
(なんか,dllを作んないとダメ,とか,セキュリティ的な文句を言われるかも?とか,面倒そうな雰囲気だった気もしますが)
グローバルフック で実現できないでしょうか?
(なんか,dllを作んないとダメ,とか,セキュリティ的な文句を言われるかも?とか,面倒そうな雰囲気だった気もしますが)
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
「等」に何が入るかわかりませんが、GetAsyncKeyState関数は使えませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
返信ありがとうございます.
そうすると常にアクティブウィンドウへのメッセージを見張る感じですかね.
認識するときとしないときがあって,とりあえずウィンドウがアクティブな時だけ反応してるのかなという印象を受けました.
もうちょっと頑張ってみます!
初めて聞く単語でしたが,調べてみたら確かにこれなら実現できるかも知れませんね.usao さんが書きました:そういったことの必要性のあるソフトを作ったことがないので可能かどうかわかりませんが
グローバルフック で実現できないでしょうか?
(なんか,dllを作んないとダメ,とか,セキュリティ的な文句を言われるかも?とか,面倒そうな雰囲気だった気もしますが)
そうすると常にアクティブウィンドウへのメッセージを見張る感じですかね.
使ってみてたんですが無理そうでした.GetKeyState()とGetAsyncKeyState()の違いをあまり理解しきれていないのですが,みけCAT さんが書きました:「等」に何が入るかわかりませんが、GetAsyncKeyState関数は使えませんか?
認識するときとしないときがあって,とりあえずウィンドウがアクティブな時だけ反応してるのかなという印象を受けました.
もうちょっと頑張ってみます!
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
GetAsyncKeyState関数で出来ました!
小文字の'a' ~ 'z'ではなく,キーボード入力は大文字のほうのASCIIだったのですね.
ありがとうございました!
小文字の'a' ~ 'z'ではなく,キーボード入力は大文字のほうのASCIIだったのですね.
ありがとうございました!
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
GetAsyncKeyState の引数は VK_なんたら という定数マクロを渡します。
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
error C2065: 'VK_A' : 定義されていない識別子です。naohiro19 さんが書きました:GetAsyncKeyState の引数は VK_なんたら という定数マクロを渡します。
#by VS Express 2012 for Windows Desktop
というコンパイルエラーが出るのですが。
0~9とA~Zが全部エラーになります。
Re: アクティブでは無いウィンドウにキーボード入力を認識させたい
in GetAsyncKeyState function (Windows)
Windows APIの動作に疑問を感じたなら,まずはMSDNを読むことをお薦めします。
---- Histroy ----
2013-06-01T20:47+09:00 最終行の文頭に「Windows APIの」を追加
MSDNを読めば分かりますが,全てにVK_から始まる定数が用意されているわけではありません。
Windows APIの動作に疑問を感じたなら,まずはMSDNを読むことをお薦めします。
---- Histroy ----
2013-06-01T20:47+09:00 最終行の文頭に「Windows APIの」を追加