Repository: tonyfederer/OutlookFileDrag Branch: master Commit: b9197a6baa5b Files: 22 Total size: 243.0 KB Directory structure: gitextract_r8lm3glj/ ├── .gitignore ├── LICENSE ├── License.rtf ├── OutlookFileDrag/ │ ├── App.config │ ├── DataObjectHelper.cs │ ├── DragDropHook.cs │ ├── FileUtility.cs │ ├── FormatEtcEnumerator.cs │ ├── NativeMethods.cs │ ├── OutlookDataObject.cs │ ├── OutlookDragSource.cs │ ├── OutlookFileDrag.csproj │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── ThisAddIn.Designer.cs │ ├── ThisAddIn.Designer.xml │ ├── ThisAddIn.cs │ └── packages.config ├── OutlookFileDrag.sln ├── OutlookFileDragSetup/ │ └── OutlookFileDragSetup.vdproj ├── OutlookFileDragSetup_x64/ │ └── OutlookFileDragSetup_x64.vdproj ├── Readme.md └── _config.yml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json project.fragment.lock.json artifacts/ **/Properties/launchSettings.json # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser ================================================ FILE: LICENSE ================================================ Copyright (c) 2018 Tony Federer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: OutlookFileDrag/App.config ================================================ 
================================================ FILE: OutlookFileDrag/DataObjectHelper.cs ================================================ using System; using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using log4net; namespace OutlookFileDrag { static class DataObjectHelper { private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); internal static int GetClipboardFormat(string name) { var format = System.Windows.Forms.DataFormats.GetFormat(name); if (format == null) return 0; else return format.Id; } internal static bool GetDataPresent(NativeMethods.IDataObject data, string formatName) { //Check if data is present log.DebugFormat("Get data present: {0}", formatName); FORMATETC format = new FORMATETC(); format.cfFormat = (short)GetClipboardFormat(formatName); format.dwAspect = DVASPECT.DVASPECT_CONTENT; format.lindex = -1; format.ptd = IntPtr.Zero; format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL; return data.QueryGetData(format) == NativeMethods.S_OK; } internal static void SetDropFiles(ref STGMEDIUM medium, string[] filenames) { //Create DROPFILES structure NativeMethods.DROPFILES dropFiles = new NativeMethods.DROPFILES(); dropFiles.pFiles = Marshal.SizeOf(dropFiles); dropFiles.fWide = true; //Unicode //Get null-separated list of filenames terminated with double null string filenameList = string.Join("\0", filenames) + "\0\0"; byte[] filenameBytes = System.Text.Encoding.Unicode.GetBytes(filenameList); //Allocate global memory and get pointer int dataLength = Marshal.SizeOf(dropFiles) + filenameBytes.Length; IntPtr ptrDropFiles = Marshal.AllocHGlobal(dataLength); //Copy DROPFILES structure to global memory. Marshal.StructureToPtr(dropFiles, ptrDropFiles, true); //Copy filenames to memory after DROPFILES structure IntPtr ptrFiles = IntPtr.Add(ptrDropFiles, Marshal.SizeOf(dropFiles)); Marshal.Copy(filenameBytes, 0, ptrFiles, filenameBytes.Length); //Load structure into medium medium.unionmember = ptrDropFiles; medium.tymed = TYMED.TYMED_HGLOBAL; medium.pUnkForRelease = IntPtr.Zero; //HGLOBAL to be released by caller } internal static string[] GetFilenames(NativeMethods.IDataObject data) { log.Debug("Getfilenames"); //Try Unicode first string[] filenames = GetFilenamesUnicode(data); //If Unicode returns null, try ANSI if (filenames == null) filenames = GetFilenamesAnsi(data); return filenames; } internal static string[] GetFilenamesAnsi(NativeMethods.IDataObject data) { log.Debug("Getting filenames (ANSI)"); IntPtr ptrFgd = IntPtr.Zero; STGMEDIUM medium = new STGMEDIUM(); try { //Define FileGroupDescriptor format FORMATETC format = new FORMATETC(); format.cfFormat = (short)GetClipboardFormat("FileGroupDescriptor"); format.dwAspect = DVASPECT.DVASPECT_CONTENT; format.lindex = -1; format.ptd = IntPtr.Zero; format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL; //Query if format exists in data if (data.QueryGetData(format) != NativeMethods.S_OK) { log.Debug("No filenames found"); return null; } //Get data into medium int retVal = data.GetData(format, out medium); if (retVal != NativeMethods.S_OK) throw new Exception(string.Format("Could not get FileGroupDescriptor format. Error returned: {0}", retVal)); //Read medium into byte array log.Debug("Reading structure into memory stream"); byte[] bytes; using (MemoryStream stream = new MemoryStream()) { DataObjectHelper.ReadMediumIntoStream(medium, stream); bytes = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(bytes, 0, bytes.Length); } //Copy byte array into unmanaged memory log.Debug("Copying structure into unmanaged memory"); ptrFgd = Marshal.AllocHGlobal(bytes.Length); Marshal.Copy(bytes, 0, ptrFgd, bytes.Length); //Marshal unmanaged memory to a FILEGROUPDESCRIPTORA struct log.Debug("Marshaling unmanaged memory into FILEGROUPDESCRIPTORA struct"); NativeMethods.FILEGROUPDESCRIPTORA fgd = (NativeMethods.FILEGROUPDESCRIPTORA)Marshal.PtrToStructure(ptrFgd, typeof(NativeMethods.FILEGROUPDESCRIPTORA)); log.Debug(string.Format("Files found: {0}", fgd.cItems)); //Create an array to store file names string[] filenames = new string[fgd.cItems]; //Get the pointer to the first file descriptor IntPtr fdPtr = IntPtr.Add(ptrFgd, sizeof(uint)); //Loop for the number of files acording to the file group descriptor for (int fdIndex = 0; fdIndex < fgd.cItems; fdIndex++) { log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames)); //Marshal pointer to a FILEDESCRIPTORA struct NativeMethods.FILEDESCRIPTORA fd = (NativeMethods.FILEDESCRIPTORA)Marshal.PtrToStructure(fdPtr, typeof(NativeMethods.FILEDESCRIPTORA)); //Get filename of file descriptor and put in array filenames[fdIndex] = fd.cFileName; //Move the file descriptor pointer to the next file descriptor fdPtr = IntPtr.Add(fdPtr, Marshal.SizeOf(fd)); } log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames)); return filenames; } finally { //Release all unmanaged objects Marshal.FreeHGlobal(ptrFgd); if (medium.pUnkForRelease == null) NativeMethods.ReleaseStgMedium(ref medium); } } internal static string[] GetFilenamesUnicode(NativeMethods.IDataObject data) { log.Debug("Getting filenames (Unicode)"); IntPtr ptrFgd = IntPtr.Zero; STGMEDIUM medium = new STGMEDIUM(); try { //Define FileGroupDescriptorW format FORMATETC format = new FORMATETC(); format.cfFormat = (short)GetClipboardFormat("FileGroupDescriptorW"); format.dwAspect = DVASPECT.DVASPECT_CONTENT; format.lindex = -1; format.ptd = IntPtr.Zero; format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL; //Query if format exists in data if (data.QueryGetData(format) != NativeMethods.S_OK) { log.Debug("No filenames found"); return null; } //Get data into medium int retVal = data.GetData(format, out medium); if (retVal != NativeMethods.S_OK) throw new Exception(string.Format("Could not get FileGroupDescriptorW format. Error returned: {0}", retVal)); //Read medium into byte array log.Debug("Reading structure into memory stream"); byte[] bytes; using (MemoryStream stream = new MemoryStream()) { DataObjectHelper.ReadMediumIntoStream(medium, stream); bytes = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(bytes, 0, bytes.Length); } //Copy byte array into unmanaged memory log.Debug("Copying structure into unmanaged memory"); ptrFgd = Marshal.AllocHGlobal(bytes.Length); Marshal.Copy(bytes, 0, ptrFgd, bytes.Length); //Marshal unmanaged memory to a FILEGROUPDESCRIPTORW struct log.Debug("Marshaling unmanaged memory into FILEGROUPDESCRIPTORW struct"); NativeMethods.FILEGROUPDESCRIPTORW fgd = (NativeMethods.FILEGROUPDESCRIPTORW)Marshal.PtrToStructure(ptrFgd, typeof(NativeMethods.FILEGROUPDESCRIPTORW)); log.Debug(string.Format("Files found: {0}", fgd.cItems)); //Create an array to store file names string[] filenames = new string[fgd.cItems]; //Get the pointer to the first file descriptor IntPtr ptrFd = IntPtr.Add(ptrFgd, sizeof(uint)); //Loop for the number of files acording to the file group descriptor for (int fdIndex = 0; fdIndex < fgd.cItems; fdIndex++) { log.DebugFormat("Getting filename {0}", fdIndex); //Marshal pointer to a FILEDESCRIPTORW struct NativeMethods.FILEDESCRIPTORW fd = (NativeMethods.FILEDESCRIPTORW)Marshal.PtrToStructure(ptrFd, typeof(NativeMethods.FILEDESCRIPTORW)); //Get filename of file descriptor and put in array filenames[fdIndex] = fd.cFileName; //Move the file descriptor pointer to the next file descriptor ptrFd = IntPtr.Add(ptrFd, Marshal.SizeOf(fd)); } log.DebugFormat("Filenames found: {0}", string.Join(", ", filenames)); return filenames; } finally { //Release all unmanaged objects Marshal.FreeHGlobal(ptrFgd); if (medium.pUnkForRelease == null) NativeMethods.ReleaseStgMedium(ref medium); } } internal static void ReadFileContents(NativeMethods.IDataObject data, int index, Stream stream) { STGMEDIUM medium = new STGMEDIUM(); try { //Define FileContents format FORMATETC format = new FORMATETC(); format.cfFormat = (short)GetClipboardFormat("FileContents"); format.dwAspect = DVASPECT.DVASPECT_CONTENT; format.lindex = index; format.ptd = IntPtr.Zero; format.tymed = TYMED.TYMED_ISTREAM | TYMED.TYMED_ISTORAGE | TYMED.TYMED_HGLOBAL; //Get data int retVal = data.GetData(format, out medium); if (retVal != NativeMethods.S_OK) throw new Exception(string.Format("Could not get FileContents format. Error returned: {0}", retVal)); //Read medium into stream ReadMediumIntoStream(medium, stream); } finally { //Release all unmanaged objects if (medium.pUnkForRelease == null) NativeMethods.ReleaseStgMedium(ref medium); } } internal static void ReadMediumIntoStream(STGMEDIUM medium, Stream stream) { switch (medium.tymed) { case TYMED.TYMED_ISTREAM: ReadIStreamIntoStream(medium.unionmember, stream); break; case TYMED.TYMED_ISTORAGE: ReadIStorageIntoStream(medium.unionmember, stream); break; case TYMED.TYMED_HGLOBAL: ReadHGlobalIntoStream(medium.unionmember, stream); break; default: throw new NotImplementedException(string.Format("Cannot read medium type {0}", medium.tymed)); } } private static void ReadIStorageIntoStream(IntPtr handle, Stream stream) { //To handle a IStorage it needs to be written into a second unmanaged memory mapped storage //and then the data can be read from memory into a managed byte and returned as a MemoryStream NativeMethods.ILockBytes iLockBytes = null; NativeMethods.IStorage iStorageNew = null; IntPtr ptrRead = IntPtr.Zero; try { //Marshal pointer to an IStorage object NativeMethods.IStorage iStorage = (NativeMethods.IStorage)Marshal.GetObjectForIUnknown(handle); //Create an ILockBytes object on a HGlobal, then create a IStorage object on top of the ILockBytes object iLockBytes = NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true); iStorageNew = NativeMethods.StgCreateDocfileOnILockBytes(iLockBytes, 0x00001012, 0); //Copy the IStorage object into the new IStorage object iStorage.CopyTo(0, null, IntPtr.Zero, iStorageNew); iLockBytes.Flush(); iStorageNew.Commit(0); //Get length of ILockBytes byte array System.Runtime.InteropServices.ComTypes.STATSTG stat = new System.Runtime.InteropServices.ComTypes.STATSTG(); iLockBytes.Stat(out stat, 1); long length = stat.cbSize; //Read bytes into stream ptrRead = Marshal.AllocCoTaskMem(sizeof(int)); byte[] buffer = new byte[4096]; //4 KB buffer int offset = 0; int bytesRead; while (true) { iLockBytes.ReadAt(offset, buffer, buffer.Length, ptrRead); bytesRead = Marshal.ReadInt32(ptrRead); if (bytesRead == 0) break; stream.Write(buffer, 0, bytesRead); offset += bytesRead; } } finally { //Release all unmanaged objects Marshal.FreeCoTaskMem(ptrRead); if (iStorageNew != null) Marshal.ReleaseComObject(iStorageNew); if (iLockBytes != null) Marshal.ReleaseComObject(iLockBytes); } } private static void ReadIStreamIntoStream(IntPtr handle, Stream stream) { IntPtr ptrRead = IntPtr.Zero; try { //Marshal pointer to an IStream object IStream iStream = (IStream)Marshal.GetObjectForIUnknown(handle); //Create pointer to integer that stores # of bytes read ptrRead = Marshal.AllocCoTaskMem(sizeof(int)); //Copy IStream into managed stream in chunks byte[] buffer = new byte[4096]; //4 KB buffer int bytesRead; while (true) { iStream.Read(buffer, buffer.Length, ptrRead); bytesRead = Marshal.ReadInt32(ptrRead); if (bytesRead == 0) break; else stream.Write(buffer, 0, bytesRead); } } finally { //Release all unmanaged objects Marshal.FreeCoTaskMem(ptrRead); } } private static void ReadHGlobalIntoStream(IntPtr handle, Stream stream) { //Lock HGlobal so it cannot be moved or discarded IntPtr source = NativeMethods.GlobalLock(handle); if (source == IntPtr.Zero) throw new Exception(string.Format("Unable to lock hglobal {0}", source.ToString())); try { //Get size of HGlobal int length = NativeMethods.GlobalSize(handle); //Copy HGlobal into managed stream in chunks byte[] buffer = new byte[4096]; //4 KB buffer int bytesToCopy; for(int offset = 0; offset < length; offset += buffer.Length) { //Copy buffer length or remaining length, whichever is smaller bytesToCopy = Math.Min(buffer.Length, length - offset); Marshal.Copy(source, buffer, 0, bytesToCopy); stream.Write(buffer, 0, bytesToCopy); } } finally { //Release all unmanaged objects NativeMethods.GlobalUnlock(handle); } } } } ================================================ FILE: OutlookFileDrag/DragDropHook.cs ================================================ using System; using EasyHook; using log4net; namespace OutlookFileDrag { class DragDropHook : IDisposable { private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private LocalHook hook; private bool disposed = false; private bool isHooked = false; public DragDropHook() { try { //Hook OLE drag and drop event log.Info("Creating hook for DoDragDrop method of ole32.dll"); hook = EasyHook.LocalHook.Create(EasyHook.LocalHook.GetProcAddress("ole32.dll", "DoDragDrop"), new NativeMethods.DragDropDelegate(DragDropHook.DoDragDropHook), null); } catch (Exception ex) { log.Error("Error creating hook", ex); throw; } } public bool IsHooked { get { return isHooked; } } public void Start() { try { if (isHooked) return; log.Info("Starting hook"); //Hook current (UI) thread hook.ThreadACL.SetInclusiveACL(new Int32[] { 0 }); isHooked = true; } catch (Exception ex) { log.Error("Error starting hook", ex); throw; } } public void Stop() { try { if (!isHooked) return; log.Info("Stopping hook"); //Stop hooking all threads hook.ThreadACL.SetInclusiveACL(new Int32[] { }); isHooked = false; log.Info("Stopped hook"); } catch (Exception ex) { log.Error("Error stopping hook", ex); throw; } } public static int DoDragDropHook(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect) { try { log.Info("Drag started"); if (!DataObjectHelper.GetDataPresent(pDataObj, "FileGroupDescriptorW") && !DataObjectHelper.GetDataPresent(pDataObj, "FileGroupDescriptor")) { log.Info("No virtual files found -- continuing original drag"); return NativeMethods.DoDragDrop(pDataObj, pDropSource, dwOKEffects, out pdwEffect); } //Start new drag log.Info("Virtual files found -- starting new drag adding CF_HDROP format"); log.InfoFormat("Files: {0}", string.Join(",", DataObjectHelper.GetFilenames(pDataObj))); OutlookDataObject newDataObj = new OutlookDataObject(pDataObj); int result = NativeMethods.DoDragDrop(newDataObj, pDropSource, dwOKEffects, out pdwEffect); //If files were dropped and drop effect was "move", then override to "copy" so original item is not deleted if (newDataObj.FilesDropped && pdwEffect == NativeMethods.DROPEFFECT_MOVE) pdwEffect = NativeMethods.DROPEFFECT_COPY; //Get result log.InfoFormat("DoDragDrop effect: {0} result: {1}", pdwEffect, result); return result; } catch (Exception ex) { log.Warn("Dragging error", ex); pdwEffect = NativeMethods.DROPEFFECT_NONE; return NativeMethods.DRAGDROP_S_CANCEL; } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { hook.Dispose(); } disposed = true; } } } ================================================ FILE: OutlookFileDrag/FileUtility.cs ================================================ using System; using System.IO; using log4net; namespace OutlookFileDrag { static class FileUtility { private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static string GetTempPath() { log.Debug("Getting temp path"); string path = Path.Combine(Path.GetTempPath(), "OutlookFileDrag", Guid.NewGuid().ToString()); if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path); log.DebugFormat("Temp path: {0}", path); return path; } public static void CleanupTempPath(int tempFileExpiration) { log.Debug("Cleaning up temp path"); string path = Path.Combine(Path.GetTempPath(), "OutlookFileDrag"); log.InfoFormat("Temp path: {0}", path); if (!System.IO.Directory.Exists(path)) { log.Info("Temp path does not exist"); return; } var dirInfo = new DirectoryInfo(path); foreach(DirectoryInfo subfolder in dirInfo.GetDirectories()) { //If folder was created before expiration window, delete it if (subfolder.CreationTime < DateTime.Now.AddMinutes(tempFileExpiration)) try { log.InfoFormat("Deleting temp folder: {0}", subfolder.FullName); subfolder.Delete(true); } catch { log.WarnFormat("Could not delete temp folder: {0}", subfolder.FullName); } } } public static string GetUniqueFilename(string filename) { string filenameNoExt; string ext; //If filename is too long, truncate filename if (filename.Length >= NativeMethods.MAX_PATH) { ext = Path.GetExtension(filename); filename = filename.Substring(0, NativeMethods.MAX_PATH - ext.Length - 1) + ext; } //If file does not exist, use original filename if (!File.Exists(filename)) return filename; //Try appending number to filename until unique filename is found filenameNoExt = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename)); ext = Path.GetExtension(filename); for (int index = 1; index < 1024; index++) { string newFilename = string.Format("{0} ({1}){2}", filenameNoExt, index, ext); //If new filename is too long, truncate new filename if (newFilename.Length > NativeMethods.MAX_PATH) { newFilename = string.Format("{0} ({1}){2}", filenameNoExt.Substring(0, NativeMethods.MAX_PATH - ext.Length - 8), index, ext); } if (!File.Exists(newFilename)) return newFilename; } //If no unique filename could be found, throw exception throw new Exception(string.Format("Could not generate unique filename for file {0}", filename)); } } } ================================================ FILE: OutlookFileDrag/FormatEtcEnumerator.cs ================================================ using System.Runtime.InteropServices.ComTypes; namespace OutlookFileDrag { class FormatEtcEnumerator : IEnumFORMATETC { private FORMATETC[] formats; private int index = 0; public FormatEtcEnumerator(FORMATETC[] formats) { this.formats = formats; } public void Clone(out IEnumFORMATETC newEnum) { //Create new enumerators newEnum = new FormatEtcEnumerator(formats); } public int Next(int celt, FORMATETC[] rgelt, int[] pceltFetched) { //Fetch number of requested formats int fetchCount = 0; for (int i = 0; i < celt; i++) { //If index is past end of formats, stop if (index > formats.Length - 1) break; //Set format rgelt[i] = formats[index]; fetchCount++; index++; } //Set number of formats fetched if (pceltFetched != null && pceltFetched.Length > 0) pceltFetched[0] = fetchCount; //Return S_OK if all requested formats were returned; otherwise, return S_FALSE return (fetchCount == celt ? NativeMethods.S_OK : NativeMethods.S_FALSE); } public int Reset() { //Set format index back to 0 index = 0; return NativeMethods.S_OK; } public int Skip(int celt) { //Check if incremented index is past end of formats if (index + celt > formats.Length - 1) return NativeMethods.S_FALSE; else { //Increment index and return index += celt; return NativeMethods.S_OK; } } } } ================================================ FILE: OutlookFileDrag/NativeMethods.cs ================================================ using System; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; namespace OutlookFileDrag { static class NativeMethods { public const int S_OK = 0; public const int S_FALSE = 1; public const short CF_TEXT = 1; public const short CF_UNICODETEXT = 13; public const short CF_HDROP = 15; public const int DATA_S_SAMEFORMATETC = 0x00040130; public const int DRAGDROP_S_DROP = 0x00040100; public const int DRAGDROP_S_CANCEL = 0x00040101; public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102; public const uint DROPEFFECT_NONE = 0; public const uint DROPEFFECT_COPY = 1; public const uint DROPEFFECT_MOVE = 2; public const uint DROPEFFECT_LINK = 4; public const uint DROPEFFECT_SCROLL = 0x80000000; public const int DV_E_LINDEX = unchecked((int)0x80040068); public const int DV_E_FORMATETC = unchecked((int)0x80040064); public const int DV_E_TYMED = unchecked((int)0x80040069); public const int DV_E_DVASPECT = unchecked((int)0x8004006B); public const int E_INVALIDARG = unchecked((int)0x80070057); public const int E_FAIL = unchecked((int)0x80004005); public const int E_NOTIMPL = unchecked((int)0x80004001); public const int E_OUTOFMEMORY = unchecked((int)0x8007000E); public const int E_UNSPEC = E_FAIL; public const int E_UNEXPECTED = unchecked((int)0x8000FFFF); public const int MAX_PATH = 260; [DllImport("ole32.dll")] public static extern int DoDragDrop(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr GlobalLock(IntPtr handle); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern bool GlobalUnlock(IntPtr handle); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern int GlobalSize(IntPtr handle); [DllImport("ole32.dll", PreserveSig = false)] public static extern ILockBytes CreateILockBytesOnHGlobal(IntPtr hGlobal, bool fDeleteOnRelease); [DllImport("ole32.dll", CharSet = CharSet.Unicode, PreserveSig = false)] public static extern IStorage StgCreateDocfileOnILockBytes(ILockBytes plkbyt, uint grfMode, uint reserved); [DllImport("ole32.dll")] internal static extern void ReleaseStgMedium(ref STGMEDIUM medium); [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("0000000B-0000-0000-C000-000000000046")] public interface IStorage { [return: MarshalAs(UnmanagedType.Interface)] IStream CreateStream([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved1, [In, MarshalAs(UnmanagedType.U4)] int reserved2); [return: MarshalAs(UnmanagedType.Interface)] IStream OpenStream([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, IntPtr reserved1, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved2); [return: MarshalAs(UnmanagedType.Interface)] IStorage CreateStorage([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.U4)] int grfMode, [In, MarshalAs(UnmanagedType.U4)] int reserved1, [In, MarshalAs(UnmanagedType.U4)] int reserved2); [return: MarshalAs(UnmanagedType.Interface)] IStorage OpenStorage([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, IntPtr pstgPriority, [In, MarshalAs(UnmanagedType.U4)] int grfMode, IntPtr snbExclude, [In, MarshalAs(UnmanagedType.U4)] int reserved); void CopyTo(int ciidExclude, [In, MarshalAs(UnmanagedType.LPArray)] Guid[] pIIDExclude, IntPtr snbExclude, [In, MarshalAs(UnmanagedType.Interface)] IStorage stgDest); void MoveElementTo([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In, MarshalAs(UnmanagedType.Interface)] IStorage stgDest, [In, MarshalAs(UnmanagedType.BStr)] string pwcsNewName, [In, MarshalAs(UnmanagedType.U4)] int grfFlags); void Commit(int grfCommitFlags); void Revert(); void EnumElements([In, MarshalAs(UnmanagedType.U4)] int reserved1, IntPtr reserved2, [In, MarshalAs(UnmanagedType.U4)] int reserved3, [MarshalAs(UnmanagedType.Interface)] out object ppVal); void DestroyElement([In, MarshalAs(UnmanagedType.BStr)] string pwcsName); void RenameElement([In, MarshalAs(UnmanagedType.BStr)] string pwcsOldName, [In, MarshalAs(UnmanagedType.BStr)] string pwcsNewName); void SetElementTimes([In, MarshalAs(UnmanagedType.BStr)] string pwcsName, [In] System.Runtime.InteropServices.ComTypes.FILETIME pctime, [In] System.Runtime.InteropServices.ComTypes.FILETIME patime, [In] System.Runtime.InteropServices.ComTypes.FILETIME pmtime); void SetClass([In] ref Guid clsid); void SetStateBits(int grfStateBits, int grfMask); void Stat([Out]out System.Runtime.InteropServices.ComTypes.STATSTG pStatStg, int grfStatFlag); } [ComImport, Guid("0000000A-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface ILockBytes { void ReadAt([In, MarshalAs(UnmanagedType.U8)] long ulOffset, [Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv, [In, MarshalAs(UnmanagedType.U4)] int cb, IntPtr pcbRead); void WriteAt([In, MarshalAs(UnmanagedType.U8)] long ulOffset, IntPtr pv, [In, MarshalAs(UnmanagedType.U4)] int cb, [Out, MarshalAs(UnmanagedType.LPArray)] int[] pcbWritten); void Flush(); void SetSize([In, MarshalAs(UnmanagedType.U8)] long cb); void LockRegion([In, MarshalAs(UnmanagedType.U8)] long libOffset, [In, MarshalAs(UnmanagedType.U8)] long cb, [In, MarshalAs(UnmanagedType.U4)] int dwLockType); void UnlockRegion([In, MarshalAs(UnmanagedType.U8)] long libOffset, [In, MarshalAs(UnmanagedType.U8)] long cb, [In, MarshalAs(UnmanagedType.U4)] int dwLockType); void Stat([Out]out System.Runtime.InteropServices.ComTypes.STATSTG pstatstg, [In, MarshalAs(UnmanagedType.U4)] int grfStatFlag); } [ComImport, Guid("0000010E-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IDataObject { [PreserveSig] int GetData([In] ref FORMATETC format, out STGMEDIUM medium); [PreserveSig] int GetDataHere([In] ref FORMATETC format, ref STGMEDIUM medium); [PreserveSig] int QueryGetData([In] ref FORMATETC format); [PreserveSig] int GetCanonicalFormatEtc([In] ref FORMATETC formatIn, out FORMATETC formatOut); [PreserveSig] int SetData([In] ref FORMATETC formatIn, [In] ref STGMEDIUM medium, [MarshalAs(UnmanagedType.Bool)] bool release); [PreserveSig] int EnumFormatEtc(DATADIR direction, out System.Runtime.InteropServices.ComTypes.IEnumFORMATETC ppenumFormatEtc); [PreserveSig] int DAdvise([In] ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection); [PreserveSig] int DUnadvise(int connection); [PreserveSig] int EnumDAdvise(out IEnumSTATDATA enumAdvise); } [ComImport, Guid("00000121-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IDropSource { [PreserveSig] int QueryContinueDrag([MarshalAs(UnmanagedType.Bool)] bool fEscapePressed, int grfKeyState); [PreserveSig] int GiveFeedback(int dwEffect); } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public sealed class FILEGROUPDESCRIPTORA { public uint cItems; //public FILEDESCRIPTORA[] fgd; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public sealed class FILEDESCRIPTORA { public uint dwFlags; public Guid clsid; public SIZEL sizel; public POINTL pointl; public uint dwFileAttributes; public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime; public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime; public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public sealed class FILEGROUPDESCRIPTORW { public uint cItems; //public FILEDESCRIPTORW[] fgd; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public sealed class FILEDESCRIPTORW { public uint dwFlags; public Guid clsid; public SIZEL sizel; public POINTL pointl; public uint dwFileAttributes; public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime; public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime; public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime; public uint nFileSizeHigh; public uint nFileSizeLow; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string cFileName; } [StructLayout(LayoutKind.Sequential)] public sealed class POINTL { public int x; public int y; } [StructLayout(LayoutKind.Sequential)] public sealed class SIZEL { public int cx; public int cy; } [StructLayout(LayoutKind.Sequential)] public sealed class DROPFILES { public int pFiles; public int X; public int Y; public bool fNC; public bool fWide; } [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true)] [return: MarshalAs(UnmanagedType.I4)] public delegate int DragDropDelegate(NativeMethods.IDataObject pDataObj, IntPtr pDropSource, uint dwOKEffects, out uint pdwEffect); } } ================================================ FILE: OutlookFileDrag/OutlookDataObject.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using log4net; namespace OutlookFileDrag { //Class that wraps Outlook data object and adds support for CF_HDROP format class OutlookDataObject : NativeMethods.IDataObject, ICustomQueryInterface { private NativeMethods.IDataObject innerData; private string[] tempFilenames; private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public bool FilesDropped { get; private set; } public OutlookDataObject(NativeMethods.IDataObject innerData) { this.innerData = innerData; } public int EnumFormatEtc(DATADIR direction, out IEnumFORMATETC ppenumFormatEtc) { IEnumFORMATETC origEnum = null; try { log.DebugFormat("IDataObject.EnumFormatEtc called -- direction {0}", direction); switch (direction) { case DATADIR.DATADIR_GET: //Get original enumerator int result = innerData.EnumFormatEtc(direction, out origEnum); if (result != NativeMethods.S_OK) { ppenumFormatEtc = null; return result; } //Enumerate original formats List formats = new List(); FORMATETC[] buffer = new FORMATETC[] { new FORMATETC() }; while (origEnum.Next(1, buffer, null) == NativeMethods.S_OK) { //Convert format from short to unsigned short ushort cfFormat = (ushort) buffer[0].cfFormat; //Do not return text formats -- some applications try to get text before files if (cfFormat != NativeMethods.CF_TEXT && cfFormat != NativeMethods.CF_UNICODETEXT && cfFormat != (ushort)DataObjectHelper.GetClipboardFormat("Csv")) formats.Add(buffer[0]); } //Add CF_HDROP format FORMATETC format = new FORMATETC(); format.cfFormat = NativeMethods.CF_HDROP; format.dwAspect = DVASPECT.DVASPECT_CONTENT; format.lindex = -1; format.ptd = IntPtr.Zero; format.tymed = TYMED.TYMED_HGLOBAL; formats.Add(format); //Return new enumerator for available formats ppenumFormatEtc = new FormatEtcEnumerator(formats.ToArray()); return NativeMethods.S_OK; case DATADIR.DATADIR_SET: //Return original enumerator return innerData.EnumFormatEtc(direction, out ppenumFormatEtc); default: //Invalid direction ppenumFormatEtc = null; return NativeMethods.E_INVALIDARG; } } catch (Exception ex) { log.Error("Exception in IDataObject.EnumFormatEtc", ex); ppenumFormatEtc = null; return NativeMethods.E_UNEXPECTED; } finally { //Release all unmanaged objects if (origEnum != null) Marshal.ReleaseComObject(origEnum); } } public int GetCanonicalFormatEtc(ref FORMATETC formatIn, out FORMATETC formatOut) { try { log.DebugFormat("IDataObject.GetCanonicalFormatEtc called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", formatIn.cfFormat, formatIn.dwAspect, formatIn.lindex, formatIn.ptd, formatIn.tymed); if (formatIn.cfFormat == NativeMethods.CF_HDROP) { //Copy input format to output format formatOut = new FORMATETC(); formatOut.cfFormat = formatIn.cfFormat; formatOut.dwAspect = formatIn.dwAspect; formatOut.lindex = formatIn.lindex; formatOut.ptd = IntPtr.Zero; formatOut.tymed = formatIn.tymed; return NativeMethods.DATA_S_SAMEFORMATETC; } else return innerData.GetCanonicalFormatEtc(formatIn, out formatOut); } catch (Exception ex) { log.Error("Exception in IDataObject.GetCanonicalFormatEtc", ex); formatOut = new FORMATETC(); return NativeMethods.E_UNEXPECTED; } } public int GetData(ref FORMATETC format, out STGMEDIUM medium) { try { //Get data into passed medium log.DebugFormat("IDataObject.GetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed); log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)format.cfFormat).Name); if (format.cfFormat == NativeMethods.CF_HDROP) { medium = new STGMEDIUM(); //Validate index if (format.lindex != -1) return NativeMethods.DV_E_LINDEX; //Validate medium type if (!format.tymed.HasFlag(TYMED.TYMED_HGLOBAL)) return NativeMethods.DV_E_TYMED; //Validate DV aspect if (format.dwAspect != DVASPECT.DVASPECT_CONTENT) return NativeMethods.DV_E_DVASPECT; //Extract files if not already extracted if (tempFilenames == null) ExtractFiles(); //Get list of dropped files log.Debug("Setting drop files"); DataObjectHelper.SetDropFiles(ref medium, tempFilenames); FilesDropped = true; return NativeMethods.S_OK; } else if (format.cfFormat == NativeMethods.CF_TEXT || format.cfFormat == NativeMethods.CF_UNICODETEXT || format.cfFormat == (ushort)DataObjectHelper.GetClipboardFormat("Csv")) { //Do not return text formats -- some applications try to get text before files medium = new STGMEDIUM(); return NativeMethods.DV_E_FORMATETC; } else { int result = innerData.GetData(format, out medium); log.DebugFormat("Result: {0}", result); return result; } } catch (Exception ex) { log.Error("Exception in IDataObject.GetData", ex); medium = new STGMEDIUM(); return NativeMethods.E_UNEXPECTED; } } public int GetDataHere(ref FORMATETC format, ref STGMEDIUM medium) { log.DebugFormat("IDataObject.QueryGetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed); return NativeMethods.E_NOTIMPL; } public int QueryGetData(ref FORMATETC format) { try { log.DebugFormat("IDataObject.QueryGetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", format.cfFormat, format.dwAspect, format.lindex, format.ptd, format.tymed); log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)format.cfFormat).Name); if (format.cfFormat == NativeMethods.CF_HDROP) { //Validate index if (format.lindex != -1) return NativeMethods.DV_E_LINDEX; //Validate medium type if (!format.tymed.HasFlag(TYMED.TYMED_HGLOBAL)) return NativeMethods.DV_E_TYMED; //Validate DV aspect if (format.dwAspect != DVASPECT.DVASPECT_CONTENT) return NativeMethods.DV_E_DVASPECT; log.DebugFormat("IDataObject.QueryGetData result: {0}", NativeMethods.S_OK); return NativeMethods.S_OK; } else if (format.cfFormat == NativeMethods.CF_TEXT || format.cfFormat == NativeMethods.CF_UNICODETEXT || format.cfFormat == (ushort)DataObjectHelper.GetClipboardFormat("Csv")) { //Do not return text formats -- some applications try to get text before files return NativeMethods.DV_E_FORMATETC; } else { int result = innerData.QueryGetData(format); log.DebugFormat("Result: {0}", result); return result; } } catch (Exception ex) { log.Error("Exception in IDataObject.QueryGetData", ex); return NativeMethods.E_UNEXPECTED; } } public int SetData(ref FORMATETC formatIn, ref STGMEDIUM medium, bool release) { try { log.DebugFormat("IDataObject.SetData called -- cfFormat {0} dwAspect {1} lindex {2} ptd {3} tymed {4}", formatIn.cfFormat, formatIn.dwAspect, formatIn.lindex, formatIn.ptd, formatIn.tymed); log.DebugFormat("Format name: {0}", System.Windows.Forms.DataFormats.GetFormat((ushort)formatIn.cfFormat).Name); int result = innerData.SetData(formatIn, medium, release); log.DebugFormat("Result: {0}", result); return result; } catch (Exception ex) { log.Error("Exception in IDataObject.SetData", ex); return NativeMethods.E_UNEXPECTED; } } public int DAdvise(ref FORMATETC pFormatetc, ADVF advf, IAdviseSink adviseSink, out int connection) { return innerData.DAdvise(pFormatetc, advf, adviseSink, out connection); } public int DUnadvise(int connection) { return innerData.DUnadvise(connection); } public int EnumDAdvise(out IEnumSTATDATA enumAdvise) { return innerData.EnumDAdvise(out enumAdvise); } private void ExtractFiles() { //Get filenames being dragged log.Debug("Getting filenames"); string[] filenames = DataObjectHelper.GetFilenames(this.innerData); log.DebugFormat("Filenames: {0}", string.Join(",", filenames)); //Get temporary folder log.Debug("Creating temp folder"); string tempPath = FileUtility.GetTempPath(); log.DebugFormat("Temp folder: {0}", tempPath); //Save files to temporary directory tempFilenames = new string[filenames.Length]; for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++) { tempFilenames[fileIndex] = FileUtility.GetUniqueFilename(Path.Combine(tempPath, filenames[fileIndex])); log.DebugFormat("Extracting file {0}", filenames[fileIndex]); using (FileStream fs = new FileStream(tempFilenames[fileIndex], FileMode.Create)) { DataObjectHelper.ReadFileContents(this.innerData, fileIndex, fs); } } } public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr ppv) { ppv = IntPtr.Zero; try { log.DebugFormat("Get COM interface {0}", iid); //For IDataObject interface, use interface on this object if (iid == new Guid("0000010E-0000-0000-C000-000000000046")) { log.DebugFormat("Interface handled"); return CustomQueryInterfaceResult.NotHandled; } else { //For all other interfaces, use interface on original object IntPtr pUnk = Marshal.GetIUnknownForObject(this.innerData); int retVal = Marshal.QueryInterface(pUnk, ref iid, out ppv); if (retVal == NativeMethods.S_OK) { log.DebugFormat("Interface handled by inner object"); return CustomQueryInterfaceResult.Handled; } else { log.DebugFormat("Interface not handled by inner object"); return CustomQueryInterfaceResult.Failed; } } } catch (Exception ex) { log.Error("Exception in ICustomQueryInterface", ex); return CustomQueryInterfaceResult.Failed; } } } } ================================================ FILE: OutlookFileDrag/OutlookDragSource.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using log4net; namespace OutlookFileDrag { class OutlookDragSource : NativeMethods.IDropSource, ICustomQueryInterface { private IntPtr innerData; private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public OutlookDragSource(IntPtr innerData) { this.innerData = innerData; } public CustomQueryInterfaceResult GetInterface(ref Guid iid, out IntPtr ppv) { ppv = IntPtr.Zero; try { log.DebugFormat("Get COM interface {0}", iid); //For all other interfaces, use interface on original object //IntPtr pUnk = Marshal.GetIUnknownForObject(this.innerData); IntPtr pUnk = this.innerData; int retVal = Marshal.QueryInterface(pUnk, ref iid, out ppv); if (retVal == NativeMethods.S_OK) { log.DebugFormat("Interface handled by inner object"); return CustomQueryInterfaceResult.Handled; } else { log.DebugFormat("Interface not handled by inner object"); return CustomQueryInterfaceResult.Failed; } } catch (Exception ex) { log.Error("Exception in ICustomQueryInterface", ex); return CustomQueryInterfaceResult.Failed; } } public int QueryContinueDrag([MarshalAs(UnmanagedType.Bool)] bool fEscapePressed, int grfKeyState) { throw new NotImplementedException(); } public int GiveFeedback(int dwEffect) { throw new NotImplementedException(); } } } ================================================ FILE: OutlookFileDrag/OutlookFileDrag.csproj ================================================  {BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} Debug AnyCPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415} Library false OutlookFileDrag OutlookFileDrag v4.0 VSTO40 true publish\ en 1.0.0.0 true true 7 days False OutlookFileDrag OutlookFileDrag 3 False Microsoft .NET Framework 4 %28x86 and x64%29 true False .NET Framework 3.5 SP1 false False Microsoft Visual Studio 2010 Tools for Office Runtime %28x86 and x64%29 true False Windows Installer 4.5 true Outlook true full false bin\Debug\ false $(DefineConstants);DEBUG;TRACE 4 AnyCPU pdbonly true bin\Release\ false $(DefineConstants);TRACE 4 ..\packages\EasyHook.2.7.6578.1\lib\net40\EasyHook.dll True ..\packages\log4net.2.0.8\lib\net40-full\log4net.dll True True True False true False True False Code Designer Designer Code ThisAddIn.cs ThisAddIn.Designer.xml PreserveNewest PreserveNewest 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) true 6EA39ECAD013020F956462F4CBF07570C217A1CF ================================================ FILE: OutlookFileDrag/Properties/AssemblyInfo.cs ================================================ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("Outlook File Drag")] [assembly: AssemblyDescription("Drag and drop Outlook items and attachments as files into any application")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Tony Federer")] [assembly: AssemblyProduct("Outlook File Drag")] [assembly: AssemblyCopyright("Copyright © 2019-2020 Tony Federer")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("282559d2-06f7-407f-9007-89f9e6fa5aa4")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.11.0")] [assembly: AssemblyFileVersion("1.0.11.0")] ================================================ FILE: OutlookFileDrag/ThisAddIn.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ #pragma warning disable 414 namespace OutlookFileDrag { /// [Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0)] [global::System.Security.Permissions.PermissionSetAttribute(global::System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] public sealed partial class ThisAddIn : Microsoft.Office.Tools.Outlook.OutlookAddInBase { internal Microsoft.Office.Tools.CustomTaskPaneCollection CustomTaskPanes; [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] private global::System.Object missing = global::System.Type.Missing; [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] internal Microsoft.Office.Interop.Outlook.Application Application; /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] public ThisAddIn(global::Microsoft.Office.Tools.Outlook.Factory factory, global::System.IServiceProvider serviceProvider) : base(factory, serviceProvider, "AddIn", "ThisAddIn") { Globals.Factory = factory; } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void Initialize() { base.Initialize(); this.Application = this.GetHostItem(typeof(Microsoft.Office.Interop.Outlook.Application), "Application"); Globals.ThisAddIn = this; global::System.Windows.Forms.Application.EnableVisualStyles(); this.InitializeCachedData(); this.InitializeControls(); this.InitializeComponents(); this.InitializeData(); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void FinishInitialization() { this.InternalStartup(); this.OnStartup(); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void InitializeDataBindings() { this.BeginInitialization(); this.BindToData(); this.EndInitialization(); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void InitializeCachedData() { if ((this.DataHost == null)) { return; } if (this.DataHost.IsCacheInitialized) { this.DataHost.FillCachedData(this); } } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void InitializeData() { } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void BindToData() { } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] private void StartCaching(string MemberName) { this.DataHost.StartCaching(this, MemberName); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] private void StopCaching(string MemberName) { this.DataHost.StopCaching(this, MemberName); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] private bool IsCached(string MemberName) { return this.DataHost.IsCached(this, MemberName); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void BeginInitialization() { this.BeginInit(); this.CustomTaskPanes.BeginInit(); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void EndInitialization() { this.CustomTaskPanes.EndInit(); this.EndInit(); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void InitializeControls() { this.CustomTaskPanes = Globals.Factory.CreateCustomTaskPaneCollection(null, null, "CustomTaskPanes", "CustomTaskPanes", this); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] private void InitializeComponents() { } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] private bool NeedsFill(string MemberName) { return this.DataHost.NeedsFill(this, MemberName); } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] protected override void OnShutdown() { this.CustomTaskPanes.Dispose(); base.OnShutdown(); } } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] internal sealed partial class Globals { /// private Globals() { } private static ThisAddIn _ThisAddIn; private static global::Microsoft.Office.Tools.Outlook.Factory _factory; private static ThisRibbonCollection _ThisRibbonCollection; private static ThisFormRegionCollection _ThisFormRegionCollection; internal static ThisAddIn ThisAddIn { get { return _ThisAddIn; } set { if ((_ThisAddIn == null)) { _ThisAddIn = value; } else { throw new System.NotSupportedException(); } } } internal static global::Microsoft.Office.Tools.Outlook.Factory Factory { get { return _factory; } set { if ((_factory == null)) { _factory = value; } else { throw new System.NotSupportedException(); } } } internal static ThisRibbonCollection Ribbons { get { if ((_ThisRibbonCollection == null)) { _ThisRibbonCollection = new ThisRibbonCollection(_factory.GetRibbonFactory()); } return _ThisRibbonCollection; } } internal static ThisFormRegionCollection FormRegions { get { if ((_ThisFormRegionCollection == null)) { _ThisFormRegionCollection = new ThisFormRegionCollection(Globals.ThisAddIn.GetFormRegions()); } return _ThisFormRegionCollection; } } } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Tools.Office.ProgrammingModel.dll", "14.0.0.0")] internal sealed partial class ThisRibbonCollection : Microsoft.Office.Tools.Ribbon.RibbonCollectionBase { /// internal ThisRibbonCollection(global::Microsoft.Office.Tools.Ribbon.RibbonFactory factory) : base(factory) { } internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] { get { return this.GetRibbonContextCollection(inspector); } } internal ThisRibbonCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] { get { return this.GetRibbonContextCollection(explorer); } } } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] internal sealed partial class ThisFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase { /// public ThisFormRegionCollection(System.Collections.Generic.IList list) : base(list) { } internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Explorer explorer] { get { return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(explorer, typeof(WindowFormRegionCollection)))); } } internal WindowFormRegionCollection this[Microsoft.Office.Interop.Outlook.Inspector inspector] { get { return ((WindowFormRegionCollection)(Globals.ThisAddIn.GetFormRegions(inspector, typeof(WindowFormRegionCollection)))); } } } /// [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] internal sealed partial class WindowFormRegionCollection : Microsoft.Office.Tools.Outlook.FormRegionCollectionBase { /// public WindowFormRegionCollection(System.Collections.Generic.IList list) : base(list) { } } } ================================================ FILE: OutlookFileDrag/ThisAddIn.Designer.xml ================================================ ================================================ FILE: OutlookFileDrag/ThisAddIn.cs ================================================ using System; using System.Reflection; using log4net; namespace OutlookFileDrag { public partial class ThisAddIn { private static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private System.Threading.Timer cleanupTimer; private DragDropHook hook; private void ThisAddIn_Startup(object sender, System.EventArgs e) { //Configure logging log4net.Config.XmlConfigurator.Configure(); try { log.Info("Add-in startup"); //Log version, OS version, Outlook version, and language log.InfoFormat("Version: {0}", Assembly.GetExecutingAssembly().GetName().Version.ToString()); log.InfoFormat("OS: {0} {1}", Environment.OSVersion, Environment.Is64BitOperatingSystem ? "x64" : "x86"); log.InfoFormat("Outlook version: {0} {1}", this.Application.Version, Environment.Is64BitProcess ? "x64" : "x86"); log.InfoFormat("Language: {0}", Application.LanguageSettings.get_LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI)); //Set up exception handlers System.Windows.Forms.Application.ThreadException += Application_ThreadException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; //Start cleanup timer int cleanupTimerInterval = int.Parse(System.Configuration.ConfigurationManager.AppSettings["CleanupTimerInterval"]); log.InfoFormat("Starting cleanup timer -- run every {0} minutes", cleanupTimerInterval); cleanupTimer = new System.Threading.Timer(CleanupTimer_Callback, null, 0, cleanupTimerInterval * 60 * 1000); //Start hook; hook = new DragDropHook(); hook.Start(); } catch (Exception ex) { log.Fatal("Fatal error", ex); if (hook != null) hook.Stop(); } } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { log.Fatal("Appdomain exception", (Exception)e.ExceptionObject); } private void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { log.Fatal("Application thread exception", e.Exception); } private void CleanupTimer_Callback(object state) { try { int tempFileExpiration = int.Parse(System.Configuration.ConfigurationManager.AppSettings["TempFileExpiration"]); log.InfoFormat("Cleaning up temp files older than {0} minutes", tempFileExpiration); FileUtility.CleanupTempPath(tempFileExpiration); } catch (Exception ex) { log.Error("Error cleaning up temp files", ex); } } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { // Note: Outlook no longer raises this event. If you have code that // must run when Outlook shuts down, see http://go.microsoft.com/fwlink/?LinkId=506785 try { log.Info("Add-in shutdown"); if (hook != null) hook.Stop(); } catch (Exception ex) { log.Fatal("Fatal error", ex); } } #region VSTO generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InternalStartup() { this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); } #endregion } } ================================================ FILE: OutlookFileDrag/packages.config ================================================  ================================================ FILE: OutlookFileDrag.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlookFileDrag", "OutlookFileDrag\OutlookFileDrag.csproj", "{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "OutlookFileDragSetup_x64", "OutlookFileDragSetup_x64\OutlookFileDragSetup_x64.vdproj", "{B42086D0-8877-4CF2-B3FE-C19210CD683D}" EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "OutlookFileDragSetup", "OutlookFileDragSetup\OutlookFileDragSetup.vdproj", "{0EF72B7A-7619-4572-A1C1-B31938BC6954}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{7A072433-B080-41DB-A449-19F4B547610B}" ProjectSection(SolutionItems) = preProject LICENSE = LICENSE License.rtf = License.rtf Readme.md = Readme.md EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CD_ROM|Any CPU = CD_ROM|Any CPU Debug|Any CPU = Debug|Any CPU DVD-5|Any CPU = DVD-5|Any CPU Release|Any CPU = Release|Any CPU SingleImage|Any CPU = SingleImage|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.CD_ROM|Any CPU.Build.0 = Release|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Debug|Any CPU.Build.0 = Debug|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.DVD-5|Any CPU.Build.0 = Debug|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Release|Any CPU.ActiveCfg = Release|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.Release|Any CPU.Build.0 = Release|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU {88E6522A-C68B-42C8-8B5E-9C959BA6C415}.SingleImage|Any CPU.Build.0 = Release|Any CPU {B42086D0-8877-4CF2-B3FE-C19210CD683D}.CD_ROM|Any CPU.ActiveCfg = Release {B42086D0-8877-4CF2-B3FE-C19210CD683D}.CD_ROM|Any CPU.Build.0 = Release {B42086D0-8877-4CF2-B3FE-C19210CD683D}.Debug|Any CPU.ActiveCfg = Debug {B42086D0-8877-4CF2-B3FE-C19210CD683D}.Debug|Any CPU.Build.0 = Debug {B42086D0-8877-4CF2-B3FE-C19210CD683D}.DVD-5|Any CPU.ActiveCfg = Debug {B42086D0-8877-4CF2-B3FE-C19210CD683D}.DVD-5|Any CPU.Build.0 = Debug {B42086D0-8877-4CF2-B3FE-C19210CD683D}.Release|Any CPU.ActiveCfg = Release {B42086D0-8877-4CF2-B3FE-C19210CD683D}.Release|Any CPU.Build.0 = Release {B42086D0-8877-4CF2-B3FE-C19210CD683D}.SingleImage|Any CPU.ActiveCfg = Release {B42086D0-8877-4CF2-B3FE-C19210CD683D}.SingleImage|Any CPU.Build.0 = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.CD_ROM|Any CPU.ActiveCfg = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.CD_ROM|Any CPU.Build.0 = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.Debug|Any CPU.ActiveCfg = Debug {0EF72B7A-7619-4572-A1C1-B31938BC6954}.Debug|Any CPU.Build.0 = Debug {0EF72B7A-7619-4572-A1C1-B31938BC6954}.DVD-5|Any CPU.ActiveCfg = Debug {0EF72B7A-7619-4572-A1C1-B31938BC6954}.DVD-5|Any CPU.Build.0 = Debug {0EF72B7A-7619-4572-A1C1-B31938BC6954}.Release|Any CPU.ActiveCfg = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.Release|Any CPU.Build.0 = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.SingleImage|Any CPU.ActiveCfg = Release {0EF72B7A-7619-4572-A1C1-B31938BC6954}.SingleImage|Any CPU.Build.0 = Release EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ================================================ FILE: OutlookFileDragSetup/OutlookFileDragSetup.vdproj ================================================ "DeployProject" { "VSVersion" = "3:800" "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" "IsWebType" = "8:FALSE" "ProjectName" = "8:OutlookFileDragSetup" "LanguageId" = "3:1033" "CodePage" = "3:1252" "UILanguageId" = "3:1033" "SccProjectName" = "8:" "SccLocalPath" = "8:" "SccAuxPath" = "8:" "SccProvider" = "8:" "Hierarchy" { "Entry" { "MsmKey" = "8:_0A93BF555B38467ABC9AFEBDA2D4ABCC" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_15F0BD9071B5889215577FD20EC63766" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_591351D571FEB540A92347F0F74B55CE" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_811077B889234B5E8D92FD9440B779AD" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9CE773A8FA4242D096608C6597B170E4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E81182AD22C040558214805DBCE4ACCA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_15F0BD9071B5889215577FD20EC63766" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_591351D571FEB540A92347F0F74B55CE" "MsmSig" = "8:_UNDEFINED" } } "Configurations" { "Debug" { "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" "OutputFilename" = "8:Debug\\OutlookFileDragSetup.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" { "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" "ProductCode" = "8:.NETFramework,Version=v4.5" } } } } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" "OutputFilename" = "8:Release\\OutlookFileDragSetup.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" { "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" "ProductCode" = "8:.NETFramework,Version=v4.5" } } } } } "Deployable" { "CustomAction" { } "DefaultFeature" { "Name" = "8:DefaultFeature" "Title" = "8:" "Description" = "8:" } "ExternalPersistence" { "LaunchCondition" { "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_44641C1530CC419BA8B9920E58E9A08E" { "Name" = "8:.NET Framework" "Message" = "8:[VSDNETMSG]" "FrameworkVersion" = "8:.NETFramework,Version=v4.5" "AllowLaterVersions" = "11:FALSE" "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=395269" } } } "File" { "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0A93BF555B38467ABC9AFEBDA2D4ABCC" { "SourcePath" = "8:..\\OutlookFileDrag\\EasyHook32.dll" "TargetName" = "8:EasyHook32.dll" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_12FE3AC54ED17E0AB1007324ABFD58D1" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_12FE3AC54ED17E0AB1007324ABFD58D1" { "Name" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_133D4E0B8AD91071625356F7F9F22C66" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_133D4E0B8AD91071625356F7F9F22C66" { "Name" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_15F0BD9071B5889215577FD20EC63766" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:EasyHook, Version=2.7.6578.0, Culture=neutral, PublicKeyToken=4b580fca19d0b0c5, processorArchitecture=MSIL" "ScatterAssemblies" { "_15F0BD9071B5889215577FD20EC63766" { "Name" = "8:EasyHook.dll" "Attributes" = "3:512" } } "SourcePath" = "8:EasyHook.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3DBBABF7C43171A6F7B4D8D682699556" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_3DBBABF7C43171A6F7B4D8D682699556" { "Name" = "8:Microsoft.Office.Tools.Outlook.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Outlook.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5575AAAA0CAC3763D8DCDDD642FBD25F" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_5575AAAA0CAC3763D8DCDDD642FBD25F" { "Name" = "8:Microsoft.Office.Tools.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_591351D571FEB540A92347F0F74B55CE" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" "ScatterAssemblies" { "_591351D571FEB540A92347F0F74B55CE" { "Name" = "8:stdole.dll" "Attributes" = "3:512" } } "SourcePath" = "8:stdole.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_811077B889234B5E8D92FD9440B779AD" { "SourcePath" = "8:..\\License.rtf" "TargetName" = "8:License.rtf" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B3B11113C57483FCBDDB37CB3ED5F37" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_9B3B11113C57483FCBDDB37CB3ED5F37" { "Name" = "8:Microsoft.Office.Tools.Common.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Common.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CE773A8FA4242D096608C6597B170E4" { "SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.dll.manifest" "TargetName" = "8:OutlookFileDrag.dll.manifest" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BB365CE8FF8B85A3589349A35DAB0785" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_BB365CE8FF8B85A3589349A35DAB0785" { "Name" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3161A936F4192497A0972C3EC781BF6" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.v4.0.Framework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_C3161A936F4192497A0972C3EC781BF6" { "Name" = "8:Microsoft.Office.Tools.v4.0.Framework.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.v4.0.Framework.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL" "ScatterAssemblies" { "_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" { "Name" = "8:log4net.dll" "Attributes" = "3:512" } } "SourcePath" = "8:log4net.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E81182AD22C040558214805DBCE4ACCA" { "SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.vsto" "TargetName" = "8:OutlookFileDrag.vsto" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } } "FileType" { } "Folder" { "{1525181F-901A-416C-8A58-119130FE478E}:_4C10008235FF4D1F8A1EC7E2473D78C3" { "Name" = "8:#1919" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:ProgramMenuFolder" "Folders" { } } "{3C67513D-01DD-4637-8A68-80971EB9504F}:_919F44B827474C528E0E9FF4CAE2B9AE" { "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" "Name" = "8:#1925" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:TARGETDIR" "Folders" { } } "{1525181F-901A-416C-8A58-119130FE478E}:_D44EFF1C326F4D2BADA2F7528B91CC01" { "Name" = "8:#1916" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:DesktopFolder" "Folders" { } } } "LaunchCondition" { } "Locator" { } "MsiBootstrapper" { "LangId" = "3:1033" "RequiresElevation" = "11:FALSE" } "Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Outlook File Drag" "ProductCode" = "8:{E1259659-073D-4042-AF4D-05AEDBA3C9C8}" "PackageCode" = "8:{82C3D368-32B5-488A-A19C-452F635E19FF}" "UpgradeCode" = "8:{2F626147-8F83-4FC1-9190-32AA4F25D487}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" "ProductVersion" = "8:1.0.11" "Manufacturer" = "8:Tony Federer" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:https://github.com/tonyfederer/OutlookFileDrag" "Title" = "8:Outlook File Drag Setup" "Subject" = "8:" "ARPCONTACT" = "8:Tony Federer" "Keywords" = "8:" "ARPCOMMENTS" = "8:Drag and drop Outlook items as files into any application" "ARPURLINFOABOUT" = "8:" "ARPPRODUCTICON" = "8:" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" "TargetPlatform" = "3:0" "PreBuildEvent" = "8:" "PostBuildEvent" = "8:" "RunPostBuildEvent" = "3:0" } "Registry" { "HKLM" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4A904143A3D42869C1DE1D4F1A30D0E" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22D1BC2B78644122968D266BD453DE99" { "Name" = "8:WOW6432Node" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8F27B43AF5DE476E9EE2AE86B3C2DF45" { "Name" = "8:Microsoft" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_33EBC259BC9E4D39A94966448F31B769" { "Name" = "8:Office" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4A6052B230644EAFA587141B09595C8C" { "Name" = "8:Outlook" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C8B5751F82A44695AC627E9C50443F3C" { "Name" = "8:Addins" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FA680E6DBA8248D891731BA238E0099C" { "Name" = "8:OutlookFileDrag" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:TRUE" "Transitive" = "11:FALSE" "Keys" { } "Values" { "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4BB9A67E5DC4464588D3093EAA7D52D4" { "Name" = "8:Manifest" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_602742F0760846239584275A35DA1AAB" { "Name" = "8:FriendlyName" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:OutlookFileDrag" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_BDE554EC0FD5452B880DFE5E62B1F33B" { "Name" = "8:LoadBehavior" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:3" "Value" = "3:3" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_CCB6882391414CACBFF9CA1E7D561491" { "Name" = "8:Description" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Drag Outlook items as files into any application" } } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_354F1B5F9F6E445BAE6A035E97CF0822" { "Name" = "8:Microsoft" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3FBE7EA97A140C5B5B598854F9A0FAC" { "Name" = "8:Office" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3827A07754641D9AD6ED474A07D3788" { "Name" = "8:Outlook" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B153EB6F913F4E6B86EB8FA442B32E01" { "Name" = "8:Addins" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CF568FCCF5F949B9BB57B58832FCC5E8" { "Name" = "8:OutlookFileDrag" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:TRUE" "Transitive" = "11:FALSE" "Keys" { } "Values" { "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_0EC644502E3F48E4B628F34BDF6629EE" { "Name" = "8:Description" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Drag Outlook items as files into any application" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_3D1BF5D39D24455DAA6C83039CAB218A" { "Name" = "8:LoadBehavior" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:3" "Value" = "3:3" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C924643C1D0B486CBA80C7750F4A2F78" { "Name" = "8:FriendlyName" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Outlook File Drag" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_FE433651CB1C4B27B454859B408DC466" { "Name" = "8:Manifest" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal" } } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } } "HKCU" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6FAF1F902A2C40D480CF8007A399A463" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } } "HKCR" { "Keys" { } } "HKU" { "Keys" { } } "HKPU" { "Keys" { } } } "Sequences" { } "Shortcut" { } "UserInterface" { "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2371DACEF6F94E98AF0C94614DF03E04" { "Name" = "8:#1900" "Sequence" = "3:1" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_26A83612205E4DBC81DBC76172D2C1F8" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8F1EFA7475EA4E6F934BEA882EE7D273" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" { "Name" = "8:InstallAllUsersVisible" "DisplayName" = "8:#1059" "Description" = "8:#1159" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:0" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C619EF5B3A384CA2B73D88272FDCF4E6" { "Sequence" = "3:110" "DisplayName" = "8:License Agreement" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdLicenseDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "EulaText" { "Name" = "8:EulaText" "DisplayName" = "8:#1008" "Description" = "8:#1108" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_811077B889234B5E8D92FD9440B779AD" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2099CB7BD9B4B7EA55AC883A3EF4D99" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3640BE8DA10C43B08302EDBF1D242F02" { "Name" = "8:#1901" "Sequence" = "3:2" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_02CEF8D9F8474FFF8F7BC9850C702E5A" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_51AFB1E6343E4D1CBE228814E8E53FB7" { "Name" = "8:#1901" "Sequence" = "3:1" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C069CBE9F6354A4489912B7C2A93A0E7" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_6A78FCF2607F4ED4993C83C317BDF788" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdUserInterface.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_73653059E18A46DBA5A094EB50F3F1EC" { "Name" = "8:#1900" "Sequence" = "3:2" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6DAE5AFAE9644A67B0639F0C67E856E9" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B86FF87ADAFE4746BFC955ADC4623837" { "Sequence" = "3:110" "DisplayName" = "8:License Agreement" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminLicenseDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "EulaText" { "Name" = "8:EulaText" "DisplayName" = "8:#1008" "Description" = "8:#1108" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_811077B889234B5E8D92FD9440B779AD" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2BD515F58AE4374BDD15A00EA7FFF3D" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1202" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FE7438441C294F67A9A2827BE22A936E" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9BD9D3D3A44C45D39936506919F27084" { "Name" = "8:#1902" "Sequence" = "3:1" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E9CDCE57CC8B40A2A6B4155953836767" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "UpdateText" { "Name" = "8:UpdateText" "DisplayName" = "8:#1058" "Description" = "8:#1158" "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1258" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C001A743B84C4C898270AA9143A46C9F" { "Name" = "8:#1902" "Sequence" = "3:2" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B8367B2F3AB14A32B53AC3C64C3815E3" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_C08686B031154BE19BFDEA8BAA2F4BF3" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdBasicDialogs.wim" } } "MergeModule" { } "ProjectOutput" { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_54EF5F74A56C4AEE96D4330B540B4A3A" { "SourcePath" = "8:..\\OutlookFileDrag\\obj\\Debug\\OutlookFileDrag.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A2682E522C9745F7840F601359FBC055" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:ContentFiles" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_F45C1AA6C44446A4BFB09062C1E0C83B" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } } } } ================================================ FILE: OutlookFileDragSetup_x64/OutlookFileDragSetup_x64.vdproj ================================================ "DeployProject" { "VSVersion" = "3:800" "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" "IsWebType" = "8:FALSE" "ProjectName" = "8:OutlookFileDragSetup_x64" "LanguageId" = "3:1033" "CodePage" = "3:1252" "UILanguageId" = "3:1033" "SccProjectName" = "8:" "SccLocalPath" = "8:" "SccAuxPath" = "8:" "SccProvider" = "8:" "Hierarchy" { "Entry" { "MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_15F0BD9071B5889215577FD20EC63766" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_591351D571FEB540A92347F0F74B55CE" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9CE773A8FA4242D096608C6597B170E4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_9F1635A8DEF84079B9675D027C0460A4" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_DB2A43345F9440DD84405C790D1EDDA2" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E81182AD22C040558214805DBCE4ACCA" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_FDD7226F564A40639B9655DB42455355" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_54EF5F74A56C4AEE96D4330B540B4A3A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_15F0BD9071B5889215577FD20EC63766" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_C3161A936F4192497A0972C3EC781BF6" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_12FE3AC54ED17E0AB1007324ABFD58D1" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_133D4E0B8AD91071625356F7F9F22C66" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_3DBBABF7C43171A6F7B4D8D682699556" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_BB365CE8FF8B85A3589349A35DAB0785" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_9B3B11113C57483FCBDDB37CB3ED5F37" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_5575AAAA0CAC3763D8DCDDD642FBD25F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_591351D571FEB540A92347F0F74B55CE" "MsmSig" = "8:_UNDEFINED" } } "Configurations" { "Debug" { "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" "OutputFilename" = "8:Debug\\OutlookFileDragSetup_x64.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" { "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" "ProductCode" = "8:.NETFramework,Version=v4.5" } } } } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" "OutputFilename" = "8:Release\\OutlookFileDragSetup_x64.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.5" { "Name" = "8:Microsoft .NET Framework 4.5 (x86 and x64)" "ProductCode" = "8:.NETFramework,Version=v4.5" } } } } } "Deployable" { "CustomAction" { } "DefaultFeature" { "Name" = "8:DefaultFeature" "Title" = "8:" "Description" = "8:" } "ExternalPersistence" { "LaunchCondition" { "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_44641C1530CC419BA8B9920E58E9A08E" { "Name" = "8:.NET Framework" "Message" = "8:[VSDNETMSG]" "FrameworkVersion" = "8:.NETFramework,Version=v4.5" "AllowLaterVersions" = "11:FALSE" "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=395269" } } } "File" { "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_12FE3AC54ED17E0AB1007324ABFD58D1" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_12FE3AC54ED17E0AB1007324ABFD58D1" { "Name" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.VisualStudio.Tools.Applications.Runtime.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_133D4E0B8AD91071625356F7F9F22C66" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_133D4E0B8AD91071625356F7F9F22C66" { "Name" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Outlook.v4.0.Utilities.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_15F0BD9071B5889215577FD20EC63766" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:EasyHook, Version=2.7.6578.0, Culture=neutral, PublicKeyToken=4b580fca19d0b0c5, processorArchitecture=MSIL" "ScatterAssemblies" { "_15F0BD9071B5889215577FD20EC63766" { "Name" = "8:EasyHook.dll" "Attributes" = "3:512" } } "SourcePath" = "8:EasyHook.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3DBBABF7C43171A6F7B4D8D682699556" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Outlook, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_3DBBABF7C43171A6F7B4D8D682699556" { "Name" = "8:Microsoft.Office.Tools.Outlook.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Outlook.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5575AAAA0CAC3763D8DCDDD642FBD25F" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_5575AAAA0CAC3763D8DCDDD642FBD25F" { "Name" = "8:Microsoft.Office.Tools.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_591351D571FEB540A92347F0F74B55CE" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" "ScatterAssemblies" { "_591351D571FEB540A92347F0F74B55CE" { "Name" = "8:stdole.dll" "Attributes" = "3:512" } } "SourcePath" = "8:stdole.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_9B3B11113C57483FCBDDB37CB3ED5F37" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_9B3B11113C57483FCBDDB37CB3ED5F37" { "Name" = "8:Microsoft.Office.Tools.Common.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Common.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CE773A8FA4242D096608C6597B170E4" { "SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.dll.manifest" "TargetName" = "8:OutlookFileDrag.dll.manifest" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9F1635A8DEF84079B9675D027C0460A4" { "SourcePath" = "8:..\\License.rtf" "TargetName" = "8:License.rtf" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BB365CE8FF8B85A3589349A35DAB0785" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_BB365CE8FF8B85A3589349A35DAB0785" { "Name" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.Common.v4.0.Utilities.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3161A936F4192497A0972C3EC781BF6" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Microsoft.Office.Tools.v4.0.Framework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" "ScatterAssemblies" { "_C3161A936F4192497A0972C3EC781BF6" { "Name" = "8:Microsoft.Office.Tools.v4.0.Framework.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Microsoft.Office.Tools.v4.0.Framework.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL" "ScatterAssemblies" { "_CE28E7CBCA9C5EDB3BD3A2F1F2116DF9" { "Name" = "8:log4net.dll" "Attributes" = "3:512" } } "SourcePath" = "8:log4net.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DB2A43345F9440DD84405C790D1EDDA2" { "SourcePath" = "8:..\\OutlookFileDrag\\EasyHook64.dll" "TargetName" = "8:EasyHook64.dll" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E81182AD22C040558214805DBCE4ACCA" { "SourcePath" = "8:..\\OutlookFileDrag\\bin\\Release\\OutlookFileDrag.vsto" "TargetName" = "8:OutlookFileDrag.vsto" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FDD7226F564A40639B9655DB42455355" { "SourcePath" = "8:..\\OutlookFileDrag\\EasyHook32.dll" "TargetName" = "8:EasyHook32.dll" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } } "FileType" { } "Folder" { "{1525181F-901A-416C-8A58-119130FE478E}:_4C10008235FF4D1F8A1EC7E2473D78C3" { "Name" = "8:#1919" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:ProgramMenuFolder" "Folders" { } } "{3C67513D-01DD-4637-8A68-80971EB9504F}:_919F44B827474C528E0E9FF4CAE2B9AE" { "DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]" "Name" = "8:#1925" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:TARGETDIR" "Folders" { } } "{1525181F-901A-416C-8A58-119130FE478E}:_D44EFF1C326F4D2BADA2F7528B91CC01" { "Name" = "8:#1916" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:DesktopFolder" "Folders" { } } } "LaunchCondition" { } "Locator" { } "MsiBootstrapper" { "LangId" = "3:1033" "RequiresElevation" = "11:FALSE" } "Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Outlook File Drag" "ProductCode" = "8:{0FB154FE-B6B3-4C4F-9DE1-DD9D5D3670A5}" "PackageCode" = "8:{7C7FBEE4-D524-4FEB-8EE9-2B450B3D5827}" "UpgradeCode" = "8:{65870D9B-6652-4150-830B-C5199F26E62C}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:TRUE" "ProductVersion" = "8:1.0.11" "Manufacturer" = "8:Tony Federer" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:https://github.com/tonyfederer/OutlookFileDrag" "Title" = "8:Outlook File Drag Setup (x64)" "Subject" = "8:" "ARPCONTACT" = "8:Tony Federer" "Keywords" = "8:" "ARPCOMMENTS" = "8:Drag and drop Outlook items as files into any application" "ARPURLINFOABOUT" = "8:" "ARPPRODUCTICON" = "8:" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" "TargetPlatform" = "3:1" "PreBuildEvent" = "8:" "PostBuildEvent" = "8:" "RunPostBuildEvent" = "3:0" } "Registry" { "HKLM" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4A904143A3D42869C1DE1D4F1A30D0E" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_22D1BC2B78644122968D266BD453DE99" { "Name" = "8:WOW6432Node" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8F27B43AF5DE476E9EE2AE86B3C2DF45" { "Name" = "8:Microsoft" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_33EBC259BC9E4D39A94966448F31B769" { "Name" = "8:Office" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4A6052B230644EAFA587141B09595C8C" { "Name" = "8:Outlook" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_C8B5751F82A44695AC627E9C50443F3C" { "Name" = "8:Addins" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FA680E6DBA8248D891731BA238E0099C" { "Name" = "8:OutlookFileDrag" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:TRUE" "Transitive" = "11:FALSE" "Keys" { } "Values" { "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4BB9A67E5DC4464588D3093EAA7D52D4" { "Name" = "8:Manifest" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_602742F0760846239584275A35DA1AAB" { "Name" = "8:FriendlyName" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:OutlookFileDrag" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_BDE554EC0FD5452B880DFE5E62B1F33B" { "Name" = "8:LoadBehavior" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:3" "Value" = "3:3" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_CCB6882391414CACBFF9CA1E7D561491" { "Name" = "8:Description" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Drag Outlook items as files into any application" } } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_354F1B5F9F6E445BAE6A035E97CF0822" { "Name" = "8:Microsoft" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3FBE7EA97A140C5B5B598854F9A0FAC" { "Name" = "8:Office" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B3827A07754641D9AD6ED474A07D3788" { "Name" = "8:Outlook" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B153EB6F913F4E6B86EB8FA442B32E01" { "Name" = "8:Addins" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CF568FCCF5F949B9BB57B58832FCC5E8" { "Name" = "8:OutlookFileDrag" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:TRUE" "Transitive" = "11:FALSE" "Keys" { } "Values" { "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_0EC644502E3F48E4B628F34BDF6629EE" { "Name" = "8:Description" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Drag Outlook items as files into any application" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_3D1BF5D39D24455DAA6C83039CAB218A" { "Name" = "8:LoadBehavior" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:3" "Value" = "3:3" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C924643C1D0B486CBA80C7750F4A2F78" { "Name" = "8:FriendlyName" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:Outlook File Drag" } "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_FE433651CB1C4B27B454859B408DC466" { "Name" = "8:Manifest" "Condition" = "8:" "Transitive" = "11:FALSE" "ValueTypes" = "3:1" "Value" = "8:file:///[TARGETDIR]OutlookFileDrag.vsto|vstolocal" } } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } "Values" { } } } } "HKCU" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6FAF1F902A2C40D480CF8007A399A463" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } } "HKCR" { "Keys" { } } "HKU" { "Keys" { } } "HKPU" { "Keys" { } } } "Sequences" { } "Shortcut" { } "UserInterface" { "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2371DACEF6F94E98AF0C94614DF03E04" { "Name" = "8:#1900" "Sequence" = "3:1" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7C6F7BCCB3134D219B945FC671E2C571" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1202" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8F1EFA7475EA4E6F934BEA882EE7D273" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" { "Name" = "8:InstallAllUsersVisible" "DisplayName" = "8:#1059" "Description" = "8:#1159" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:0" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B4D5279C408E467694AF02D4E02D61D0" { "Sequence" = "3:110" "DisplayName" = "8:License Agreement" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdLicenseDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "EulaText" { "Name" = "8:EulaText" "DisplayName" = "8:#1008" "Description" = "8:#1108" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_9F1635A8DEF84079B9675D027C0460A4" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2099CB7BD9B4B7EA55AC883A3EF4D99" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3640BE8DA10C43B08302EDBF1D242F02" { "Name" = "8:#1901" "Sequence" = "3:2" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_02CEF8D9F8474FFF8F7BC9850C702E5A" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_51AFB1E6343E4D1CBE228814E8E53FB7" { "Name" = "8:#1901" "Sequence" = "3:1" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C069CBE9F6354A4489912B7C2A93A0E7" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_6A78FCF2607F4ED4993C83C317BDF788" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdUserInterface.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_73653059E18A46DBA5A094EB50F3F1EC" { "Name" = "8:#1900" "Sequence" = "3:2" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4EAA0552B1A64272BACC7C0319AA1B0D" { "Sequence" = "3:110" "DisplayName" = "8:License Agreement" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminLicenseDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "EulaText" { "Name" = "8:EulaText" "DisplayName" = "8:#1008" "Description" = "8:#1108" "Type" = "3:6" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:_9F1635A8DEF84079B9675D027C0460A4" "UsePlugInResources" = "11:TRUE" } "Sunken" { "Name" = "8:Sunken" "DisplayName" = "8:#1007" "Description" = "8:#1107" "Type" = "3:5" "ContextData" = "8:4;True=4;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:4" "DefaultValue" = "3:4" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6DAE5AFAE9644A67B0639F0C67E856E9" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2BD515F58AE4374BDD15A00EA7FFF3D" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1202" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FE7438441C294F67A9A2827BE22A936E" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9BD9D3D3A44C45D39936506919F27084" { "Name" = "8:#1902" "Sequence" = "3:1" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E9CDCE57CC8B40A2A6B4155953836767" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } "UpdateText" { "Name" = "8:UpdateText" "DisplayName" = "8:#1058" "Description" = "8:#1158" "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1258" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C001A743B84C4C898270AA9143A46C9F" { "Name" = "8:#1902" "Sequence" = "3:2" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B8367B2F3AB14A32B53AC3C64C3815E3" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_C08686B031154BE19BFDEA8BAA2F4BF3" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdBasicDialogs.wim" } } "MergeModule" { } "ProjectOutput" { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_54EF5F74A56C4AEE96D4330B540B4A3A" { "SourcePath" = "8:..\\OutlookFileDrag\\obj\\Debug\\OutlookFileDrag.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_749FB0E6341A426B8E31DAFFC8EBE0F9" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:ContentFiles" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_CBE5DEADEE0E4AE7A4A3D0832595387F" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_919F44B827474C528E0E9FF4CAE2B9AE" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{88E6522A-C68B-42C8-8B5E-9C959BA6C415}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } } } } ================================================ FILE: Readme.md ================================================ # Outlook File Drag *Drag and drop Outlook items as files into any application* ## Read This First! Microsoft Edge (as of Windows 10 1709) and Google Chrome (as of version 76) natively support drag and drop from Outlook on Windows. If you use one of these browsers, then this plugin is not necessary. ## Overview Outlook File Drag is an add-in for Outlook 2013 and 2016 that allows you to drag and drop Outlook items (messages, attachments, contacts, tasks, appointments, meetings, etc) to applications that allow physical files to be dropped, such as web browsers. ## How Does it Work? When you try to drag and drop from Outlook, Outlook correctly identifies the format as virtual files (CFSTR_FILEDESCRIPTORW) since the files do not exist directly on disk. Instead, they are contained in a PST file, OST file, or on an Exchange server. However, many applications do not support this format, such as web browers and most .NET/Java applications. To work around this issue, Outlook File Drag hooks the Outlook drag and drop process and adds support for physical files (CF_HDROP). When the receiving application asks for the physical files, the files are saved to a temp folder and those filenames are returned to the application. The application processes the files (such as uploading them). Outlook File Drag deletes the temp files later in a cleanup process. ## Features - Works with Chrome, Firefox, Internet Explorer, Edge, and other applications that accept files to be dropped - Allows drag and drop into HTML5-based web applications - Drag e-mails, attachments, contacts, calendar items, and more - Drag multiple items at once - Supports Unicode characters ## Installation To install, run the installer that matches your Windows build: - [Download for 64-bit Windows (Outlook 32-bit or 64-bit)](https://github.com/tonyfederer/OutlookFileDrag/releases/download/v1.0.11/OutlookFileDragSetup_x64.zip) - [Download for 32-bit Windows](https://github.com/tonyfederer/OutlookFileDrag/releases/download/v1.0.11/OutlookFileDragSetup.zip) After installing, restart Outlook for the add-in to take effect. ## Automated (Silent) Installation For administrators, OutlookFileDrag supports automated (silent) installation and uninstallation using `msiexec` with command line parameters. ### Silent Installation To silently install OutlookFileDrag, use this command: `msiexec.exe /i /qn /log ` - ``: Path to MSI file - ``: Path to log file (if folder is not specified, MSI path is used) Example: `msiexec.exe C:\Install\OutlookFileDrag_x64.msi /qn /log C:\Logs\OutlookFileDragInstall.log` After installing, restart Outlook for the add-in to take effect. ### Silent Uninstallation To silently uninstall OutlookFileDrag, use this command: `msiexec.exe /x /qn /log ` - `` for 64-bit version: `{CF5F9043-967C-400D-B6D5-F41AF6AD83AE}` - `` for 32-bit version: `{7EA6E17B-8802-4E1F-9669-248670B31BFB}` - ``: Path to log file Example: `msiexec.exe /x {CF5F9043-967C-400D-B6D5-F41AF6AD83AE} /qn /log C:\Logs\OutlookFileDragUninstall.log` ## Acknowledgements Outlook File Drag uses these open source projects: - [Easyhook](https://easyhook.github.io/) - [log4net](http://logging.apache.org/log4net/) ## Feedback/Contribute You can view the source code, report issues, and contribute on [Github](https://github.com/tonyfederer/OutlookFileDrag). ## Donate If you find this project useful, please consider donating. Your donations are appreciated. =) [![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BSAGCF5VAJLN2) ## Version History ### 1.0.11 - Fixed drag and drop of embedded RTF attachments (thanks chrisv2) ### 1.0.10 - Fixed System.ArgumentException bug in ReadHGlobalIntoStream method when reading more than 4 KB introduced in version 1.0.8. ### 1.0.9 - If files were dropped and drop effect was "move", then override to "copy" so original item is not deleted ### 1.0.8 - Fixed releasing of unmanaged resources - Memory usage improvements - Added more details to log file ### 1.0.5 - Fixed crash when dragging calendar items ### 1.0.4 - Added additional debug logging - Fixed issue where STGMEDIUM was not being released after reading filenames - Fixed issue that where reading filenames sometimes failed - Fixed hooking process to allow starting and stopping hook without disposing and recreating hook ### 1.0.3 - Fixed issue that prevented dragging items from one group to another ### 1.0.2 - Fixed PathTooLong exception when temporary filename was longer than MAX_PATH ### 1.0.1 - Fixed issues with 64-bit Outlook - Added self-signed certificate ### 1.0 - Initial Release ## Copyright Outlook File Drag is copyright (c) 2018 by [Tony Federer](https://github.com/tonyfederer) and released under the MIT License. ================================================ FILE: _config.yml ================================================ theme: jekyll-theme-cayman