├── README.md ├── BgInfo ├── Icons │ └── bginfo.ico ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── packages.config ├── GlobalSuppressions.cs ├── Views │ ├── SettingsView.xaml.cs │ ├── BgView.xaml.cs │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── SettingsView.xaml │ └── BgView.xaml ├── App.config ├── Models │ └── Settings.cs ├── App.xaml.cs ├── ViewModels │ ├── DriveInfoViewModel.cs │ ├── TaskbarIconViewModel.cs │ ├── SettingsViewModel.cs │ └── BgViewModel.cs ├── App.xaml ├── WindowUtils.cs ├── app.manifest ├── app1.manifest ├── BgInfoManager.cs ├── NativeMethods.cs └── BgInfo.csproj ├── BgInfo.sln ├── .gitattributes └── .gitignore /README.md: -------------------------------------------------------------------------------- 1 | # BgInfo 2 | 3 | BgInfo is a WPF variant on the Sysinternals BgInfo tool. 4 | -------------------------------------------------------------------------------- /BgInfo/Icons/bginfo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zodiacon/BgInfo/HEAD/BgInfo/Icons/bginfo.ico -------------------------------------------------------------------------------- /BgInfo/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /BgInfo/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /BgInfo/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | 2 | // This file is used by Code Analysis to maintain SuppressMessage 3 | // attributes that are applied to this project. 4 | // Project-level suppressions either have no target or are given 5 | // a specific target and scoped to a namespace, type, member, etc. 6 | 7 | [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Readability", "RCS1018:Add default access modifier.", Justification = "", Scope = "type", Target = "~T:BgInfo.NativeMethods")] 8 | 9 | -------------------------------------------------------------------------------- /BgInfo/Views/SettingsView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Shapes; 14 | 15 | namespace BgInfo.Views { 16 | /// 17 | /// Interaction logic for SettingsView.xaml 18 | /// 19 | public partial class SettingsView : Window { 20 | public SettingsView() { 21 | InitializeComponent(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /BgInfo/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /BgInfo/Views/BgView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Interop; 13 | using System.Windows.Media; 14 | using System.Windows.Media.Imaging; 15 | using System.Windows.Shapes; 16 | 17 | namespace BgInfo.Views { 18 | /// 19 | /// Interaction logic for BgView.xaml 20 | /// 21 | public partial class BgView { 22 | public BgView() { 23 | InitializeComponent(); 24 | 25 | } 26 | 27 | private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { 28 | e.Cancel = true; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /BgInfo/Views/MainView.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /BgInfo/Models/Settings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Media; 7 | using Prism.Mvvm; 8 | 9 | namespace BgInfo.Models { 10 | public class Settings : BindableBase { 11 | private string _fontFamily = "Arial"; 12 | 13 | public string FontFamily { 14 | get { return _fontFamily; } 15 | set { SetProperty(ref _fontFamily, value); } 16 | } 17 | 18 | private int _fontSize = 14; 19 | 20 | public int FontSize { 21 | get { return _fontSize; } 22 | set { SetProperty(ref _fontSize, value); } 23 | } 24 | 25 | private Brush _textColor = Brushes.White; 26 | 27 | public Brush TextColor { 28 | get { return _textColor; } 29 | set { SetProperty(ref _textColor, value); } 30 | } 31 | 32 | public int IntervalSeconds { get; set; } = 60; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /BgInfo/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.Composition.Hosting; 4 | using System.Configuration; 5 | using System.Data; 6 | using System.Diagnostics; 7 | using System.Linq; 8 | using System.Reflection; 9 | using System.Threading; 10 | using System.Threading.Tasks; 11 | using System.Windows; 12 | using Zodiacon.WPF; 13 | 14 | namespace BgInfo 15 | { 16 | /// 17 | /// Interaction logic for App.xaml 18 | /// 19 | public partial class App : Application 20 | { 21 | Mutex _oneInstanceMutex; 22 | 23 | BgInfoManager _mgr; 24 | 25 | protected override void OnStartup(StartupEventArgs e) 26 | { 27 | base.OnStartup(e); 28 | 29 | bool createNew; 30 | _oneInstanceMutex = new Mutex(false, "BgInfo_OneInstanceMutex", out createNew); 31 | if(!createNew) { 32 | Shutdown(); 33 | return; 34 | } 35 | 36 | _mgr = new BgInfoManager(); 37 | _mgr.CreateWindows(); 38 | _mgr.InitTray(); 39 | } 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /BgInfo.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BgInfo", "BgInfo\BgInfo.csproj", "{CCB5FDB8-D8C6-42C6-8340-508137AFC8F8}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {CCB5FDB8-D8C6-42C6-8340-508137AFC8F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {CCB5FDB8-D8C6-42C6-8340-508137AFC8F8}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {CCB5FDB8-D8C6-42C6-8340-508137AFC8F8}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {CCB5FDB8-D8C6-42C6-8340-508137AFC8F8}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /BgInfo/ViewModels/DriveInfoViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Prism.Mvvm; 3 | 4 | namespace BgInfo.ViewModels { 5 | class DriveInfoViewModel : BindableBase { 6 | public DriveInfo DriveInfo { get; } 7 | public DriveInfoViewModel(DriveInfo driveInfo) { 8 | DriveInfo = driveInfo; 9 | } 10 | 11 | public string Name => DriveInfo.Name; 12 | public string TotalSize 13 | { 14 | get 15 | { 16 | if (!DriveInfo.IsReady) 17 | return "Drive Not Ready"; 18 | return GetSize(DriveInfo.TotalSize); 19 | } 20 | } 21 | 22 | public string FreeSpace 23 | { 24 | get 25 | { 26 | if (!DriveInfo.IsReady) 27 | return "Drive Not Ready"; 28 | return GetSize(DriveInfo.TotalFreeSpace); 29 | } 30 | } 31 | 32 | private string GetSize(long size) { 33 | if(size > 1 << 30) 34 | return $"{size >> 30} GB"; 35 | return $"{size >> 20} MB"; 36 | } 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /BgInfo/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BgInfo.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /BgInfo/App.xaml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /BgInfo/ViewModels/TaskbarIconViewModel.cs: -------------------------------------------------------------------------------- 1 | using Prism.Commands; 2 | using Prism.Mvvm; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows; 9 | using System.Windows.Input; 10 | using Zodiacon.WPF; 11 | using System.ComponentModel.Composition; 12 | using BgInfo.Views; 13 | 14 | namespace BgInfo.ViewModels { 15 | sealed class TaskbarIconViewModel : BindableBase { 16 | readonly BgInfoManager _mgr; 17 | readonly IUIServices UI; 18 | 19 | public TaskbarIconViewModel(BgInfoManager mgr, IUIServices ui) { 20 | _mgr = mgr; 21 | UI = ui; 22 | ExitCommand = new DelegateCommand(() => Application.Current.Shutdown()); 23 | 24 | SettingsCommand = new DelegateCommand(() => { 25 | _mgr.EnableTray(false); 26 | var vm = UI.DialogService.CreateDialog(_mgr.Settings); 27 | if(vm.ShowDialog() == true) { 28 | // apply changes 29 | mgr.ApplySettings(vm); 30 | } 31 | 32 | _mgr.EnableTray(true); 33 | }); 34 | 35 | RefreshCommand = new DelegateCommand(() => _mgr.Refresh()); 36 | 37 | AboutCommand = new DelegateCommand(() => { 38 | _mgr.EnableTray(false); 39 | MessageBox.Show(Application.Current.MainWindow, "BgInfo (WPF Style) by Pavel Yosifovich (C)2016-2018", "About BgInfo"); 40 | _mgr.EnableTray(true); 41 | }); 42 | } 43 | 44 | 45 | public ICommand ExitCommand { get; } 46 | public ICommand SettingsCommand { get; } 47 | public ICommand RefreshCommand { get; } 48 | public ICommand AboutCommand { get; } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /BgInfo/WindowUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using static BgInfo.NativeMethods; 3 | 4 | namespace BgInfo 5 | { 6 | public static class WindowUtils 7 | { 8 | public static void SetCommonStyles(IntPtr hwnd) 9 | { 10 | SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE); 11 | SetWindowPos(hwnd, new IntPtr(HWND_BOTTOM), 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); 12 | } 13 | 14 | public static void ShowAlwaysOnDesktop(IntPtr hwnd) 15 | { 16 | var progmanHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null); 17 | var workerWHandle = IntPtr.Zero; 18 | EnumWindows(new EnumWindowsProc((topHandle, topParamHandle) => 19 | { 20 | IntPtr shellHandle = FindWindowEx(topHandle, IntPtr.Zero, "SHELLDLL_DefView", null); 21 | if (shellHandle != IntPtr.Zero) 22 | { 23 | workerWHandle = FindWindowEx(IntPtr.Zero, topHandle, "WorkerW", null); 24 | } 25 | return true; 26 | }), IntPtr.Zero); 27 | workerWHandle = workerWHandle == IntPtr.Zero ? progmanHandle : workerWHandle; 28 | SetParent(hwnd, workerWHandle); 29 | } 30 | 31 | /// 32 | /// Special hack from https://www.codeproject.com/Articles/856020/Draw-behind-Desktop-Icons-in-Windows 33 | /// Send 0x052C to Progman. This message directs Progman to spawn a 34 | /// WorkerW behind the desktop icons. If it is already there, nothing 35 | /// happens. 36 | /// 37 | public static void ShowBehindDesktopIcons(IntPtr hwnd) 38 | { 39 | var progmanHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null); 40 | SendMessage(progmanHandle, 0x052C, 0x0000000D, 0); 41 | SendMessage(progmanHandle, 0x052C, 0x0000000D, 1); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /BgInfo/ViewModels/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Media; 8 | using BgInfo.Models; 9 | using Prism.Mvvm; 10 | using Zodiacon.WPF; 11 | 12 | namespace BgInfo.ViewModels { 13 | sealed class SettingsViewModel : DialogViewModelBase { 14 | readonly Settings _settings; 15 | 16 | public SettingsViewModel(Window dialog, Settings settings) : base(dialog) { 17 | _settings = settings; 18 | 19 | _selectedFont = new FontFamily(settings.FontFamily); 20 | _textColor = ((SolidColorBrush)settings.TextColor).Color; 21 | _selectedFontSize = settings.FontSize; 22 | _selectedInterval = TimeSpan.FromSeconds(settings.IntervalSeconds); 23 | } 24 | 25 | private FontFamily _selectedFont; 26 | 27 | public FontFamily SelectedFont { 28 | get { return _selectedFont; } 29 | set { SetProperty(ref _selectedFont, value); } 30 | } 31 | 32 | private Color _textColor; 33 | 34 | public Color TextColor { 35 | get { return _textColor; } 36 | set { SetProperty(ref _textColor, value); } 37 | } 38 | 39 | public IEnumerable SystemFonts => Fonts.SystemFontFamilies.OrderBy(font => font.Source); 40 | 41 | public IEnumerable FontSizes => new[] { 8, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 40 }; 42 | 43 | private int _selectedFontSize; 44 | 45 | public int SelectedFontSize { 46 | get { return _selectedFontSize; } 47 | set { SetProperty(ref _selectedFontSize, value); } 48 | } 49 | 50 | public IEnumerable RefreshIntervals => new[] { 10, 20, 30, 60, 120, 300, 600, 1800, 3600, 7200, 14400, 24 * 3600 }.Select(i => TimeSpan.FromSeconds(i)); 51 | 52 | private TimeSpan _selectedInterval; 53 | 54 | public TimeSpan SelectedInterval { 55 | get { return _selectedInterval; } 56 | set { SetProperty(ref _selectedInterval, value); } 57 | } 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /BgInfo/Views/MainView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Interop; 13 | using System.Windows.Media; 14 | using System.Windows.Media.Imaging; 15 | using System.Windows.Shapes; 16 | using static BgInfo.NativeMethods; 17 | 18 | namespace BgInfo.Views { 19 | /// 20 | /// Interaction logic for MainView.xaml 21 | /// 22 | public partial class MainView : Window { 23 | public MainView() { 24 | InitializeComponent(); 25 | 26 | Loaded += delegate { 27 | var handle = new WindowInteropHelper(this).Handle; 28 | WindowUtils.SetCommonStyles(handle); 29 | WindowUtils.ShowAlwaysOnDesktop(handle); 30 | 31 | if (Environment.OSVersion.Version.Major >= 10) 32 | { 33 | WindowUtils.ShowBehindDesktopIcons(handle); 34 | } 35 | 36 | var wndSource = HwndSource.FromHwnd(handle); 37 | wndSource.AddHook(WindowProc); 38 | }; 39 | } 40 | unsafe IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { 41 | switch (msg) { 42 | case WM_WINDOWPOSCHANGING: 43 | var windowPos = Marshal.PtrToStructure(lParam); 44 | windowPos.hwndInsertAfter = new IntPtr(HWND_BOTTOM); 45 | windowPos.flags &= ~(uint)SWP_NOZORDER; 46 | handled = true; 47 | break; 48 | 49 | case WM_DPICHANGED: 50 | var handle = new WindowInteropHelper(this).Handle; 51 | var rc = (RECT*)lParam.ToPointer(); 52 | SetWindowPos(handle, IntPtr.Zero, 0, 0, rc->Right, rc->Left, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER); 53 | break; 54 | 55 | } 56 | return IntPtr.Zero; 57 | } 58 | 59 | private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { 60 | e.Cancel = true; 61 | } 62 | 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /BgInfo/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("BgInfo")] 11 | [assembly: AssemblyDescription("")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("")] 14 | [assembly: AssemblyProduct("BgInfo")] 15 | [assembly: AssemblyCopyright("Copyright © 2016")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.0.0.0")] 55 | [assembly: AssemblyFileVersion("1.0.0.0")] 56 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /BgInfo/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BgInfo.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BgInfo.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /BgInfo/Views/SettingsView.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 53 | 54 | 55 |