16,550
社区成员
发帖
与我相关
我的任务
分享
typedef HANDLE HTHEME;
typedef HTHEME (__stdcall *OPENTHEMEDATA)(HWND hWnd, LPCWSTR pszClassList);
typedef HRESULT (__stdcall *CLOSETHEMEDATA)(HTHEME hTheme);
HMODULE hUxTheme = NULL;
// 下面一步获取hUxTheme的值不为NULL
hUxTheme = ::LoadLibrary(_T("UxTheme.dll"));
OPENTHEMEDATA OpenThemeData;
CLOSETHEMEDATA CloseThemeData;
// 下面一步获取OpenThemeData也不为NULL
OpenThemeData = (OPENTHEMEDATA)::GetProcAddress(hUxTheme, ("OpenThemeData"));
// 63 63 72 75 6E 2E 63 6F 6D
CloseThemeData = (CLOSETHEMEDATA)::GetProcAddress(hUxTheme,("CloseThemeData"));
// 很费解不知为何下面一步hTheme的值为NULL
HTHEME hTheme = OpenThemeData(NULL, L"ComboBox");
if (NULL==hTheme)
{
LPVOID lpMsgBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
::MessageBox(NULL,(LPCTSTR)lpMsgBuf,_T("系统错误"), MB_OK|MB_ICONSTOP);
LocalFree(lpMsgBuf);
}