- PR -

C#でウィンドウメッセージをコントロールに送るには?

1
投稿者投稿内容
こま
会議室デビュー日: 2004/03/18
投稿数: 5
投稿日時: 2004-03-18 18:24
皆様こんにちは。

C#にて業務アプリの開発を行っています。
バーコードスキャナを使って画面内の特定のコントロールへフォーカスを
移動するというものを実現したいと思っております。

(実現したい内容)
バーコード識別文字列を用意("$BARCODE"など)
上記文字列の先頭$が入力されてから1秒以内に"$BARCODE"が入力されたら、
バーコードからの入力と判断して、その判断のための文字列"$BARCODE"は
破棄したい。
入力文字が別物だったり秒数がオーバーしたら、キーボードからの入力と判断し
$以降入力された文字を通常のキーボード入力と同じ動作をさせたい。

現在困っているのは、キーボードからの入力と判断した場合に、
それまでに、入力された文字を通常のキー入力文字として扱いたいという部分です。
C++のように現在フォーカスを持っているコントロールに
KEY_CHARのウィンドウメッセージを送って、あたかもキーボード入力が行われた
ようにしたいのですが、C#でウィンドウメッセージをコントロールに送信するやり方が
わかりません。

ご存知の方ご教授のほどよろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-18 18:45
TextBoxのHandleプロパティでウィンドウハンドルが取得できると思いますので、WIN32APIのSendMessage()でメッセージを送ってみるとか。

試していないので、実際できるかは判りません。
こま
会議室デビュー日: 2004/03/18
投稿数: 5
投稿日時: 2004-03-18 19:26
早速の回答ありがとうございます。
一郎さんの方法で出来ることが確認できました。

以下テストしたコード(抜粋)

[DllImport("user32.dll")]
extern static System.IntPtr SendMessage(
System.IntPtr hWnd, // 送信先ウィンドウのハンドル
System.UInt32 Msg, // メッセージ
System.IntPtr wParam, // メッセージの最初のパラメータ
System.IntPtr lParam // メッセージの 2 番目のパラメータ
);

private void button1_Click(object sender, System.EventArgs e)
{
SendMessage(textBox1.Handle, 0x0102, (IntPtr)0x34, (IntPtr)0x50001);
}

ありがとうございました。
よし
会議室デビュー日: 2004/02/19
投稿数: 1
投稿日時: 2004-03-18 21:13
別の方法として、試してませんがSystem.Windows.Forms.Sendkeysを使うってのはできないのかな〜
1

スキルアップ/キャリアアップ(JOB@IT)