2

謎のクリップボードの問題:

一部のデータ (テキスト) をクリップボードにコピーすることが期待される外部アプリケーション (System.Diagnostics.Process オブジェクトとして) を起動する開発中のアプリケーションがあります。外部アプリが閉じると、クライアント アプリケーションはクリップボードからテキストを取得します。

問題は、外部アプリケーションがテキストをクリップボードにコピーしたら、メモ帳などに貼り付けることができますが、クライアント アプリがクリップボードから空の文字列を取得していることです。

外部アプリ コード:

    private void btn1_Click(object sender, EventArgs e)
    {
        //copy text pane to clipboard
        DataObject obj = new DataObject();
        obj.SetData(tbText.Text);
        System.Windows.Forms.Clipboard.SetDataObject(obj);
    }

クライアント アプリ コード:

        string returnedValues = string.Empty;

        System.Windows.Forms.IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
        if (data != null && data.GetDataPresent(System.Windows.Forms.DataFormats.Text) == true)
        {
            returnedValues = (string) data.GetData(System.Windows.Forms.DataFormats.Text, true));
        }

クリップボードにテキストがあり、他のアプリケーションに貼り付けることができますが、データ オブジェクトは常に null です。

クライアント アプリ コードの欠陥を教えてもらえますか? クリップボードにデータがあるにもかかわらず、「データ」が常に null になるのはなぜですか?

4

2 に答える 2

1

クリップボードにテキストとしてコピーされた文字列だけがある場合は、次のように取得する必要があります。

Clipboard.GetText()

他のタイプのオブジェクトを取得するには、GetData()を使用できます

于 2012-12-10T13:45:47.440 に答える
0

テキストについては、本当に と を使用する必要がSetText()ありGetText()ます。また、クリップボードの現在のコンテンツを上書きすることが、シナリオでユーザーが期待するものであることを確認してください。そうでない場合は、代わりにプロセス間通信を使用する必要があります。たとえば、2 つの C# プロセス間のプロセス間通信の最も簡単な方法は何ですか? を参照してください。

于 2012-12-10T13:58:57.337 に答える