2010-12-02 22 views
1

文字列値をサードパーティのアプリケーション(メモ帳など)に挿入しようとしています。以下は、「これはテストメッセージである」私はたとえばサンプルテキストメッセージを与えている私はキーボードイベントをシミュレートする

[DllImport("user32.dll")] 
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); 

public void sim_type(string txt) 
    { 

     const int KEYEVENTF_EXTENDEDKEY = 0x1; 
     const int KEYEVENTF_KEYUP = 0x2; 
     byte[] ASCIIValues = Encoding.ASCII.GetBytes(txt); 

     foreach (byte keyCode in ASCIIValues) 
     { 
      Console.WriteLine("Ascii Values = " + keyCode); 
      keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); 
      keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); 
     } 


    } 

を使用していたコードです。 私は適切なascii値を取得しています。 しかし、対応するサンプルメッセージのターゲットテキストボックスに、この出力が表示されています。

T89 9 1午後01時38 02/12/2010513:38 2010年2月12日-5175

これを解決するためにいくつかのいずれかの助けがでした。私はまた、コンソールに印刷ASCII値を入れてい

Messsage:これは、テストメッセージである

{
ASCII値= 84の

ASCII値= 104の
ASCII値= 105
アスキー値= 115
アスキー値= 32
アスキー値= 105
アスキーi値= 115の
ASCII値= 32の
ASCII値= 97の
ASCII値= 32の
ASCII値= 116の
ASCII値= 101の
ASCII値= 115の
ASCII値= 116の
ASCII値= 32の
ASCII値= 109の
ASCII値= 101の
ASCII値= 115の
ASCII値= 115
ASCII値= 97の
ASCII値= 103の
ASCII値= 101
}

誰かが 感謝を助けてください、 Nikil

+0

[SendKeys](http://msdn.microsoft.com/en-us/library/ms171548.aspx)でこれを行う方法の例を次に示します。 – detunized

答えて

0

keybd_eventの最初の引数は、仮想キーコード、ではありませんASCIIコード。 VKの中にはASCIIと同じものがあります(これが最初のtを取得する理由です)。しかし、これを行う方法ではありません。

目的を達成するための方法の1つは、SendInputメソッドを使用することです。このメソッドには、Unicode文字を渡すためのフィールドを持つKEYBDINPUTを渡すことができます(KEYEVENTF_UNICODEフラグを指定した場合)。

+0

ありがとうございました。あなたは私の間違いを特定するのを手伝ってくれました。 SendKeysは私が以前にやったより簡単な方法です。 – Nikil

1

keybd_eventは、SendInputによって置き換えられました。 Send Input APIの周りに素敵なC#Wrapperを提供するWindows Input Simulatorを見てみることをお勧めします。また、SendInput API(そして、次のバージョンのInput Simulatorのために働いていると思うもの)を使ってマウスの動きをシミュレートすることもできます。

私はこのライブラリをオートメーションプロジェクトに使用しましたが、かなりうまくいくようですが、いくつかの癖があります(IEのkeystoke HOME + SHIFT + ENDはすべてのテキストを期待通りに選択しません)。

+0

上記の問題は実際に私がhttp://inputsimulator.codeplex.com/workitem/13002にパッチを提出して解決しました。私はまだSendInputへのすばらしい管理されたインターフェイスを探している人にはこのライブラリを強く推奨します。 – aolszowka

関連する問題