私はC#Windowsフォームでスクリーンキーボードを作った。私はSendkeys.Send()
キーストロークを送信する機能を使用します。手紙以外のすべての手紙私はうまく動作します。私は、キーボードの上に手紙を押すと、Microsoft Wordが開いているとき、それは私がはCtrl +Altキー + を送信し、印刷ダイアログを開きます。メモ帳++でも同様です。しかし、メモ帳に入力しようとするとうまくいきます。SendKeysで文字 'i'を送信
私のコードでは、SendKeys.Send(value);
とキーを送ります。ここで、valueは押されたボタンのテキストです。私は次のコードでテキストを取得します:
string s = ((Button)sender).Text;
なぜそれが正しく動作しないのですか?
編集:私はちょうどボタンで新しいウィンドウフォームプロジェクトを作成し、全体のコードは以下のとおりです。まだ動かない。任意のアイデアをいただければ幸いです。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("i");
}
// Prevent form being focused
const int WS_EX_NOACTIVATE = 0x8000000;
protected override CreateParams CreateParams
{
get
{
CreateParams ret = base.CreateParams;
ret.ExStyle |= WS_EX_NOACTIVATE;
return ret;
}
}
}
オーバーライドされた関数は、フォームがフォーカスされないようにすることです。フォーカスがある他のアプリケーションにキーストロークを送ることができるように。
がそれであるX秒間ボタンを押すと、ウィンドウにキーを送信しますか? 'value'とは何ですか?これはキーワードではありませんか?あなたは '((MyClass)オブジェクトを使ってキャスティングするのではなく、'(オブジェクトをMyClass) 'を使ってキャスティングするのではなく、それを見つけるかもしれません。 objがMyClassでない場合は、クラスキャスト例外をスローするのではなく、2つ目はnullを返します。 – MoonKnight
本当に申し訳ありません。値sの代わりに文字列sになります。このようにしても結果は変わりません:Sendkeys.Send( "i"); –
デバッガを使って 's'の値がどのようになっているかチェックしましたか?これは、問題の絞り込みに役立ちます。 –