どのアプリケーションがアクティブになっていてもキーボードからの入力を禁止するようなものを作りたいと思っているのですが、どうすればいいのかわかりません。
こちらの過去のTip集でA〜Zを無効というのを見つけていじってみたのですがkeyboardprocの第二引数?がわからなかったのでA〜Zと数字だけしか禁止できませんでした。
ほかのページで検索してみたところ仮想キー(ASCIIコード)を指定すると書いてあったのですがそれでもよくわかりませんでした。
もしよろしければフックの使い方、またはほかの方法を教えていただけないでしょうか?
特定の文字入力制限でなければ、FormのKeyPreviewプロパティーをFalseにするだけではダメですか
Editなど入力コントロールにフォーカスがある時に、無効にするには
OnKeyPressイベントにKey:=#0 と記入すれば、キー操作が無効になります。
回答ありがとうございます。
たしかにそうするとできるのですが、ほかのアプリケーション(メモ帳)などがアクティブになっているときは使えないですよね?
そういう場合にも使用したいんです。
仮想キーは、例えばVK_F1などの定数で表されています。
'A'は、VK_Aと同じですが、ファンクションキー1や、[半角/全角]キーは、文字コードを持ちません。
仮想キーを使えば、文字コードを持たないキーも、コードとして判別することができます。
googleなどで「仮想キー」と調べれば、いろいろ出てきます。
返信が遅くなってすみませんでした。
仮想キーについても調べたのですが、仮想キーコードでa〜zは65〜91ですよね。
でもTip集のやつは60〜99となってました。
この違いがわからなくて困っています。
たとえば、OnKeyDownなどのイベントでも仮想キーコードが使われます。
試しにaのキーを押して表示させてみてください。
どこで65〜91や、60〜99などを調べたかわかりませんが、それらを書いたのは人間であって神様ではありません。
間違いはどこにでもありますよ。
実際に実行して、出てきた値とちがえば、自分の手順が悪いか、その情報が間違っているかです。
ちなみに、簡単なサンプルを作って実行するとa〜zの仮想キーコードは「65〜90」です。91は左側のウィンドウズキー(VK_LWIN)ですね。
VK_Aは定義されていないようですが、VK_F1は定義されてますよ。この定数は調べましたか?
91っていうのはただの間違いです。普通は65〜90ですよね?
でも、こちらの過去のTip集で見つけたフックでは60〜99になってて
60の部分を61にするとaのフックが効きません。
ということは間違ってないと思うのですが・・・
A-Zと数字のフックはできているんですよね?
それで、他にどのキーを無効にしたいのですか?
その仮想キーを、Aキーなどと同じ処理させれば無効にできますよ。
それで、「仮想キーがわからない」ということでしたよね。
その答えで、「VK_F1などの定数があります」と言いました。
今の段階で答えは出ていると思いますが…。
それとも、65〜90という範囲の他に、VK_F1を加えたときに、F1キーが無効にならなかったのでしょうか。
それならロジックに問題があると思います。
そのあたりの処理を提示してもらえば、解決の糸口が見つかると思いますよ。
あっ、そういうことですか。
定数があるものは定数を使って指定すればいいんですね。
数値にこだわりすぎてたみたいです。
無事解決できました。
いろいろありがとうございました。
また何かありましたらよろしくお願いします。
ツイート | ![]() |