Windows版KeePassでアカウント名などに"@"が含まれていると、つまりメールアドレスだったりすると、自動入力時に"@"でIMEがONにされ、以後全角になってしまいます。2.18以上で発生しているとか。
そもそもの発端は、SendInputでKEYEVENTF_UNICODEを指定すると、OSが気を利かせてIMEをONにすることのようです。未確認ですが内部でIMM経由だとか何とか(そのためIME依存?)。
KeePassのフォーラムでは当時、@に対してAlt+@が発行されるためにIMEがONになっているんだ、なんてことが書かれているのですが、全くそうは思えません。私の環境でAlt+@を押してもIMEはONになりませんが発生しています。
現実に最新2.23でも発生し続けていますし、Alt+@になっていたなら文字として"@"が入力されるはずがありません。
C#なのにKEYEVENTF_UNICODEなSendInputを使っている理由は、SendKeys.Sendが間違ったキーを発行する場合があるのを回避するためで、例えばキャレット(いわゆるべき乗記号"^")を送ろうとするとアンパサンド(アンド記号"&")になります。
言語或いはキーボード依存なのか、他にもあるのでしょう、きっと。それで8種類の文字を決め打ちでSendInput送りにしています。判別しているのはKeePass.Util.SendInputEx.OSSendKeysWindowsで、そこに2.18から"@"が追加されています。
簡単な回避法としてWshShellオブジェクトのSendKeysを使う手があるそうな。本気でやるにはVkKeyScanExとSendInputですが、元々KeePassはDirectInput対応などは考慮していないソフトですから、WshShellでいいのでしょう。
最近のコメント