2011-01-19 9 views
1

アクティブなアプリケーションの選択したテキストを、自分のアプリケーションからバックグラウンドでコピーします。私はSendKeys.SendWait()を使用します。しかし、私は時には問題があります。しばらくすると、私のアプリケーションは "CTRL"なしで "c"だけを送信します(少なくとも "c"はアクティブなアプリケーションになります)。SendKeys.SendWait( "^ c")問題

誰でも助けることができますか?アドバイスで

感謝....

+0

SendKeysのドキュメントをチェックして、別の方法でキーを送信するように.configファイルを変更する方法について説明します。 –

+0

が試しました。それは助けなかった –

答えて

4

それが失敗のレシピですように私は、あなたがすべて一緒SendKeysをドロップ示唆しています。コピーしてからウィンドウをアクティブにしてからデータを貼り付けるまでには、あまりにも多くのイベントが発生する可能性があります。

あなたの仕事を達成するための最良の方法の1つは、SendMessage APIを使用することです。これをプロジェクトに組み込むことができます。

アプリケーションをアクティブにしてSendKeys経由で送信する代わりに、基本的に外部アプリケーションのテキストボックスのハンドルをフックし、貼り付けたい文字列と同じターゲットを設定できます。これにより、アプリケーションに送信しようとしているデータが、操作中にポップアップまたはフォーカスされている他のウィンドウに関係なくそこに到達することが保証されます。

このチュートリアルでは、データの投稿に役立つクラスが既に用意されています。

c-win32-messaging-with-sendmessage-and-wm_copydata

+0

しかし、私は外部のアプリケーションから選択されたテキストを取得したい。私はテキストを貼り付ける必要はありません。 –

+0

@Glum - これは一般的な方法です。必要なメッセージを送信できます。テキストがエディットコントロール内にある場合は、[Edit Control(MSDN)](http://msdn.microsoft.com/en-us/library/bb775458.aspx#messages)を参照して、特にメッセージの一覧を確認してください'EM_GETLINE'、' EM_GETSEL'です。 – Justin

+0

これは、すべてのアプリケーション(たとえばAcrobat Reader)では動作しませんが、私のアプローチは、Ctrl + Cキーストロークをサポートするすべてのアプリケーションで動作します –

0

SendKeys.Send( "^ c" を)してみてください。 それは私のために働いています:)