[.NET] SendKeys はキーボード配列に依存する
.NET Framework の SendKeys って使ったこと無いんですよ。 キーストロークを送るのって、 タイミング依存だし、 ユーザー操作によって失敗する (プログラムからフォーカス当てて、 キーストロークを送るまでの瞬間に、 フォアグラウンドを切り替えられてしまったら… f(^^; ) しで、 すごく使いにくい。 おまけに、 MSDN ライブラリには、 こんなこと書いてあるし。
.NET Framework クラス ライブラリ
SendKeys クラス
注意 :
国際対応のアプリケーションでは、 Send の使用は避けてください。 使用されるキーボードの種類が多岐にわたるため、 予期しない結果が発生する可能性があります。
で。 実際にはこんなことになる、 という例を MS Connect で初めて知りました。
MS Connect FeedbackID=521777
SendKeys でカレット (^) の送信ができないSendkeys.SendWait("{^}");
では「^」が送信されるはずだが、実際には「&」が送信される。
投稿者: Azulean、投稿日時: 2010/01/06 8:56
この不具合は英語キーボードでは起きません。日本語キーボード(109キーなど)では確実に起きます。
(他の言語のキーボードもレイアウトによっては発生する可能性があります)Shift + 6 は日本語109では & になり、英語キーボードでは ^ になるようです。
SendKeys クラスの keywords 配列では "^" に対して (int)(Keys.D6 | Keys.Shift) を割り当てており、キーボードレイアウトの影響を受けています。
なるほどねぇ。 「"^" のキーストロークを送れ!」 って命令に対して、 .NET Framework は英語キーボードで考えて Shift + 6 を送信する。 受信したウィンドウのメッセージループでは、 日本語キーボードだから Shift + 6 は "&" だと解釈する。 ってことね。
たしかに、 Win32 API の keybd_event() や SendInput() で使う Virtual-Key Codes には、 シフト押しながら打つ記号は定義されてないもんなぁ。
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント