public TaskbarHelper() { ProgramForm = Program.Form; WindowHandle = ProgramForm.Handle; try { MicrosoftWindowsAPICodePackShell = Assembly.LoadFrom("Microsoft.WindowsAPICodePack.Shell.dll"); Type TaskbarManager = MicrosoftWindowsAPICodePackShell.GetType("Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager"); windowsTaskbar = TaskbarManager.GetProperty("Instance").GetValue(TaskbarManager, null); //windowsTaskbar.ApplicationId = "Transmission Remote Dotnet"; TaskbarManager.GetProperty("ApplicationId").SetValue(windowsTaskbar, "Transmission Remote Dotnet", null); //windowsTaskbar.SetApplicationIdForSpecificWindow(WindowHandle, windowsTaskbar.ApplicationId); MethodInfo SetApplicationIdForSpecificWindow = TaskbarManager.GetMethod("SetApplicationIdForSpecificWindow", new Type[] { WindowHandle.GetType(), typeof(string) }); SetApplicationIdForSpecificWindow.Invoke(windowsTaskbar, new object[] { WindowHandle, TaskbarManager.GetProperty("ApplicationId").GetValue(windowsTaskbar, null) }); iconPause = Icon.FromHandle(Properties.Resources.pause16.GetHicon()); iconPauseAll = Icon.FromHandle(Properties.Resources.player_pause_all.GetHicon()); iconStartAll = Icon.FromHandle(Properties.Resources.player_play_all.GetHicon()); iconAddTorrent = Icon.FromHandle(Properties.Resources.add16.GetHicon()); //buttonStartAll = new ThumbnailToolbarButton(iconStartAll, OtherStrings.StartAll); //buttonPauseAll = new ThumbnailToolbarButton(iconPauseAll, OtherStrings.PauseAll); //buttonAddTorrent = new ThumbnailToolbarButton(iconAddTorrent, OtherStrings.NewTorrentIs); Type ThumbnailToolbarButton = MicrosoftWindowsAPICodePackShell.GetType("Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton"); buttonStartAll = Activator.CreateInstance(ThumbnailToolbarButton, new object[] { iconStartAll, OtherStrings.StartAll }); buttonPauseAll = Activator.CreateInstance(ThumbnailToolbarButton, new object[] { iconPauseAll, OtherStrings.PauseAll }); buttonAddTorrent = Activator.CreateInstance(ThumbnailToolbarButton, new object[] { iconAddTorrent, ProgramForm.AddTorrentString }); SetConnected(false); //buttonStartAll.Click+=new EventHandler<ThumbnailButtonClickedEventArgs>(buttonStartAll_Click); //buttonPauseAll.Click += new EventHandler<ThumbnailButtonClickedEventArgs>(buttonPauseAll_Click); //buttonAddTorrent.Click += new EventHandler<ThumbnailButtonClickedEventArgs>(buttonAddTorrent_Click); Type ThumbnailButtonClickedEventArgs = MicrosoftWindowsAPICodePackShell.GetType("Microsoft.WindowsAPICodePack.Taskbar.ThumbnailButtonClickedEventArgs"); EventInfo ei = ThumbnailToolbarButton.GetEvent("Click"); ei.AddEventHandler(buttonStartAll, Delegate.CreateDelegate(ei.EventHandlerType, null, GetType().GetMethod("buttonStartAll_Click"))); ei.AddEventHandler(buttonPauseAll, Delegate.CreateDelegate(ei.EventHandlerType, null, GetType().GetMethod("buttonPauseAll_Click"))); ei.AddEventHandler(buttonAddTorrent, Delegate.CreateDelegate(ei.EventHandlerType, null, GetType().GetMethod("buttonAddTorrent_Click"))); //windowsTaskbar.ThumbnailToolbars.AddButtons(WindowHandle, buttonStartAll, buttonPauseAll, buttonAddTorrent); object ThumbnailToolbars = TaskbarManager.GetProperty("ThumbnailToolBars").GetValue(windowsTaskbar, null); Type ThumbnailToolBarManager = MicrosoftWindowsAPICodePackShell.GetType("Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarManager"); Type ThumbnailToolbarButtonArray = MicrosoftWindowsAPICodePackShell.GetType("Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton[]"); MethodInfo AddButtons = ThumbnailToolBarManager.GetMethod("AddButtons", new Type[] { WindowHandle.GetType(), ThumbnailToolbarButtonArray }); Array ThumbnailToolbarButtons = Array.CreateInstance(ThumbnailToolbarButton, 3); ThumbnailToolbarButtons.SetValue(buttonStartAll, 0); ThumbnailToolbarButtons.SetValue(buttonPauseAll, 1); ThumbnailToolbarButtons.SetValue(buttonAddTorrent, 2); AddButtons.Invoke(ThumbnailToolbars, new object[] { WindowHandle, ThumbnailToolbarButtons }); } catch (TargetInvocationException) { // this is normal: this is only supported on Windows 7 or newer. } catch (Exception ee) { Console.WriteLine(ee.ToString()); } }
private static void Main(string[] args) { startupTime = DateTime.Now; #if DEBUG // In debug builds we'd prefer to have it dump us into the debugger #else AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.Automatic); Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); #endif culturechanger.ApplyHelp = culturechanger.ApplyText = culturechanger.ApplyToolTip = true; culturechanger.ApplyLocation = culturechanger.ApplySize = false; settings = LocalSettings.TryLoad(); uploadPrompt = settings.UploadPrompt; args = Array.FindAll(args, delegate (string str) { return !str.Equals("/m"); }); Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(settings.Locale, true); #if DOTNET35 using (NamedPipeSingleInstance singleInstance = new TCPSingleInstance(TCP_SINGLE_INSTANCE_PORT)) #else using (TCPSingleInstance singleInstance = new TCPSingleInstance(TCP_SINGLE_INSTANCE_PORT)) #endif { if (singleInstance.IsFirstInstance) { try { ServicePointManager.ServerCertificateValidationCallback = TransmissionWebClient.ValidateServerCertificate; } catch { #if MONO #pragma warning disable 618 ServicePointManager.CertificatePolicy = new PromiscuousCertificatePolicy(); #pragma warning restore 618 #endif } ServicePointManager.Expect100Continue = false; /* Store a list of torrents to upload after connect? */ if (args.Length > 0) { singleInstance.PassArgumentsToFirstInstance(args); } singleInstance.ArgumentsReceived += singleInstance_ArgumentsReceived; SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); form = new MainWindow(); form.Load += new EventHandler(delegate (object sender, EventArgs e) { singleInstance.ListenForArgumentsFromSuccessiveInstances(); }); Application.Run(form); } else { try { singleInstance.PassArgumentsToFirstInstance(args); } catch (Exception ex) { MessageBox.Show(ex.Message, "Unable to communicate with first instance", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }