2009-05-28 10 views
3

クリップボードの内容を保持する方法はありますか?私は次のコードを試しましたが、うまくいきません。クリップボードの内容を保持する方法

Dim iData As IDataObject = Clipboard.GetDataObject() 
...(use clipboard) 
Clipboard.SetDataObject(iData) 

ありがとう。

答えて

3

クリップボードの内容を保存する最も簡単な方法は、クリップボードだけを残すことです。クリップボードは、アプリケーション用ではなく、ユーザ用の一時的な格納領域を意味します。そのため、あなたがしようとしていることは、クリップボードを壊すよりも優れた解決策です。

+3

ありがとうございますが、私の質問には答えられません。 –

+0

あなたがあなたの質問にそれをしたい理由を含めるなら、うれしいでしょう。次に、あなたが望むことをするソリューションを考案する方が簡単です。私はまだクリップボードを一時的に非常に愚かな考えをclobbering考える。 – Joey

+3

有効な理由はありません。 "プログラムは、ユーザーからの明示的な指示なしに、私たちのクリップボードからデータを取り出すべきではありません。" - Charles Petzold、Programming Windows 3.1、Microsoft Press、1992 –

0

OpenClipboardとCloseClipboardを使用できます。 MSDNによると、クリップボードを開くと、他のアプリケーションがデータを変更しないようになります。

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 
    public static extern bool OpenClipboard(IntPtr hWndNewOwner); 

    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] 
    public static extern bool CloseClipboard(); 
+1

ありがとうございましたが、私が望むのは、クリップボードの内容を保存し、クリップボードを使用してコピー/貼り付けを行い、元の内容を復元できることです。 –

+0

クリップボードを開いたままにすると、他のアプリケーションがクリップボードを開こうとしたときにクラッシュしたり、クリップボードを開けたり、正しく処理したりすることができません。 –

0

上記のコードはどのように機能しませんでしたか? C#で同等のコードを試すと、Clipboard.SetDataObject(iData)を呼び出す際に "CloseClipboardが失敗しました(HRESULTからの例外:0x800401D4(CLIPBRD_E_CANT_CLOSE))"例外が発生します。

ただし、次の回避策は私のために仕事をしていません:

// save 
Dictionary<String, Object> d = new Dictionary<String, Object>(); 
IDataObject ido = Clipboard.GetDataObject(); 
foreach (String s in ido.GetFormats(false)) 
    d.Add(s, ido.GetData(s)); 

// ... 

// restore 
var da = new DataObject(); 
foreach (String s in d.Keys) 
    da.SetData(s, d[s]); 
Clipboard.SetDataObject(da); 
+0

あなたの答えはThakです。試してみましたが、それはプレーンテキストのために機能します。残念ながら、クリップボードのテキストがMS Wordのものである場合、エラーが発生します。 –

0

私は文脈が重要であることに同意するものとします。私のケースでは、ダイナミックに書かれた書式設定された表紙文書を、動的に生成されたテキスト(MS Wordのすべて)の前面に貼り付けることにしました。ここで私が見つけた解決策(VSTOとC#を使用して):

   object start = 0; 
       Word.Range startRng = a_TreatedDocument.Range(ref start, ref start); 
       startRng.FormattedText = a_CoverPageDocument.Content.FormattedText; 

注:これはテーブルと書式付きテキストで動作します。

関連する問題