2012-03-05 12 views
1

これまでに質問されていますが、私が見た方法では何をしたいのですか?現在、私はWindowsフォームを持っています.EXEを実行してフォーム自体を起動すると、Outlookからの電子メールを問題なくドロップできます。しかし、私が探しているのは、ユーザーがOutlookから直接.EXEファイルのアイコンにメッセージをドロップするときに、この機能を持つことです。ファイルをローカルに保存してアイコンにドロップすると、これをうまくやることができますが、Outlookからまっすぐに、私はそれを通る円が描かれます。この仕事をするためにアプリに設定する必要のあるプロパティはありますか?このコードを使用して、メッセージをフォームウィンドウにドロップして作業させました。Outlookのウィンドウから.NETのアプリケーション.EXEファイル(またはアイコン)へのドラッグアンドドロップ

http://www.codeproject.com/Articles/28209/Outlook-Drag-and-Drop-in-C

これは、アイコンの上に落下、私が書いたコードです。

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main(string[] args) 
    { 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     var form = new Form1(); 

     if (args.Length > 0) 
     { 
      form.ProcessCommandLine(args[0]); 
     } 

     Application.Run(form); 
    } 
} 

public void ProcessCommandLine(string commandLine) 
    { 
     lstFiles.Items.Clear(); 

     var fileAttributes = File.GetAttributes(commandLine); 
     if (fileAttributes.HasFlag(FileAttributes.Directory)) 
     { 
      ProcessDirectory(commandLine); 
     } 
     else 
     { 
      ProcessFile(commandLine); 
     } 
    } 

ご協力いただきありがとうございます。

+0

ドラッグをして上に落下:

http://www.howtogeek.com/howto/windows-vista/keep-your-vista-desktop-clean-with-the-magic-folder/

は、そしてここで、著者へのリンクです(多分彼はあなたがうまく頼めばソースコードを共有しましょう) exeは完全にエクスプローラ(またはあなたのexeを表示しているもの)によって制御されます。それはあなた自身のコードとは関係ありません。 – adelphus

+0

@adelphus ok、変更が必要な設定はありますか?私が言ったように、 "ファイル"のためにそれはうまく動作しますが、アイコンへの見通しからは、ダイスはありません。情報ありがとう –

+0

あなたは誤解しています。エクスプローラはファイルを操作するようにコード化されています。内部でエクスプローラがOutlookアイテムを処理する方法を知らないため、変更できる設定はありません。あなたには、アイテムはファイルのように見えるかもしれませんが、エクスプローラには全く違うものがあります。私はあなたの質問に対する解決策があるとは思わない。 – adelphus

答えて

3

Shell Drop Handlerを作成しようとしています。発見したように、.EXEファイルのデフォルトのドロップハンドラは、すべてのファイルを削除可能なアイテムとして受け入れ、ドロップされたファイルへのパスを使って自動的にアプリケーションを起動します。 Outlookから直接ドラッグされるメールやカレンダーオブジェクトなどのその他のアイテムは、Windowsエクスプローラで直接サポートされていません。 Windowsに含まれているドロップハンドラの1つの例は、ファイルをZIPファイルにドラッグすると、そのファイルをZIPアーカイブに自動的に追加します。

ドロップハンドラを作成したい場合は、ドロップされたアイテムがファイル(プログラムのアイコン、ショートカットなど)にドロップされたときにカスタムアクションを実行できます。これは簡単な作業ではなく、管理されたコード(C#またはVB)からシェル拡張を書き込むことは一般的に推奨されていません。 (参照:http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx

をあなたがドロップハンドラを作成したら、それは2段階のプロセスです:プログラムのインストール時に

  1. 、(例えば.myprogdroptargetなどユニークなファイル拡張子を持つデスクトップ上のファイルを作成します)。
  2. .myprogdroptargetのドロップハンドラを登録して、このアイコンがオブジェクトの「マジック」ドロップターゲットになるようにします。 Microsoft All-In-One code frameworkをチェックアウト、ATL/C++にドロップ・ハンドラを作成する方法についていくつかのサンプルコードについては

、特にクラスATLShellExtDragAndDropHandler.cpp

代替ソリューション:

は、Windowsのデスクトップガジェットを作成することを検討して同様の機能を実行します。あなたがC++を掘り起こす必要がないので、コーディングがより簡単になるはずです。アイテムをドロップターゲットとして受け入れるMagic Folderと呼ばれるVistaガジェットがありましたが、もはやWindowsギャラリーで見つけることはできません。ここではそれが働いたか説明の記事です:http://davecra.wordpress.com/

+0

2番目のソリューションで問題となるのは、ユーザーの90%がCitrixデスクトップのシンクライアントを使用していることだけです。ウィジェットがどのようにその設定で動作するかはわかりません。ありがとうございました。 –

+0

XenDesktopを使用して仮想Windowsデスクトップ全体を公開しているのですか、または個々のアプリケーションを公開していませんか?デスクトップ全体をパブリッシュする場合、ガジェットは引き続き実行可能なソリューションでなければなりません。別のアイデアがない場合は、単純な "ドロップトレイ" Windows Formsアプリケーションを記述することですが、プロポーザルガジェットに似た項目を受け入れます。 –

関連する問題