Sendkeys.send を使用してテキストを他のアプリケーションに送信する C# アプリケーションがあります。しばらくして Windows 7 で実行すると、Sendkeys が応答を停止し、テキストを送信しません。Windows XP では発生しません。ウイルス対策が疑われましたが、ウイルス対策なしで実行している場合にも発生します。それを引き起こす可能性のあるアイデアはありますか?ご協力ありがとうございました。
2 に答える
コンパイル対象の .NET Framework のバージョンは何ですか? 2.0 より前のバージョンをまだ使用している場合は、UAC の強化されたセキュリティ モデルの結果として、Windows 7 で互換性の問題が発生している可能性があります。
このSendKeys.Send
メソッドは、フレームワークのバージョン 3.0 で更新され、Windows Vista 以降で正しく動作するようになりました。ドキュメントを参照してください:
SendKeys クラスが .NET Framework 3.0 用に更新され、Windows Vista で実行されるアプリケーションで使用できるようになりました。Windows Vista の強化されたセキュリティ (ユーザー アカウント制御または UAC と呼ばれます) により、以前の実装が期待どおりに機能しなくなります。
アップグレードする必要があります。バージョン 3.5 は、Windows 7 に既に含まれています。
SendMessage
それ以外の場合、他のアプリケーションにデータを送信する必要がある場合は、Windows API によって公開されている関数を P/Invoking することがオプションです。C# でこれを呼び出す必要がある宣言については、pinvoke.netを確認してください。
メソッドのMSDNドキュメントにSendKeys.Send
は、(少なくとも私にとっては)かなり奇妙なコメントがあります。
注意
アプリケーションがさまざまなキーボードでの国際的な使用を目的としている場合、Sendを使用すると予測できない結果が生じる可能性があるため、避ける必要があります。
私はその声明の理由を理解していませんが、おそらくこれがあなたが経験する行動の(1つの)原因ですか?
同じMSDNページの一番下に、さらに次のように記載されています。
... SendKeysクラスは、一部の開発者が回避しなければならないタイミングの問題の影響を受けやすくなっています。更新された実装はまだタイミングの問題の影響を受けやすいですが、わずかに高速であり、回避策の変更が必要になる場合があります...
SendKey
それはあらゆる状況で避けるべき機能だと私には思えます。