修改 Visual Studio 中“解决方案资源管理器”的背景色

58

是否有任何方法可以使用主题(Theme)或其他方式更改Visual Studio中“解决方案资源管理器”(Solution Explorer)的背景颜色?

我可以通过更改整个Windows系统的颜色设置来更改它,但显然这会影响太多了。

5个回答

35

我在不到一小时的时间内创建了VS扩展,搜索扩展管理器中的"SExColor"即可使用。享受吧;)


12
你能指引我们找到源代码吗?这个项目是否在 GitHub 上?我问这个问题是因为我想要实现与“服务器资源管理器”、“待办事项资源管理器”、“属性”、“错误列表”和“宏资源管理器”相同的结果。 - Chase Florell
2
啊!安装在VS2010中,把我的整个解决方案资源管理器都清空了。正在卸载。 - Dr. Andrew Burnett-Thompson
2
当尝试打开新解决方案时,Visual Studio 会随机锁定,并且日志显示是在尝试加载您的程序包时发生的。卸载后,一切都恢复正常。 - Jamie Penney
2
你已经适应2012年了吗? :) - NickG
1
安装完成后,转到“工具|选项|SExColor”。 - Roger Dahl
显示剩余4条评论

10

@aloneguid ...我应该早就看到这个了..谢谢您先生!

@ver(关于VS 2008解决方案的问题;)- 一种B52式的方法,在devenv.exe内部对所有SysTreeView32进行地毯式打击。可能需要额外的参数来指定所需颜色,否则RGB(220,220,220)-对我最有效的效果。

#include <windows.h>
#include "psapi.h"
#include "shlwapi.h"
#include "commctrl.h"


COLORREF clr = RGB(220,220,220);

BOOL CALLBACK wenum( HWND hwnd, LPARAM lParam)
{
   const UINT cb = 261;
   static wchar_t    name[] = L"SysTreeView32",
                     tmp[cb] = {0};
   if( ::GetClassNameW( hwnd, tmp, 260 ) && 0 == _wcsicmp( name, tmp ) )
   {
      ::SendMessageW( hwnd, TVM_SETBKCOLOR, 0, (LPARAM)clr );
   }

   return TRUE;
}

BOOL CALLBACK EnumTops(HWND hwnd, LPARAM lParam) 
{
    DWORD             dwThreadId  = 0, 
                     dwProcessId = 0;
    HINSTANCE         hInstance;
   static wchar_t derVS[]     = L"devenv.exe";
   wchar_t  name[_MAX_PATH]   = {0},
            *exe              = 0;

    HANDLE hProcess;
   if (!hwnd)  return TRUE;     // Not a window
   if (!::IsWindowVisible(hwnd)) return TRUE;       // Not visible

   if (!SendMessage(hwnd, WM_GETTEXT, sizeof(name), (LPARAM)name))
      return TRUE;      // No window title
   dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
   hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
   if( !GetModuleFileNameEx(hProcess, 0, name, sizeof(name))) goto exit;

   exe = ::PathFindFileNameW( name );
   if( (void*)exe == (void*)name ) goto exit; // mhm? maybe not exit?

   if( _wcsicmp( derVS, exe ) ) goto exit;

   EnumChildWindows( hwnd, wenum, (LPARAM)hProcess );

exit:
   CloseHandle(hProcess);
   int res = GetLastError();
   return res;
}

int wmain(int argc, wchar_t * argv[]) 
{
   if( argc >= 2 )
   {
      wchar_t *end = 0;
      long l = wcstol( argv[1], &end, 16 );
      clr = (DWORD)l;
   }
   ::EnumWindows(EnumTops, NULL);
   return 0;
}

奇怪的是,这只适用于解决方案资源管理器和服务器资源管理器,但不适用于类视图。 - Tae-Sung Shin

4
即使更改标准的Windows背景颜色,也无法为“解决方案资源管理器”生效。这篇Visual Studio 错误报告提到了这个问题。微软已将其标记为“已关闭--不会修复”。
这非常令人恼火!使用深色主题并在屏幕侧面挂着明亮的白色“解决方案资源管理器”非常烦人。
一个可能的解决方案是根本不使用“解决方案资源管理器”。Productivity Power Tools提供了一个名为“解决方案导航器”的“解决方案资源管理器”替代品。它目前也是硬编码为白色。但我认为,与让Microsoft在Visual Studio中进行修改相比,让该工具的开发人员添加支持修改颜色的功能的机会可能更大。(尽管Microsoft创建了PPTs。)

4

并非通过 Visual Studio 本身的配置进行。

不过您可以从 Win32 API 中“黑客”窗口对象(查找“窗口枚举”)。一旦您拥有窗口句柄,就可以设置所需的所有特性。

祝好

/Robert


我希望我能做到那样。否则就没有必要使用暮光主题 :-( - Stephan
有没有办法在VS 2010中完成这个任务? - Patrick Desjardins
可能不是通过“正常”的窗口管理来实现,因为VS2010是使用WPF制作的。但由于这个原因,可能有其他方法来完成任务,甚至可能是“合法”的方法。 - sharkin
1
我还想在VS2010中更改此窗格的颜色方案。 - PedroC88

3

我找不到任何设置来更改“解决方案资源管理器”或其他几个视图的背景颜色。 - Magnus Lindhe
5
下载VS Theme Editor扩展后,可以编辑主题。点击“显示所有元素”按钮,在属性中找到要更改的项:“树视图->背景色”。 - csigrist
@csigrist 我...非常...爱...你!错过了这样的选项。我建议把你的提及放在上面;这是VS2013(和12?)的真正解决方案,如果有人遇到这个问题并且碰巧没有看到你的评论,那么这可能会节省很多时间。留下一条评论说你做到了,我会回来投票支持你。:) ♥ 哇,终于能让这个IDE看起来像我想要的样子了。 - shelleybutterfly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接