44

In Visual Studio 2015 RC, there was that Feedback smiley in the upper right of the main window.

Unfortunately, it is still there in the final release of Visual Studio 2015:

enter image description here

I've searched all through the options and settings and found no way to hide this smiley.

My question:

Any option or other (Registry etc.) hack to remove the smiley?

Update 2015-12-01:

Yesterday Update 1 for Visual Studio was released.

While I still find no option to hide the smiley, they at least provided a less distracting icon for it:

enter image description here

Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
  • 7
    I think you should send them a frown. Did you try a clean install or did you upgrade over RC? Perhaps the smiley appears due to a leftover setting, or you may have to deny participation to the Improvement program from the smiley's settings – Panagiotis Kanavos Jul 21 '15 at 07:05
  • 6
    Its a major bug, apparently it will hold back the final release for at least 10 months – cstruter Jul 21 '15 at 07:20
  • Thank you, guys. Actually, if there was a `low-priority` tag here on SO, I clearly would have used it. – Uwe Keim Jul 21 '15 at 07:35
  • 2
    Maybe this helps http://www.aidanjryan.com/blog/2013/07/01/hide-the-send-feedback-smile-in-vs2013/. But its for VS 2013 – Jehof Jul 21 '15 at 09:00
  • 3
    I just sent them a frown about not being able to hide it (or at least have it be a color that contrasts less with dark theme). Hopefully they'll get tons of those and change it at some stage. – FlintZA Aug 05 '15 at 15:39
  • 2
    @flintza I'm sending a frown every day. – Uwe Keim Aug 05 '15 at 15:49
  • 1
    Why does everyone dislike the smiley face? For my part, I kind of like the added 16 square pixels of cheer. – Roy Tinker Aug 25 '15 at 00:10
  • 1
    You can try voting on this [UserVoice suggestion](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/9566724-i-have-one-request-please-allow-the-removal-of). – Vlad Iliescu Oct 13 '15 at 09:07

6 Answers6

21

Edit:

Visual Studio 2015 Update 1 changes the feedback icon to an understated black and white one so no more smiley! It's not mentioned in the release notes.

enter image description here

Original answer:

As in OPs answer, this icon is specified in this registry key:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}

if you delete the key, Visual Studio recreates it, but if you invalidate the "Package" value of the registry key and restart Visual Studio then the smiley icon is gone:

enter image description here

However, when you install a Visual Studio update (eg SSDT, Resharper) the installer restores the package value, and the smiley is back. So I have created a registry file like this to run when the smiley reappears:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}]
@="Feedback Button"
"Package"="{00000000-AA51-43B1-97EE-509A33B681F3}"
"DisplayName"="#1001"
"ViewFactory"="{060EAB95-139E-407D-BEDC-CC2B7A9B39D4}"
"ViewId"=dword:00000064
"Alignment"="TitleBarRight"
"Sort"=dword:00000064
"FullScreenAlignment"="MenuBarRight"
"FullScreenSort"=dword:00000064

This doesn't seem to affect startup time or stability, but there are no guarantees, registry changes are bad mmm, etc.

stuartd
  • 70,509
  • 14
  • 132
  • 163
  • Same here, Smiley is back again. Maybe removing all permissions from the Registry key might help? – Uwe Keim Jul 28 '15 at 14:14
  • 1
    Yes, I updated Resharper today and it came back *again*. I'm not sure removing permissions will work, I tried that before, and when Visual Studio detected it couldn't write to that key, it spawned a new (temporary?) version of 14.0_Config to use. – stuartd Jul 28 '15 at 15:32
  • 6
    Seems that most development time of entire Visual Studio was dedicated to the smiley feature. Thanks Obama, thanks Microsoft! – Uwe Keim Jul 28 '15 at 16:12
10

Thanks to Jehof's hint for Visual Studio 2013, I was able to resolve this:

Deleting the following Registry key actually helped.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}

(Please note the 14.0 instead of the 12.0 in the linked blog post)

enter image description here

After restarting Visual Studio, the Feedback button is now gone.

Update one day later

Suddenly the Feedback icon is here again. And the registry key is here again, too.

How on earth can this happen?

Seems the smiley resurrected from its grave. I'm really frightened now…

Community
  • 1
  • 1
Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
  • 2
    This works, and hopefully it sticks. Don't let the sarcastic comments discourage you. Considering the number of upvotes in such a short time, my bet is a lot of people silently appreciate this tip. – GravityWell Jul 22 '15 at 03:17
  • 1
    try to use ProcessMonitor to see what application creates the registry key – Jehof Jul 22 '15 at 12:12
  • 1
    I have the same problem, and when using the dark scheme this childish icon sticks out like a sore thumb. So I've removed write access to the whole key (MainWindowFrameControls) for everybody, let's see if that fixes it permanently. – stuartd Jul 22 '15 at 14:02
  • 1
    @stuartd did you refresh the Registry Editor's view? – Uwe Keim Jul 22 '15 at 14:25
  • 1
    @UweKeim when Visual Studio detected it couldn't write to that key, it spawned a new (temporary?) version of 14.0_Config and the key had been recreated in that new "branch" of the key which VS was using, that's why I couldn't see it. – stuartd Jul 24 '15 at 23:31
5

Following the advice in this thread, I modified also the registry key and it worked at first, but VS2015 keeps recreating the key to its original value after a while.

To remedy that, I added a VS2015 shortcut in Taskbar, and then Shift+Right Click to access 'Properties'. Replace the Target path of the shortcut pointing to devenv.exe with a own local c:\tools\vs.bat file.

Additionally, I changed Run to 'Minimized' in the shortcut properties. The vs.bat looks as follows:

@echo off
reg ADD HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07} /v Package /t REG_SZ /d {00000000-AA51-43B1-97EE-509A33B681F3} /f 2> nul
start /B devenv.exe

This ensures the key is overwritten every time I start VS2015 via Taskbar shourtcut. I found this to be reliably working for me.

If you ever start VS without this (e.g., on a VS restart), you may need to run the above twice.

  • Cool idea :-) I'll try that, too. – Uwe Keim Jul 31 '15 at 06:58
  • Now if I could just disable / uninstall / revert all of the other incredibly stupid and annoying (air quotes) features (end air quotes) in Visual Studio 2015 and Windows 10 I'd be a *very* happy camper... – jerhewet Sep 02 '15 at 16:32
2

I have removed value of Alignment key (just left it empty). The icon has gone until now but I didn't install no updates yet. Will keep posting.

UPDATE Restoring VS2015 not only restored this button but also changed the way it is configured: now my method doesn't work. Moreover, removing the registry key no longer helps. Wrote to MS through this helpful tool.

vzayko
  • 337
  • 2
  • 11
2

The Visual Commander extension allows creation of extensions which can hook into events. One provided example is hiding the feedback icon.

// References: System.Xaml 
public class E : VisualCommanderExt.IExtension
{
    public void SetSite(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
    {
        timer = new System.Windows.Threading.DispatcherTimer();
        timer.Interval = System.TimeSpan.FromMilliseconds(1000);
        timer.Tick += OnTimer;
        timer.Start();
    }
    public void Close()
    {
        timer.Stop();
    }
    private void OnTimer(System.Object o, System.EventArgs a)
    {
        try
        {
            if (HideSignIn() && HideFeedback())
                ;
        }
        catch (System.Exception e)
        {
        }
    }
    private bool HideSignIn()
    {
        System.Windows.FrameworkElement e = 
            FindElement(System.Windows.Application.Current.MainWindow, 
                "PART_MenuBarFrameControlContainer");
        if (e != null)
        {
            e.Visibility = System.Windows.Visibility.Collapsed;
            return true;
        }
        return false;
    }
    private bool HideFeedback()
    {   
        System.Windows.FrameworkElement e = 
            FindElement(System.Windows.Application.Current.MainWindow, 
                "PART_TitleBarFrameControlContainer");
        if (e != null)
        {
            System.Windows.DependencyObject o1 = 
                System.Windows.Media.VisualTreeHelper.GetChild(e, 0);
            System.Windows.DependencyObject o2 = 
                System.Windows.Media.VisualTreeHelper.GetChild(o1, 0);
            System.Windows.DependencyObject o3 = 
                System.Windows.Media.VisualTreeHelper.GetChild(o2, 0);
            if (System.Windows.Media.VisualTreeHelper.GetChildrenCount(o3) == 3)
            {
                System.Windows.DependencyObject o4 = 
                    System.Windows.Media.VisualTreeHelper.GetChild(o3, 1);
                (o4 as System.Windows.FrameworkElement).Visibility = 
                    System.Windows.Visibility.Collapsed;
                return true;
            }
        }
        return false;
    }
    private System.Windows.FrameworkElement FindElement(System.Windows.Media.Visual v, string name)
    {
        if (v == null)
            return null;
        for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(v); ++i)
        {
            System.Windows.Media.Visual child = 
                System.Windows.Media.VisualTreeHelper.GetChild(v, i) as
                    System.Windows.Media.Visual;
            if (child != null)
            {
                System.Windows.FrameworkElement e = 
                    child as System.Windows.FrameworkElement;
                if (e != null && e.Name == name)
                    return e;
            }
            System.Windows.FrameworkElement result = FindElement(child, name);
            if (result != null)
                return result;
        }
        return null;
    }
    private System.Windows.Threading.DispatcherTimer timer;
}

Although, comparing this example with the hide publish button example it seems the OnTimer function should stop the timer once the icons have been hidden.

private void OnTimer(System.Object o, System.EventArgs a)
{
    try
    {
        if (HideSignIn() && HideFeedback())
            timer.Stop();

    }
    catch (System.Exception e)
    {
    }
}
chris
  • 2,740
  • 3
  • 25
  • 23
  • Are those silently-exception-eating catch blocks really necessary? – Uwe Keim Apr 19 '16 at 20:03
  • 1
    I don't know. I started using the extension just today and left them in. If an exception were to occur I don't know how it would impact VS. I suppose one could remove them and intentionally throw an exception to find out what happens. If there isn't any ill effects then perhaps they would be safe to leave out. – chris Apr 20 '16 at 04:29
1

This line of PowerShell removes the icon until an update is installed:

 Set-ItemProperty -Path "HKCU:\Software\Microsoft\VisualStudio\14.0_Config\MainWindowFrameControls\{F66FBC48-9AE4-41DC-B1AF-0D64F0F54A07}" Package "{00000000-AA51-43B1-97EE-509A33B681F3}"
Bjørn Madsen
  • 378
  • 2
  • 17