2011-01-21 12 views

答えて

2

特にWM_KEYDOWNとWM_KEYUPは、特に文字キーに対しては送信されません。アプリケーションのメッセージポンプは、それらのキーに対してWM_CHARを生成するTranslateMessageを呼び出します。通常はアプリケーションが文字入力を調べるのはWM_CHARです。

入力を挿入する正しい方法は、SendInput関数を使用することです。

ここはSendInput wrapperです。私はグーグルで見つけました。

+0

お返事ありがとうございます。私は[DllImport( "user32.dll")]でアプローチを見つけました。 public static extern void keybd_event(バイトbVk、バイトbScan、uint dwFlags、uint dwExtraInfo); –

2

SendMessageではなくPostMessageを使用する必要があります。あなたのpinvoke宣言も間違っています、戻り値と最後の2つの引数はintではなくIntPtrです。

究極の欠点は、修飾キーCtrl、Shift、Altの状態を制御できないことです。これは、ユーザーがこれらのキーの1つを押したかどうかによって、ランダムに失敗する。 SendInputが必要なので、SetForegroundWindow()でフォーカスを正しく取得する必要があります。 WinformsアプリケーションでSendKeysを使用します。

入力キーを挿入するには、SendMessage()を使用してWM_CHARを送信します。

+0

+1 SendKeys。もちろん、OPの以前の質問では、彼はSendKeysを使わないことを勧められましたが、代わりにSendMessageを使ってテキストをエディットボックスに直接ポストしました。おそらくWM_SETTEXTを使用しました。しかし、OPはこれを誤解しているようです...... –

+0

うん、良いアドバイスではない。その1つの適切な答えはWM_COPYです。 –

関連する問題