デフォルトで押下をスキャンして制御できないキーはどうすれば・・・

[戻る]
A.Y. [E-Mail] 2004/07/08(木) 21:12:57
お世話になります。
SDI(VIEW)プログラムを作っていまして、PreTranslateMessage関数等で
ファンクションキー押下をスキャンして任意の処理をさせたいのですが
F10はデフォルトで?どうしてもフォーカスがウィンドウ上部のメニューの
方へ移るようになっていますし、HELPキーなどもスキャンが効きませんが
それらのキー押下も任意の処理へ制御できないものでしょうか?

瀬戸っぷ [E-Mail] 2004/07/09(金) 09:53:39
> F10はデフォルトで?どうしてもフォーカスがウィンドウ上部のメニューの
> 方へ移るようになっていますし、HELPキーなどもスキャンが効きませんが
> それらのキー押下も任意の処理へ制御できないものでしょうか?

VK_F10ならば…
WM_KEYDOWN/WM_KEYUPでなくWM_SYSKEYDOWN/WM_SYSKEYUPで飛んでくるかと。
HELPキーというのがなんなのか不明ですが…

Spy++使ってキーを押した時にどんなメッセージが飛んでくるか調べるのがよろしいかと。

A.Y. [E-Mail] 2004/07/09(金) 18:41:42
瀬戸っぷ様、ご教授ありがとうございます。
VK_F10の方、アドヴァイスどおりトライしてみます。

>HELPキーというのがなんなのか不明ですが

どうもすいませんでした。自分は未だにNECのPC-98を使っていまして(苦笑)
テンキーの最上段の[HOMECLR]キーの右、マイナス'-'キーの左に挟まれて
[HELP]キーというのがあるのですが、下脇にいちお"End"とも書かれていますし
たぶんAT互換機では[END]キーになるのだと思いますが、そのキーの押下も
WM_KEYDOWNでは反応してくれません。
そちらもWM_SYSKEYDOWNの方で制御できますでしょうか。

それと、Spy++とはなんでしょうか?今はピンときていません。^^;

シャノン 2004/07/09(金) 19:48:49
スタートメニューの中の、(VC++ 6.0 であれば)Visual C++ 6.0 ツール(でいいんで
したっけ?)の中にあるツールです。
Windows アプリが、ウィンドウ(厳密に言えばスレッドかな?)に送られたメッセージ
に反応して動いているというのはご存知だと思いますが、Spy++ とは、どのウィンドウ
にどんなメッセージが送られ、プログラムがそれにどう応答したかを調べることができ
るソフトのことです。

個人的には、Dependency Walker と並んで、VC++ の付属ツールの中での使用頻度の1、
2を争う必携ツールです。

A.Y. [E-Mail] 2004/07/09(金) 20:53:35
シャノン様、Spy++についてご返答ありがとうございました。
それほどポピュラーなツールを自分が知らなかったのが
ちょっとお恥ずかしい気もします。^^;
これから、そういうツール類もバリバリ使いこなしながら
作れるようになっていきたいです。

A.Y. [E-Mail] 2004/07/09(金) 22:46:17
[[解決]]
瀬戸っぷ様

VK_F10はご教授どおりWM_SYSKEYDOWNから検知できました。
PC-98キーボードの[HELP]キーはVK_ENDが正解でした。
これも元は、瀬戸っぷ様のご返答から気付けたことです。
ではVK_HELPがどのキーのことなのか?わからなくなりましたが
それは今どうでもよくなりました〜
この度はありがとうございました。

瀬戸っぷ [E-Mail] 2004/07/10(土) 01:21:03
とりあえず解決のようで。

> どうもすいませんでした。自分は未だにNECのPC-98を使っていまして(苦笑)

こちらのHELPキーの存在は知っていましたが…(7年前はユーザーでしたし)
ALTキーはGRAPHキーでしたかね。

VK_HELPは…謎です。
「HELP キー キーボード」でgoogle検索して、こんなのみつけはしましたが。
http://www.phoenix-c.or.jp/~olfa/software/41_keyboardmap.html
http://www.sixnine.net/keyboard/useless.html

Spy++はウィンドウに関していろいろ調べられます。
(親子・兄弟関係とか、表示されている座標とかメッセージの覗き見とか)

# 昔の友達が大戦略プレイしてて、突然「ヘルプ!ヘルプ!!」とか連呼しながら
# HELPキー(X1turboZ)を連打した時は爆笑したなぁ。

古いスレッドには追加発言できません。