2012-04-13 11 views
0

キーボードのF8キーを押したときに選択したテキストをコピーするプログラム(C#)でSendKeysを使用しています。Windows XPでC#の奇妙な動作を送信する

Windows 7では正常に動作していますが、Windows XPでは以下の問題があります。

  1. は、ユーザーが選択した場合

  2. は、「ある」とF8は、テキストがコピーされません押した「これはテストです」以下の文章が書かれている、メモ帳に仮定します。その後

  3. ユーザは「この」は、次にコピーされたテキストは、ユーザが「テスト」を選択した場合、その後、コピーしたテキストのように「この」

あるその後

  • 「である」で選択した場合F8キーを押すと、現在選択されていないテキストがコピーされます。それはWindows XPでのみ起こっています。私はそれゆえF8のためのコードの最初の行を結合グローバルキーを使用しておりますのでここで

    はコード

    System.IntPtr test = GetForegroundWindow(); 
    System.Windows.Forms.SendKeys.Send("^(c)"); 
    string copiedText = Clipboard.GetText(); 
    

    である私に、現在アクティブなウィンドウを伝えます。その後、Ctrl + Cが送信され、次にテキストがクリップボードからコピーされます。

  • +1

    そして、あなたが投稿している大量のコードサンプルの一部あなたの疑問にお答えしますか? –

    +0

    コードを表示できますか? – Likurg

    +0

    @Damien_The_Unbeliever コードが追加されました – Ali

    答えて

    2

    私はSendWaitメソッドを使用するように切り替えることをお勧めしたい:

    使用SendWaitを処理するキーストロークメッセージのためのアクティブなアプリケーションと待ちにキーストロークのキーストロークまたはそれらの組み合わせを送信します。

    (強調追加)

    瞬間、あなたは、クリップボードの内容を読み取ろうとする前に、他のアプリケーションは、CTRL-Cを処理していることを保証なしで、競合状態を持っています。時には古いコンテンツを取得することは驚くことではありません。

    SendKeys程度挿入し、通常の注意点は、他のアプリケーションを自動化する代わりにautomation APIの使用を検討し、必要な場合を除き、すべてのクリップボードの上に踏みつけないようにする恐ろしい方法である)

    +0

    SendWait機能は利用できません。私はC#.Net 2.0でVisual Studio 2008を使用しています。 MSDNのドキュメントによると、それは.Net 2.0で利用可能です。私は何か間違っているのですか? – Ali

    +0

    'SendWait'はフレームワークのすべてのバージョンに存在しています(少なくとも1.1に戻っています)。だから、あなたは間違ったことをしていますが、私はあなたに何を伝えることはできません。あなたが 'SendWait'に' Send'を編集してコンパイルしたら、どんなエラーメッセージが出ますか? –

    +0

    私は間違いました。あなたは正しいと機能は利用可能です。そして、Windows XPでこの問題を修正しました。しかし、今私は別の問題を抱えています。それは、F8を何度も押してからプログラムがエラーを出してシャットダウンした場合です。 Windows XPでのみ発生します。とにかく私はそれについて何ができるかを見ていきます。 – Ali