none
SendKeysでキーを送信するとなぜかShiftキーが押されたことになってしまう RRS feed

  • 質問

  • .Net Framework 3.5のC#アプリケーションをWindows 7 Professional上で作成しています。プロジェクト内でSendKeys.Send()で、任意のキーを送信すると、Form.ProcessDialogKeyでまずKeys.Shiftが送られ、次にキーにKeys.ShiftがOR演算された値が送られてきます。つまり、どこかでShiftキーが押されたことになってしまっているわけですが、この原因や解決方法をご存じの方はおられませんでしょうか。

    テストプログラム:
    public partial class Form1 : Form
    {
    	public Form1()
    	{
    		InitializeComponent();
    	}
    
    	protected override void OnShown(EventArgs e)
    	{
    		SendKeys.Send("O");
    		base.OnShown(e);
    	}
    
    	protected override bool ProcessDialogKey(Keys keyData)
    	{
    		// O, Shift/Shift
    		System.Diagnostics.Debug.WriteLine(keyData.ToString() + "/" + Control.ModifierKeys.ToString());
    		return base.ProcessDialogKey(keyData);
    	}
    }
    2009年11月24日 11:14

回答

すべての返信

  • 大文字の「O」だからですかね。(要するに shift + o)。
    小文字の「o」なら望み通りになると思います。
    • 回答としてマーク Tank2005 2009年11月24日 11:46
    2009年11月24日 11:33
  • おっしゃるとおりにやってみたらうまくいきました。SendKeysの概念をいまいち理解していなかったようです。ありがとうございました。
    2009年11月24日 11:45