2008-10-09 10 views

Respuesta

35

Acaba de crear la extensión VS para menos de una hora, el administrador de extensiones de búsqueda de "SExColor". Disfrutar;)

+1

Hola, buen trabajo! ¿Cómo lo hiciste? – zadam

+0

trivial, encontrando la ventana del explorador de soluciones que es un control treeview y enviar un mensaje de Windows para cambiar los colores :) –

+0

@aloneguid ¿puedo obtener una versión VS2008 en alguna parte? (¿O puede obtener el código fuente para ello?) – ver

4

No tiene ningún tipo de configuración desde el propio Visual Studio.

Sin embargo, probablemente pueda "hackear" el objeto de ventana de la API de Win32 (consulte "enumeración de ventana"). Una vez que tenga el identificador de ventana, puede establecer todas las características que desee.

Saludos

/Robert

+0

me gustaría poder hacer eso. De lo contrario, no hay necesidad de un tema crepuscular :-( – Stephan

+0

¿Alguna manera de hacerlo con VS 2010? –

+0

Probablemente no mediante la administración de ventanas "normal", ya que VS2010 está hecho con WPF. Puede haber otras formas de realizar la tarea debido a eso, tal vez incluso a los métodos "legales". – sharkin

4

Incluso cambiar el color de fondo estándar de Windows no funciona para el Explorador de soluciones. Este Visual Studio bug report menciona el problema. Microsoft ha marcado esto como "Cerrado - No se Corrige".

¡Lo cual es muy irritante! Usar un tema oscuro y tener un Solution Explorer blanco y brillante colgando del lado de la pantalla es extremadamente molesto.

Una posible solución es no utilizar el Explorador de soluciones en absoluto. El Productivity Power Tools proporciona un reemplazo de Solution Explorer llamado "Solution Navigator". Actualmente también está codificado en blanco. Pero creo que probablemente exista una mayor posibilidad de que los desarrolladores de esa herramienta agreguen soporte para modificar los colores en lugar de lograr que Microsoft lo haga en Visual Studio. (aunque Microsoft creó los PPT).

10

@aloneguid ... debería haber visto esto hace mucho tiempo .. gracias señor!

@ver (en relación con la solución 2008 para la solución;) - un enfoque de tipo B52, bombardeo de alfombras en cualquier cosa que sea SysTreeView32 dentro de un devenv.exe. Posible parámetro adicional para el color deseado, de otro modo RGB (220,220,220) - funciona mejor para mí

#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; 
} 
+0

¡Excelente! Funcionó una delicia - buen trabajo! – user1229458

+1

¿Alguien puede hacer una versión C# de este código? – Tom

+5

+1 por llamarlo bombardeo de alfombras. – TheBlastOne

3

Usted podría utilizar otra extenssion, tiene bastante grandes posibilidades para hacer su Visual Studio más guapo;) (pero estoy no estoy seguro si allí se podía cambiar el Explorador de soluciones de fondo)

http://visualstudiogallery.msdn.microsoft.com/20cd93a2-c435-4d00-a797-499f16402378

+0

No pude encontrar ninguna configuración para el fondo de Solution Explorer o el color de fondo de varias otras vistas. –

+4

Después de descargar la extensión VS Theme Editor, edite un tema. Haga clic en el botón "Mostrar todos los elementos". La propiedad que desea cambiar se llama "Vista en árbol -> Fondo". – csigrist

+0

@csigrist I ... love ... you ... SOMUCH! se perdió esa opción. Yo recomendaría poner su mención; Es la solución real para VS2013 (y 12?) y probablemente le ahorrará a las personas mucho tiempo si llegan a esto y no ve su comentario. Deja un comentario diciendo que lo hiciste. Regresaré y te votaré. :) ♥ wow, finalmente podré hacer que este IDE luzca como quiero. – shelleybutterfly

Cuestiones relacionadas