2012-02-29 14 views
6

VS 2010ソリューションエクスプローラを介して別のフォルダにファイルをドラッグすると、誰かが警告を表示する拡張子を知っているのだろうかと思います。何度も私はファイル上にあり、コンピュータは1秒間遅れる可能性があります。突然ファイルが別のフォルダにあり、気付かないかもしれません。ドラッグファイル警告拡張VS 2010?

+0

shamp00の回答が正しいことを選択して、彼に賞金を授与できますか?そうでなければ、この質問は前に閉鎖され、彼は賞金賞を失うことになるでしょう。 – Will

+0

Hmmm。 Chobo2 - あなたは質問の基準の一部として「無料」を指定していませんでしたが、非自由回答が投稿された後に賞金を払って「無料」と言われたのでしょうか... ...あなたが賞金を獲得するかどうか、誰かが無料でエクステンションを見つけられるように、100ポストの報奨金を掲示します - これを閉じると新しい質問になります。 – perfectionist

+0

いいえ私は可能な答えが出される前に賞金を出しました(なぜ私は私の元の質問を決して編集しなかったのですか)。私は本当にこの拡張を見つけることを望んでいるので、私はこの質問を終わらせるつもりはない(それは無料である - 一つの特徴のためにVSCommandsを50ドル支払うつもりはないので、なぜ賞金をshamp00に報酬を与えなかったのか?私が求めている機能のほんの一部にちょうどいいです。) – chobo2

答えて

7

ソリューションエクスプローラで機能防ぐ偶発ドラッグ&ドロップを持ってVSCommands 2010呼ば利用できるVisual Studioの拡張機能があります。

enter image description here

編集 機能は無料ではありませんProのパッケージの一部です。

+0

無料ではありません。ショッピングの質問は吸う。 –

+0

@ハンスあなたは正しいです - 私は私の答えを更新しました。 – shamp00

0

無料のVisual Studioエクステンションはわかりませんが、Visual Studioグローバルにフックする方法を示すAddinのC#サンプルでは、​​ファイル名を変更するファイル名を変更します。&これはIVsTrackProjectDocumentsEvents2インターフェイスに基づいています。

ニーズに合わせて2つのOnQueryxxxメソッドを拡張する必要があります。

using System; 
using System.Diagnostics; 
using EnvDTE; 
using EnvDTE80; 
using Extensibility; 
using Microsoft.VisualStudio.Shell; 
using Microsoft.VisualStudio.Shell.Interop; 

namespace MyAddin1 
{ 
    public class Connect : IDTExtensibility2, IVsTrackProjectDocumentsEvents2 
    { 
     private uint _trackerCookie; 

     public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) 
     { 
      _applicationObject = (DTE2)application; 
      _addInInstance = (AddIn)addInInst; 

      // the Addin project needs assembly references to Microsoft.VisualStudio.Shell, Microsoft.VisualStudio.Shell.Interop && Microsoft.VisualStudio.OLE.Interop 
      // any version should do 
      ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
      IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 

      // ask VS to notify us of files & directories changes 
      tracker.AdviseTrackProjectDocumentsEvents(this, out _trackerCookie); 
     } 

     public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) 
     { 
      if (_trackerCookie != 0) 
      { 
       // we quit, tell VS not to notify us anymore 
       ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_applicationObject); 
       IVsTrackProjectDocuments2 tracker = (IVsTrackProjectDocuments2)sp.GetService(typeof(SVsTrackProjectDocuments)); 
       tracker.UnadviseTrackProjectDocumentsEvents(_trackerCookie); 
       _trackerCookie = 0; 
      } 
     } 

     public int OnQueryRenameFiles(IVsProject pProject, int cFiles, string[] rgszMkOldNames, string[] rgszMkNewNames, VSQUERYRENAMEFILEFLAGS[] rgFlags, VSQUERYRENAMEFILERESULTS[] pSummaryResult, VSQUERYRENAMEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRenameFiles pProject:" + pProject + " old[0]:" + rgszMkOldNames[0] + " new[0]:" + rgszMkNewNames[0]); 

      // TODO: implement this (I have assumed cFiles is 1 here) 
      if (!NotRenameOk(old[0], new[0]) 
      { 
       rgResults[0] = VSQUERYRENAMEFILERESULTS.VSQUERYRENAMEFILERESULTS_RenameNotOK; // nope, it's not ok 
      } 
      return 0; 
     } 

     public int OnQueryRemoveFiles(IVsProject pProject, int cFiles, string[] rgpszMkDocuments, VSQUERYREMOVEFILEFLAGS[] rgFlags, VSQUERYREMOVEFILERESULTS[] pSummaryResult, VSQUERYREMOVEFILERESULTS[] rgResults) 
     { 
      Trace.WriteLine("OnQueryRemoveFiles pProject:" + pProject + " file[0]:" + rgpszMkDocuments[0]); 

      // TODO: needs to be implemented, use rgResults to tell VS if it's ok or not 
      return 0; 
     } 

     // other IVsTrackProjectDocumentsEvents2 methods implementation omitted for brevity... 
+0

...完全に...このコードの使用を開始する方法を必ず確認してください。 vs2010のアドインをコーディングする方法に関連するサンプルプロジェクト/サンプル/リソースにリンクできますか? – perfectionist

+0

@perfectionist - Visual Studioを使用してこのようなアドインを作成できます。新規プロジェクト/その他のプロジェクトタイプ/拡張機能とVisual Studioアドインを選択して、コードをコピーして貼り付けます。しかし、手元に開発者がいなければ、OnQueryRename/Removeの動作を実装することはできません。 –

+0

これは実現可能かもしれません - あなたは確かに私に何かを与えました問題について、あなたはここで賞金を授与されます。 Huzzah。結果とともにこの質問に返信します。 – perfectionist

関連する問題