プロンプトウィンドウでは、Ctrl+Vによる貼り付けの処理を、WM_CHARメッセージで文字コード (WPARAM)が&h16のときに行うようになっています。なぜこれでできるのか、さっぱり訳がわかりませんでした。山本さんに聞いてもそれを書いたのは昔のことで覚えていないと言われる始末です。
ところが、学校から借りていたC#によるプログラミングWindows上を読んでいると疑問が氷解しました。
.NET FrameworkにおいてWM_CHARに相当するのはControl.OnKeyPressメソッド、Control.KeyPressイベントですが、そこにCtrl+AからCtrl+Zの入力は0x0001から0x001Aの制御文字の入力になると書かれてあるのです。そう、プロンプトウィンドウが行っていたのはこれだったのです。ちなみに、コマンドプロンプトで^H (Ctrl+H)を打つとバックスペースになりますし、^Mで改行になりますね。コマンドプロンプトでCtrl+Vが貼り付けに使えないのも妙に納得しました。
となると、プロンプトウィンドウもCtrl+Vは貼り付けではなく、制御文字の入力になったほうがいいような気がしてきます。また1つ考えることが増えたのでした。
スポンサード リンク |
うーん、わりと常識に近いものだと思っていたのですが、イグトランスさんでもご存じでなかったのならこの認識を改めないといけないかもしれません。
僕はバックスペースを Ctrl+H で打ち込む癖があるので、よく置換ウィンドウがヒョコっと飛び出してきます (^^;
WM_CHARで制御文字がやってくることは知りませんでした。WindowsのGUI上でCtrlでの入力に対応するとしたらWM_KEYDOWNあたりで処理しないといけないのかと思っていましたよ。