回答:
IBMは、このキー「代替グラフィック」という名前と、それはのための代替ではないCTRL+ ALTけれども、CTRL+は、ALTの代替として実施されたALT GRWindowsのインチ これは、通常キーに期待されるものとは異なる入力を可能にするキー修飾子(CTRLやSHIFTなど)です。
キーボードと場所の設定に応じて、アルファベットキー(ほとんどの場合は母音)、および一部のキーに印刷される3番目の記号(たとえば、€(ALT GR+ 4)または英国のキーボードに表示される¦(ALT GR+ `)。一般に、ヨーロッパ大陸のキーボードには、それらの言語で使用されるさまざまなタイプの発音区別記号に対応する追加の記号が印刷された、より多くのキーがあります。
詳細については、AltGrキーを参照してください。
Alt
。ウィキペディアの記事にそれさえ言及されていないのは奇妙です。
Alt Gr
として実装されているが、+にマップされないことを指摘します。Ctrl
Alt
Ctrl
Alt
Alt Gr
一部のキーボードでは、いくつかの代替の組み合わせが可能です。一部のキーボードでは、セント記号またはユーロ記号を使用できます-ウィキペディアには、 Alt Grを使用した非常に包括的な組み合わせのリストがあります。
ただし、US / Windowsキーマップを使用すると、ほとんどの場合、何も実行されません。
Alt grは、ポーランド語などの一部の言語で必要です。
Alt Gr+ a=ą
Alt Gr+ s=ś
Alt Gr+ shift+ n=Ń
また、Ctrl + Alt + Delキーを押す必要があるアクセシビリティのニーズがあるユーザーにとっても便利です。片手で試してみてください。
AltGr
to Ctrl
+ Alt
変換(少なくともWindowsおよびLinux上)よりもはるかに低いレベルで処理されるため、まったく同じようには機能しません。(おそらくキーボードがCtrl
+ Alt
スキャンコードを送信する場合を除く。)
このように実装されていると確信しています。
KBDLLHOOKSTRUCTからvkCodeをテストして、取得内容を確認できます。
here、here、およびwww.pinvoke.net/default.aspx/Constants/WM.html からマップされた列挙型リスト
これと同等である必要があります:
using System.Windows.Forms;
isAltGr ? (Keys) (1 << 19) : Keys.None
private static Keys BuildKeyData(Keys virtualKeyCode) => virtualKeyCode | (IsDownControl ? Keys.Control : Keys.None) | (IsDownShift ? Keys.Shift : Keys.None) | (IsDownAlt ? Keys.Alt : Keys.None) | (IsAltGr ? (Keys) (1 << 19) : Keys.None);
private static bool IsDownControl => IsKeyPressed((ushort)VirtualKeys.LeftControl) || IsKeyPressed((ushort)VirtualKeys.RightControl);
private static bool IsDownShift => IsKeyPressed((ushort)VirtualKeys.LeftShift) || IsKeyPressed((ushort)VirtualKeys.RightShift);
private static bool IsDownAlt => IsKeyPressed((ushort)VirtualKeys.LeftMenu) || IsKeyPressed((ushort)VirtualKeys.RightMenu) || IsKeyPressed((ushort)VirtualKeys.Menu);
private static bool IsAltGr => IsDownControl && IsDownAlt;