@aloneguid ... यह बहुत समय पहले देखा जाना चाहिए .. धन्यवाद श्रीमान!
@ver (समाधान के लिए बनाम 2008 समाधान के संबंध में;) - एक बी 52 प्रकार का दृष्टिकोण, किसी भी चीज़ पर कालीन बमबारी जो SysTreeView32 को devenv.exe के अंदर है। इच्छित रंग के लिए संभव अतिरिक्त परम, अन्यथा आरजीबी (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;
}
में इस फलक के लिए रंग योजना भी बदलना चाहूंगा हे अच्छा काम! आपने यह कैसे किया? – zadam
तुच्छ, समाधान एक्सप्लोरर विंडो ढूंढना जो एक वृक्षदृश्य नियंत्रण है , और रंग बदलने के लिए विंडोज संदेश भेजना :) –
@aloneguid मुझे कहीं भी वीएस -2008 संस्करण मिल सकता है? (या इसके लिए स्रोत कोड प्राप्त करें?) – ver