diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a3084f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,329 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from httpsgithub.comgithubgitignoreblobmasterVisualStudio.gitignore + +# User-specific files +.suo +.user +.userosscache +.sln.docstates + +# User-specific files (MonoDevelopXamarin Studio) +.userprefs + +# Build results +[Dd]ebug +[Dd]ebugPublic +[Rr]elease +[Rr]eleases +x64 +x86 +bld +[Bb]in +[Oo]bj +[Ll]og + +# Visual Studio 20152017 cacheoptions 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 + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +_i.c +_p.c +_i.h +.ilk +.meta +.obj +.iobj +.pch +.pdb +.ipdb +.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 +!.axoCoversettings.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 +DocProjectbuildhelp +DocProjectHelp.HxT +DocProjectHelp.HxC +DocProjectHelp.hhc +DocProjectHelp.hhk +DocProjectHelp.hhp +DocProjectHelpHtml2 +DocProjectHelphtml + +# 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]ackagesbuild +# Uncomment if necessary however generally it will be regenerated when needed +#![Pp]ackagesrepositories.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 +# (httpsgithub.comgithubgitignorepull2483#issue-259490424) +#.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (httpsgithub.comgithubgitignorepull1529#issuecomment-104372622) +#bower_components + +# RIASilverlight 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 +.rptproj.bak + +# 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 +.HTMLClientGeneratedArtifacts +.DesktopClientGeneratedArtifacts +.DesktopClientModelManifest.xml +.ServerGeneratedArtifacts +.ServerModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paketpaket.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 +# !toolspackages.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 + +# MFractors (Xamarin productivity tool) working folder +.mfractor \ No newline at end of file diff --git a/DeviceManager.sln b/DeviceManager.sln new file mode 100644 index 0000000..5aaad8b --- /dev/null +++ b/DeviceManager.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2042 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceManager", "DeviceManager\DeviceManager.csproj", "{850BB359-F318-4DFB-B2C2-E5DB2A480CA3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {850BB359-F318-4DFB-B2C2-E5DB2A480CA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {850BB359-F318-4DFB-B2C2-E5DB2A480CA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {850BB359-F318-4DFB-B2C2-E5DB2A480CA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {850BB359-F318-4DFB-B2C2-E5DB2A480CA3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {96F03BF7-0CAE-4148-AB0A-FB5C2FF969E0} + EndGlobalSection +EndGlobal diff --git a/DeviceManager/App.config b/DeviceManager/App.config new file mode 100644 index 0000000..6ac57c1 --- /dev/null +++ b/DeviceManager/App.config @@ -0,0 +1,19 @@ + + + + +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/DeviceManager/DeviceManager.csproj b/DeviceManager/DeviceManager.csproj new file mode 100644 index 0000000..693683e --- /dev/null +++ b/DeviceManager/DeviceManager.csproj @@ -0,0 +1,111 @@ + + + + + Debug + AnyCPU + {850BB359-F318-4DFB-B2C2-E5DB2A480CA3} + WinExe + DeviceManager + DeviceManager + v4.7.1 + 512 + true + + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + Resources\TrayIcon.ico + + + + ..\packages\Costura.Fody.3.1.0\lib\net46\Costura.dll + + + ..\packages\SharpAdbClient.2.2.9\lib\net451\SharpAdbClient.dll + + + + + + + + + + + + + + + + + + True + True + Resource.resx + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ResXFileCodeGenerator + Resource.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + Designer + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/DeviceManager/FodyWeavers.xml b/DeviceManager/FodyWeavers.xml new file mode 100644 index 0000000..e992cfc --- /dev/null +++ b/DeviceManager/FodyWeavers.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/DeviceManager/Program.cs b/DeviceManager/Program.cs new file mode 100644 index 0000000..07d0264 --- /dev/null +++ b/DeviceManager/Program.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows.Forms; +using DeviceManager.Properties; +using SharpAdbClient; + +namespace DeviceManager +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + RestoreConfig(); + SetScrPath(); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + var menu = new ContextMenu(); + + menu.Popup += (sender, args) => + { + var client = new SharpAdbClient.AdbClient(); + var devices = client.GetDevices(); + + menu.MenuItems.Clear(); + + menu.MenuItems.Add(new MenuItem("Set srccpy path", (o, eventArgs) => { ChooseScrPath(); })); + + if (CanViewDevices()) + { + var viewMenu = devices.Select(device => + new MenuItem(device.Model, (o, eventArgs) => { ViewDevice(device); })) + .ToArray(); + + menu.MenuItems.Add(new MenuItem("View", viewMenu)); + } + + var restartMenu = devices.Select(device => new MenuItem(device.Model, + (o, eventArgs) => { RestartAction(client, device); })).ToArray(); + + menu.MenuItems.Add(new MenuItem("Restart", restartMenu)); + + menu.MenuItems.Add(new MenuItem("Exit", (o, eventArgs) => { Application.Exit(); })); + + }; + // Show the system tray icon. + using (var pi = new ProcessIcon(menu)) + { + pi.Display(); + + // Make sure the application runs! + Application.Run(); + } + } + + private static void SetScrPath() + { + if (File.Exists("scrcpy-noconsole.exe") && string.IsNullOrEmpty(Settings.Default.ScrCpyPath)) + { + Settings.Default.ScrCpyPath = Directory.GetCurrentDirectory(); + Settings.Default.Save(); + } + } + + private static void RestartAction(AdbClient client, DeviceData device) + { + client.Reboot("device", device); + + Task.Factory.StartNew(async () => + { + while (true) + { + await Task.Delay(TimeSpan.FromSeconds(1)); + var targetDevice = client.GetDevices().SingleOrDefault(d => d.Serial == device.Serial); + + if (targetDevice != null && targetDevice.State == DeviceState.Online) + { + await Task.Delay(TimeSpan.FromSeconds(5)); + ViewDevice(targetDevice); + return; + } + } + }); + } + + private static void ChooseScrPath() + { + using (var fbd = new FolderBrowserDialog()) + { + if (!string.IsNullOrEmpty(Settings.Default.ScrCpyPath)) + { + fbd.SelectedPath = Settings.Default.ScrCpyPath; + } + + DialogResult result = fbd.ShowDialog(); + + if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) + { + if (File.Exists(Path.Combine(fbd.SelectedPath, "scrcpy-noconsole.exe"))) + { + Settings.Default.ScrCpyPath = fbd.SelectedPath; + Settings.Default.Save(); + } + } + } + } + + private static bool CanViewDevices() + { + var scr = Path.Combine(Settings.Default.ScrCpyPath, "scrcpy-noconsole.exe"); + return File.Exists(scr); + } + + private static void ViewDevice(DeviceData device) + { + var scr = Path.Combine(Settings.Default.ScrCpyPath, "scrcpy-noconsole.exe"); + var processStartInfo = new ProcessStartInfo(scr, "-t -s " + device.Serial) + { + UseShellExecute = false, + WorkingDirectory = Settings.Default.ScrCpyPath + }; + + Process.Start(processStartInfo); + } + + private static void RestoreConfig() + { + var config = Application.ExecutablePath + ".config"; + if (File.Exists(config)) return; + + var assembly = Assembly.GetExecutingAssembly(); + var resourceName = "DeviceManager.App.config"; + + using (Stream stream = assembly.GetManifestResourceStream(resourceName)) + { + if (stream == null) return; + + using (var file = File.Create(config)) + { + stream.CopyTo(file); + } + } + } + } + + public class ProcessIcon : IDisposable + { + public NotifyIcon Icon { get; set; } + + public ProcessIcon(ContextMenu menuStrip) + { + Icon = new NotifyIcon + { + Icon = Resource.TrayIcon, + ContextMenu = menuStrip + }; + } + + public void Display() + { + Icon.Text = @"Android device manager"; + Icon.Visible = true; + } + + public void Dispose() + { + Icon.Dispose(); + } + } +} diff --git a/DeviceManager/Properties/AssemblyInfo.cs b/DeviceManager/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ca3f409 --- /dev/null +++ b/DeviceManager/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +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("DeviceManager")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DeviceManager")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[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("850bb359-f318-4dfb-b2c2-e5db2a480ca3")] + +// 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.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DeviceManager/Properties/Resources.Designer.cs b/DeviceManager/Properties/Resources.Designer.cs new file mode 100644 index 0000000..17c356c --- /dev/null +++ b/DeviceManager/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace DeviceManager.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // 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", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DeviceManager.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIcon { + get { + object obj = ResourceManager.GetObject("TrayIcon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/DeviceManager/Properties/Resources.resx b/DeviceManager/Properties/Resources.resx new file mode 100644 index 0000000..da81c92 --- /dev/null +++ b/DeviceManager/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\resources\trayicon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DeviceManager/Properties/Settings.Designer.cs b/DeviceManager/Properties/Settings.Designer.cs new file mode 100644 index 0000000..95e7473 --- /dev/null +++ b/DeviceManager/Properties/Settings.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace DeviceManager.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ScrCpyPath { + get { + return ((string)(this["ScrCpyPath"])); + } + set { + this["ScrCpyPath"] = value; + } + } + } +} diff --git a/DeviceManager/Properties/Settings.settings b/DeviceManager/Properties/Settings.settings new file mode 100644 index 0000000..e3941d7 --- /dev/null +++ b/DeviceManager/Properties/Settings.settings @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/DeviceManager/Resource.Designer.cs b/DeviceManager/Resource.Designer.cs new file mode 100644 index 0000000..0274564 --- /dev/null +++ b/DeviceManager/Resource.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace DeviceManager { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // 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", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resource { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resource() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DeviceManager.Resource", typeof(Resource).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIcon { + get { + object obj = ResourceManager.GetObject("TrayIcon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/DeviceManager/Resource.resx b/DeviceManager/Resource.resx new file mode 100644 index 0000000..092eae4 --- /dev/null +++ b/DeviceManager/Resource.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resources\TrayIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/DeviceManager/Resources/TrayIcon.ico b/DeviceManager/Resources/TrayIcon.ico new file mode 100644 index 0000000..c476d7f Binary files /dev/null and b/DeviceManager/Resources/TrayIcon.ico differ diff --git a/DeviceManager/packages.config b/DeviceManager/packages.config new file mode 100644 index 0000000..84df6c6 --- /dev/null +++ b/DeviceManager/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file