Is there any way to change the background color of the Solution Explorer in Visual Studio using a Theme? - or any other way for that matter?
有没有办法在Visual Studio中使用主题更改解决方案资源管理器的背景颜色? - 或者其他任何方式?
I can change it by changing windows-wide color settings, but obviously that affects too much.
我可以通过更改窗口范围的颜色设置来更改它,但显然这会影响太多。
5 个解决方案
#1
35
Just created VS extension for that in under an hour, search extension manager for "SExColor". Enjoy ;)
刚刚在一小时内创建了VS扩展,搜索扩展管理器为“SExColor”。请享用 ;)
#2
10
@aloneguid ...should have seen this long time ago.. thank you sir !
@aloneguid ......很久以前应该已经看过了..谢谢先生!
@ver (regarding vs 2008 solution for solution;) - a B52 type of approach, carpet bombing on anything that is SysTreeView32 inside a devenv.exe. Possible extra param for desired color, otherwise RGB(220,220,220) - works best for me
@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;
}
#3
4
Even changing the standard Windows background color does not work for the Solution Explorer. This Visual Studio bug report mentions the issue. Microsoft has marked this as "Closed -- Won't Fix."
即使更改标准Windows背景颜色也不适用于解决方案资源管理器。此Visual Studio错误报告提到了该问题。微软已将此标记为“已关闭 - 无法修复”。
Which is very irritating! Using a dark theme and having a bright white Solution Explorer hanging on the side of the screen is extremely annoying.
哪个很刺激!使用黑色主题并在屏幕侧面悬挂明亮的白色解决方案资源管理器非常烦人。
One possible solution is to not use the Solution Explorer at all. The Productivity Power Tools provides a Solution Explorer replacement called the "Solution Navigator." It currently is also hard-coded to white. But I think there is probably a better chance of getting the developers of that tool to add support for modifying colors than of getting Microsoft to do it in Visual Studio. (even though Microsoft created the PPTs.)
一种可能的解决方案是根本不使用解决方案资源管理器。 Productivity Power Tools提供称为“解决方案导航器”的解决方案资源管理器替代品。它目前也被硬编码为白色。但我认为有可能让该工具的开发人员增加对修改颜色的支持,而不是让Microsoft在Visual Studio中执行此操作。 (即使微软创建了PPT。)
#4
4
Not by any means of configuration from Visual Studio itself.
不是通过Visual Studio本身的任何配置方式。
You can however probably "hack" the window object from the Win32 API (look up "window enumeration"). Once you have the window handle, you can set all characterstics you want.
但是,您可以从Win32 API“查找”窗口对象(查找“窗口枚举”)。拥有窗口句柄后,您可以设置所需的所有特征。
Regards
/Robert
#5
3
You could use other extenssion, you have quite big possibilities to do your Visual Studio more good looking ;) (but I'm not sure if there you could change Solution Explorer background)
你可以使用其他的extenssion,你有很大的可能性使你的Visual Studio更好看;)(但我不确定你是否可以更改解决方案资源管理器背景)
http://visualstudiogallery.msdn.microsoft.com/20cd93a2-c435-4d00-a797-499f16402378
#1
35
Just created VS extension for that in under an hour, search extension manager for "SExColor". Enjoy ;)
刚刚在一小时内创建了VS扩展,搜索扩展管理器为“SExColor”。请享用 ;)
#2
10
@aloneguid ...should have seen this long time ago.. thank you sir !
@aloneguid ......很久以前应该已经看过了..谢谢先生!
@ver (regarding vs 2008 solution for solution;) - a B52 type of approach, carpet bombing on anything that is SysTreeView32 inside a devenv.exe. Possible extra param for desired color, otherwise RGB(220,220,220) - works best for me
@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;
}
#3
4
Even changing the standard Windows background color does not work for the Solution Explorer. This Visual Studio bug report mentions the issue. Microsoft has marked this as "Closed -- Won't Fix."
即使更改标准Windows背景颜色也不适用于解决方案资源管理器。此Visual Studio错误报告提到了该问题。微软已将此标记为“已关闭 - 无法修复”。
Which is very irritating! Using a dark theme and having a bright white Solution Explorer hanging on the side of the screen is extremely annoying.
哪个很刺激!使用黑色主题并在屏幕侧面悬挂明亮的白色解决方案资源管理器非常烦人。
One possible solution is to not use the Solution Explorer at all. The Productivity Power Tools provides a Solution Explorer replacement called the "Solution Navigator." It currently is also hard-coded to white. But I think there is probably a better chance of getting the developers of that tool to add support for modifying colors than of getting Microsoft to do it in Visual Studio. (even though Microsoft created the PPTs.)
一种可能的解决方案是根本不使用解决方案资源管理器。 Productivity Power Tools提供称为“解决方案导航器”的解决方案资源管理器替代品。它目前也被硬编码为白色。但我认为有可能让该工具的开发人员增加对修改颜色的支持,而不是让Microsoft在Visual Studio中执行此操作。 (即使微软创建了PPT。)
#4
4
Not by any means of configuration from Visual Studio itself.
不是通过Visual Studio本身的任何配置方式。
You can however probably "hack" the window object from the Win32 API (look up "window enumeration"). Once you have the window handle, you can set all characterstics you want.
但是,您可以从Win32 API“查找”窗口对象(查找“窗口枚举”)。拥有窗口句柄后,您可以设置所需的所有特征。
Regards
/Robert
#5
3
You could use other extenssion, you have quite big possibilities to do your Visual Studio more good looking ;) (but I'm not sure if there you could change Solution Explorer background)
你可以使用其他的extenssion,你有很大的可能性使你的Visual Studio更好看;)(但我不确定你是否可以更改解决方案资源管理器背景)
http://visualstudiogallery.msdn.microsoft.com/20cd93a2-c435-4d00-a797-499f16402378