キー入力を無効にする方法
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
hiro
居住地: 三重
投稿数: 188
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
みなさん こんにちは
オペレーションによっては、処理中にキー操作を一切無効に
したいときがあると思いますが、何か方法があるのでしょうか?
例えば、バッチを実行するときに実行確認画面を出力して
終わったら終了確認メッセージを出力するような場合、
実行時に誤ってエンターキーを2度叩くと終了確認がキーバッファ
で一瞬で消えてしまいます。
みなさんはどうされていますか?
アドバイスよろしくお願いします。
オペレーションによっては、処理中にキー操作を一切無効に
したいときがあると思いますが、何か方法があるのでしょうか?
例えば、バッチを実行するときに実行確認画面を出力して
終わったら終了確認メッセージを出力するような場合、
実行時に誤ってエンターキーを2度叩くと終了確認がキーバッファ
で一瞬で消えてしまいます。
みなさんはどうされていますか?
アドバイスよろしくお願いします。
投票数:0
平均点:0.00
motohira
投稿数: 42
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
私も同じような問題で悩んでいます。
Cで「rewind」というキーバッファをクリアするためだけの外部プログラムを作成し、OSコマンドで呼び出しても駄目で、
今度はUDPのDLLを、同様の機能で作成し、UDPで呼び出しても駄目でした。Magic内で処理する必要があるみたいですね。
どなたかご教示を、私からもお願い申し上げますm(__)m
Cで「rewind」というキーバッファをクリアするためだけの外部プログラムを作成し、OSコマンドで呼び出しても駄目で、
今度はUDPのDLLを、同様の機能で作成し、UDPで呼び出しても駄目でした。Magic内で処理する必要があるみたいですね。
どなたかご教示を、私からもお願い申し上げますm(__)m
投票数:0
平均点:0.00
muka
居住地: 東京都練馬区
投稿数: 69
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
目的に合うかどうか分かりませんが、次のようなタスクを作成してテストしてみてはどうでしょうか?
1)オンラインタスクを作成
バッチではなくオンラインのタスクにします。
ダミーの項目を定義し、画面に配置します。
2)タイマーイベントを作成
イベントを定義し、1秒「00:00:01」を指定
「終了」もしくは「取消終了」等のイベントを実行するように定義します。
3)適当な箇所からコール
作成したタスクを適当な位置からコールします。
要は、起動したら1秒後に自動的に終了するタスクを作成するわけです。その間にキーバッファに溜まったものは消費されるという・・・。
もし、上記の方法でうまくいくようなら、最終的に、作成した画面を目立たないように修正します。
(タイトルバーなし、子ウインドウ、位置サイズ・・・等)
あまりスマートな方法ではないかもしれませんが・・・。w
1)オンラインタスクを作成
バッチではなくオンラインのタスクにします。
ダミーの項目を定義し、画面に配置します。
2)タイマーイベントを作成
イベントを定義し、1秒「00:00:01」を指定
「終了」もしくは「取消終了」等のイベントを実行するように定義します。
3)適当な箇所からコール
作成したタスクを適当な位置からコールします。
要は、起動したら1秒後に自動的に終了するタスクを作成するわけです。その間にキーバッファに溜まったものは消費されるという・・・。
もし、上記の方法でうまくいくようなら、最終的に、作成した画面を目立たないように修正します。
(タイトルバーなし、子ウインドウ、位置サイズ・・・等)
あまりスマートな方法ではないかもしれませんが・・・。w
投票数:1
平均点:10.00
motohira
投稿数: 42
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
mukaさん
ご教示ありがとうございました!
おっしゃる方法を試したところ、無事にキーバッファは
クリアされました。
ご教示ありがとうございました!
おっしゃる方法を試したところ、無事にキーバッファは
クリアされました。
投票数:0
平均点:0.00
hiro
居住地: 三重
投稿数: 188
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
こんにちは motohiraさん mukaさん
レスありがとうございます。
mukaさんの方法は隠しで画面を出しておいてそこで
キー入力を捕まえてやると言うことでしょうか?
VBで行う場合、user32にあるPeekMessageという
API関数を使うらしいです。
この関数を呼び出すとキーバッファに何があるかチェック
できる様で、この時読み出しと同時に消去する指定が
あるのでそれを使ってキーバッファをクリアするようです。
試しにやってみましたが、何の変化もありませんでした。
使い方が悪いのかも知れません
今のところあきらめています。
では..
補足で質問です。
MSG構造体とやらをMAGICから扱う場合は何か特別な
ことをしないとだめでしょうか?
構造体そのままパラメタの並びに設定しただけですが
この辺が間違っているかも知れません。
レスありがとうございます。
mukaさんの方法は隠しで画面を出しておいてそこで
キー入力を捕まえてやると言うことでしょうか?
VBで行う場合、user32にあるPeekMessageという
API関数を使うらしいです。
この関数を呼び出すとキーバッファに何があるかチェック
できる様で、この時読み出しと同時に消去する指定が
あるのでそれを使ってキーバッファをクリアするようです。
試しにやってみましたが、何の変化もありませんでした。
使い方が悪いのかも知れません
![](../../uploads/smil3dbd4d75edb5e.gif)
今のところあきらめています。
では..
補足で質問です。
MSG構造体とやらをMAGICから扱う場合は何か特別な
ことをしないとだめでしょうか?
構造体そのままパラメタの並びに設定しただけですが
この辺が間違っているかも知れません。
投票数:0
平均点:0.00
hiro
居住地: 三重
投稿数: 188
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
自己レスです。
再度いろいろ考えましたが、mukaさんの方法が一番スッキリと
いきました。
方法としては、mukaさんの言われたタスクを作っておいて
必要なプログラムからコールする様にしました。
コールは呼び出すプログラムの処理終了の直前にしてやれば
違和感無く終わります。
ダミーの画面は文字1桁の項目を1個作って縦横サイズを0に
します。
フォームの縦横サイズも0にしてやるとほとんど気が付きません。
アドバイスありがとうございました。
再度いろいろ考えましたが、mukaさんの方法が一番スッキリと
いきました。
方法としては、mukaさんの言われたタスクを作っておいて
必要なプログラムからコールする様にしました。
コールは呼び出すプログラムの処理終了の直前にしてやれば
違和感無く終わります。
ダミーの画面は文字1桁の項目を1個作って縦横サイズを0に
します。
フォームの縦横サイズも0にしてやるとほとんど気が付きません。
アドバイスありがとうございました。
投票数:0
平均点:0.00