2016-08-02 10 views
-1

Clipboard.GetText()をコンソールアプリケーションで使用します。しかし、私は、エラーメッセージ "名前 'クリップボード'が現在のコンテンツに存在しない"を取得します。私はそれに関する他の質問を検索し、[STAThread]を追加しましたが、問題は解決されていません。クリップボードが現在のコンテンツに存在しません

namespace Get_Text_Console_App 
{ 

    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      if (Clipboard.ContainsText()) 
      { 
       string text = Clipboard.GetText(); 

      } 
     } 
    } 
} 

答えて

0

は、名前空間を参照するように追加します。

using System.Windows.Forms; 

は、私は前にこれを試してみました。しかし、コードにラインを追加する前に、ソリューションエクスプローラー - >追加 - >参照 - > System.Windows.Formsを右クリックする必要があったと思います。私はそれが今でも働いているのだろうかと思います:) ...最初はいつも辛いです。すべての小さなステップはゆっくりとsooooo行く。

+1

私たちの回答の間に1秒 - 非常に良い! –

1

このプロジェクトは、WinFormsのプロジェクトですか? MSDNから:

名前空間:これはないのSystem.Windows.Forms

場合は、System.Windows.Forms.dllを参照せず、そのクラスを使用することはできません。

0

System.Windows.dll(WPFバージョン)またはSystem.Windows.Forms.dll(winformsバージョン)への参照があり、usingステートメントで名前空間をインポートする必要があります。

1

PresentationCore.dllへの参照を追加し、using System.Windowsをファイルの先頭に配置する必要があります。他の回答のいくつかは、(あなたがリサイズを使用していないので、コンソールアプリケーションからそれをやって)ご使用のスペースに含めてあなたがフォームの名前空間への参照を持っていることを確認してください同じように

0

using System.Windows.Forms; 

次に、PresentationCore.dllが含まれている(Nick Bullの言葉通り)参照にも含めてください。

続いて最後のビット、私はコードの一部が100%に働くだろうとは思わない、それはあなたがSTAスレッドを必要とすることは事実だが、私がこれまでに作った最高の実行は次のとおりです。

static string GetClipText() { 
    string res = string.Empty; 
    Thread staThread = new Thread(x => { 
    try { 
     res = Clipboard.GetText(); 
    } 
    catch (Exception ex) { 
     res = ex.Message;    
    }}); 
    staThread.SetApartmentState(ApartmentState.STA); 
    staThread.Start(); 
    staThread.Join(); 
    return res; 
} 

次にコード内に新しいメソッドを呼び出します:

static void Main(string[] args) { 
    if (Clipboard.ContainsText()) { 
      string text = Clipboard.GetClipText(); 
    } 
} 
関連する問題