From 9237a8d888a0ae888cab253915e68c234ed70382 Mon Sep 17 00:00:00 2001 From: Ernst Date: Fri, 1 Dec 2017 10:57:20 -0800 Subject: [PATCH] Got a 2017 version of the extension working. Would like to see a single installer for 2012/2015/2017. So the changes here probably can't be merged back up, but for standalone installer is fine. --- VsDingExtension.sln | 25 +- .../Properties/AssemblyInfo.cs | 36 +++ VsDingExtensionFor2017/ReleaseNotes.txt | 4 + .../VsDingExtensionFor2017.csproj | 219 ++++++++++++++++++ .../source.extension.vsixmanifest | 36 +++ VsDingExtensionFor2017/speaker2017.ico | Bin 0 -> 67646 bytes VsDingExtensionProject/Resources.Designer.cs | 4 +- .../VsDingExtensionProject.args.json | 8 + .../VsDingExtensionProject.csproj | 7 +- .../VsDingExtensionProjectPackage.cs | 2 +- VsDingExtensionProject/WinApiHelper.cs | 2 +- 11 files changed, 324 insertions(+), 19 deletions(-) create mode 100644 VsDingExtensionFor2017/Properties/AssemblyInfo.cs create mode 100644 VsDingExtensionFor2017/ReleaseNotes.txt create mode 100644 VsDingExtensionFor2017/VsDingExtensionFor2017.csproj create mode 100644 VsDingExtensionFor2017/source.extension.vsixmanifest create mode 100644 VsDingExtensionFor2017/speaker2017.ico create mode 100644 VsDingExtensionProject/VsDingExtensionProject.args.json diff --git a/VsDingExtension.sln b/VsDingExtension.sln index e6aab38..34e98b7 100644 --- a/VsDingExtension.sln +++ b/VsDingExtension.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2009 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BD9D4DB-8683-4698-8D24-01EE7306F73A}" ProjectSection(SolutionItems) = preProject @@ -10,32 +10,29 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution UnitTests.testsettings = UnitTests.testsettings EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsDingExtensionProject", "VsDingExtensionProject\VsDingExtensionProject.csproj", "{3BEC1E8B-59C5-439E-AE97-8FF4B3E6B0C1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsDingExtensionFor2012", "VsDingExtensionFor2012\VsDingExtensionFor2012.csproj", "{F37A5870-9786-4196-A3BE-51FEC6155623}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleTestProject", "SampleTestProject\SampleTestProject.csproj", "{3A315AD2-E21E-4FC6-A601-795989A45514}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsDingExtensionFor2017", "VsDingExtensionFor2017\VsDingExtensionFor2017.csproj", "{45953335-41AC-47BB-ACEF-3555FD7F5139}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3BEC1E8B-59C5-439E-AE97-8FF4B3E6B0C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BEC1E8B-59C5-439E-AE97-8FF4B3E6B0C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BEC1E8B-59C5-439E-AE97-8FF4B3E6B0C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BEC1E8B-59C5-439E-AE97-8FF4B3E6B0C1}.Release|Any CPU.Build.0 = Release|Any CPU - {F37A5870-9786-4196-A3BE-51FEC6155623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F37A5870-9786-4196-A3BE-51FEC6155623}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F37A5870-9786-4196-A3BE-51FEC6155623}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F37A5870-9786-4196-A3BE-51FEC6155623}.Release|Any CPU.Build.0 = Release|Any CPU {3A315AD2-E21E-4FC6-A601-795989A45514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3A315AD2-E21E-4FC6-A601-795989A45514}.Debug|Any CPU.Build.0 = Debug|Any CPU {3A315AD2-E21E-4FC6-A601-795989A45514}.Release|Any CPU.ActiveCfg = Release|Any CPU {3A315AD2-E21E-4FC6-A601-795989A45514}.Release|Any CPU.Build.0 = Release|Any CPU + {45953335-41AC-47BB-ACEF-3555FD7F5139}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45953335-41AC-47BB-ACEF-3555FD7F5139}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45953335-41AC-47BB-ACEF-3555FD7F5139}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45953335-41AC-47BB-ACEF-3555FD7F5139}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8F1E1F54-C5F0-477C-90FF-BA5D0C56292D} + EndGlobalSection EndGlobal diff --git a/VsDingExtensionFor2017/Properties/AssemblyInfo.cs b/VsDingExtensionFor2017/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f795072 --- /dev/null +++ b/VsDingExtensionFor2017/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System; +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 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("VsDingExtensionFor2012")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Bing")] +[assembly: AssemblyProduct("VsDingExtensionFor2012")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] +[assembly: CLSCompliant(false)] +[assembly: NeutralResourcesLanguage("en-US")] + +// 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 Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + + + diff --git a/VsDingExtensionFor2017/ReleaseNotes.txt b/VsDingExtensionFor2017/ReleaseNotes.txt new file mode 100644 index 0000000..27cf99b --- /dev/null +++ b/VsDingExtensionFor2017/ReleaseNotes.txt @@ -0,0 +1,4 @@ +Version 1.4: +* Added options dialog (Tools->Options->Ding). Now it is possible to enable/disable what sounds to play. Thanks to https://github.com/dannoh +* Added option to play sounds only if Visual Studio in background. Thanks to https://github.com/dannoh +* Support for Visual studio 2015 diff --git a/VsDingExtensionFor2017/VsDingExtensionFor2017.csproj b/VsDingExtensionFor2017/VsDingExtensionFor2017.csproj new file mode 100644 index 0000000..2965fd5 --- /dev/null +++ b/VsDingExtensionFor2017/VsDingExtensionFor2017.csproj @@ -0,0 +1,219 @@ + + + + 15.0 + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 4.0 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + + ..\VsDingExtensionProject\Resources\speaker.ico + + + + Debug + AnyCPU + 2.0 + {45953335-41AC-47BB-ACEF-3555FD7F5139} + {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + VitaliiGanzha.VsDingExtension + VsDingExtension + True + ..\VsDingExtensionProject\Key.snk + v4.6 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + False + + + True + + + True + + + True + + + + + + + + True + + + + + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.Core.dll + + + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.dll + + + + + + + + + + + + + $(DevEnvDir)\PublicAssemblies\Microsoft.VisualStudio.ComponentModelHost.dll + + + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.Interfaces.dll + + + + + {1CBA492E-7263-47BB-87FE-639000619B15} + 8 + 0 + 0 + primary + False + False + + + {00020430-0000-0000-C000-000000000046} + 2 + 0 + 0 + primary + False + False + + + + + + + OptionsDialog.cs + Component + + + Players.cs + + + + + SingleSoundSelectControl.cs + UserControl + + + SingleSoundSelectControl.Designer.cs + + + SoundSelectControl.cs + UserControl + + + SoundSelectControl.Designer.cs + + + SoundsSelectOptionsPage.cs + Component + + + + WinApiHelper.cs + + + + + + Designer + + + + + + SingleSoundSelectControl.resx + + + SoundSelectControl.resx + + + SoundsSelectOptionsPage.resx + + + + + + + + + Always + true + + + + + Always + true + + + + + False + .NET Framework 3.5 SP1 + false + + + + true + + + + + \ No newline at end of file diff --git a/VsDingExtensionFor2017/source.extension.vsixmanifest b/VsDingExtensionFor2017/source.extension.vsixmanifest new file mode 100644 index 0000000..469cdea --- /dev/null +++ b/VsDingExtensionFor2017/source.extension.vsixmanifest @@ -0,0 +1,36 @@ + + + + + Visual Studio Ding extension for VS 2017 + This small extension will play notification sounds when following events occur: +- Build Complete +- Entering debugger mode (breakpoint hit, etc) +- Unit tests finished to run + +Useful when working with big solutions or when build/test run/hitting a breakpoint takes a lot of time and developer can be distructed on other things while he waits. + +Just install it and it is ready to use! + +This is an open source project, join! + +Twitter: @GanzhaVitalii</Description> + https://github.com/thecoderok/vsdingextension + ReleaseNotes.txt + speaker2017.ico + Productivity + + + + + + + + + + + + + + + diff --git a/VsDingExtensionFor2017/speaker2017.ico b/VsDingExtensionFor2017/speaker2017.ico new file mode 100644 index 0000000000000000000000000000000000000000..f7a34331120fa17b0bf20700baef66bde7425426 GIT binary patch literal 67646 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 // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -19,7 +19,7 @@ namespace VitaliiGanzha.VsDingExtension { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/VsDingExtensionProject/VsDingExtensionProject.args.json b/VsDingExtensionProject/VsDingExtensionProject.args.json new file mode 100644 index 0000000..d9e0a26 --- /dev/null +++ b/VsDingExtensionProject/VsDingExtensionProject.args.json @@ -0,0 +1,8 @@ +{ + "DataCollection": [ + { + "Id": "713ea57a-e182-4345-96c8-e67ff3c88bb8", + "Command": "/rootsuffix Exp" + } + ] +} \ No newline at end of file diff --git a/VsDingExtensionProject/VsDingExtensionProject.csproj b/VsDingExtensionProject/VsDingExtensionProject.csproj index 475afb6..a0b92c3 100644 --- a/VsDingExtensionProject/VsDingExtensionProject.csproj +++ b/VsDingExtensionProject/VsDingExtensionProject.csproj @@ -1,13 +1,18 @@  - 12.0 + 15.0 12.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) Program $(DevEnvDir)\devenv.exe /rootsuffix Exp + + + + + 12.0 speaker.ico diff --git a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs index bdca97d..8d83c93 100644 --- a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs +++ b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs @@ -153,7 +153,7 @@ namespace VitaliiGanzha.VsDingExtension { return true; } - return Options.IsBeepOnlyWhenVisualStudioIsInBackground && !WinApiHelper.ApplicationIsActivated(); + return Options.IsBeepOnlyWhenVisualStudioIsInBackground && !NativeMethods.ApplicationIsActivated(); } private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs) diff --git a/VsDingExtensionProject/WinApiHelper.cs b/VsDingExtensionProject/WinApiHelper.cs index 7663240..a95440c 100644 --- a/VsDingExtensionProject/WinApiHelper.cs +++ b/VsDingExtensionProject/WinApiHelper.cs @@ -4,7 +4,7 @@ namespace VitaliiGanzha.VsDingExtension using System.Diagnostics; using System.Runtime.InteropServices; - public static class WinApiHelper + public static class NativeMethods { [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] private static extern IntPtr GetForegroundWindow();