Metodo IProvideWinSATVisuals::get_Bitmap (winsatcominterfacei.h)
[IProvideWinSATVisuals::get_Bitmap può essere modificato o non disponibile per le versioni dopo Windows 8.1.]
Recupera una bitmap per il punteggio di base WinSAT.
Sintassi
HRESULT get_Bitmap(
[in] WINSAT_BITMAP_SIZE bitmapSize,
[in] WINSAT_ASSESSMENT_STATE state,
[in] float rating,
[out] HBITMAP *pBitmap
);
Parametri
[in] bitmapSize
Determina le dimensioni della bitmap restituita da questo metodo. Per i valori possibili, vedere l'enumerazione WINSAT_BITMAP_SIZE .
[in] state
Stato della valutazione. Per ottenere questo valore, chiamare il metodo IProvideWinSATResultsInfo::get_AssessmentState .
[in] rating
Punteggio di base per il computer. Per ottenere questo valore, chiamare il metodo IProvideWinSATResultsInfo::get_SystemRating .
[out] pBitmap
Handle della bitmap. Per liberare l'handle al termine, chiamare la funzione DeleteObject .
Valore restituito
Questo metodo può restituire uno di questi valori.
Nella tabella seguente sono elencati alcuni dei valori HRESULT restituiti da questo metodo.
Codice/valore restituito | Descrizione |
---|---|
|
Recuperata correttamente la bitmap. |
|
Il valore di classificazione non è valido. I valori validi sono da 1.0 a 9.9. |
Commenti
La bitmap viene restituita solo per gli stati di WINSAT_ASSESSMENT_STATE_VALID e WINSAT_ASSESSMENT_STATE_INCOHERENT_WITH_HARDWARE. Il metodo avrà esito positivo (il valore restituito è S_OK) se si passa un altro valore di stato, ma il parametro pBitmap sarà NULL.
Esempio
Nell'esempio seguente viene illustrato come recuperare una bitmap che rappresenta il punteggio di base della valutazione. Nell'esempio viene usata la classe WIN32_WINSAT MOF WMI per ottenere lo stato e il punteggio di base passati a questo metodo.
#include <windows.h>
#include <comutil.h>
#include <commctrl.h>
#include <wbemidl.h>
#include <winsatcominterfacei.h>
#pragma comment(lib, "comsupp.lib") // For _bstr_t
#pragma comment(lib, "comctl32.lib") // For common controls
#pragma comment(lib, "gdi32.lib")
// The WQL query used to retrieve an instance of the Win32_WinSAT class.
#define WINSAT_QUERY_STRING L"Select * \
From Win32_WinSAT \
Where TimeTaken = 'MostRecentAssessment'"
HRESULT GetBaseScore(float* pBaseScore, WINSAT_ASSESSMENT_STATE* pState);
HRESULT GetScoreBitmap(const float BaseScore, const WINSAT_ASSESSMENT_STATE State, HBITMAP* phbitmap);
LRESULT CALLBACK MonitorWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
// Global variables
HINSTANCE g_hinst;
HWND g_hwndStatus;
HBITMAP g_hScoreBitmap;
#define IDC_MONITOR 100
int WINAPI WinMain(HINSTANCE hinst,
HINSTANCE hinstPrev,
LPSTR pszCmdLine,
int nCmdShow)
{
WNDCLASSEX wc;
ATOM atom;
HWND hwnd;
MSG msg;
g_hinst = hinst;
ZeroMemory(&wc, sizeof(wc));
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = MonitorWndProc;
wc.hInstance = hinst;
wc.lpszClassName = TEXT("MainWClass");
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
atom = RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,
TEXT("MainWClass"),
TEXT("Experience Index Base Score"),
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT,
390, 165,
NULL,
NULL,
hinst,
NULL);
if (NULL == hwnd)
{
return (int)GetLastError();
}
ShowWindow(hwnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK MonitorWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
HRESULT hr = S_OK;
switch(msg)
{
case WM_CREATE:
{
INITCOMMONCONTROLSEX initctrls;
RECT rc;
float BaseScore = 0.0;
WINSAT_ASSESSMENT_STATE AssessmentState;
SetWindowText(hwnd, TEXT("Experience Index Base Score"));
initctrls.dwSize = sizeof(initctrls);
initctrls.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&initctrls);
GetClientRect(hwnd, &rc);
g_hwndStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE,
rc.left, rc.bottom - 20, rc.right, 20,
hwnd, (HMENU) IDC_MONITOR, g_hinst, NULL);
if (NULL == g_hwndStatus)
return (LRESULT) NULL;
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
// Get the base score and the state of the assessment.
if (FAILED(hr = GetBaseScore(&BaseScore, &AssessmentState)))
{
SetWindowText(g_hwndStatus, TEXT("Failed to get base score and state"));
}
// Get the bitmap for the specified score and state values.
if (FAILED(hr = GetScoreBitmap(BaseScore, AssessmentState, &g_hScoreBitmap)) || NULL == g_hScoreBitmap)
{
SetWindowText(g_hwndStatus, TEXT("Failed to get base score bitmap"));
}
break;
}
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdcWin;
HDC hdcCompatible;
HGDIOBJ bmpOld;
BITMAP bitmap;
// Write the bitmap to the window.
if (g_hScoreBitmap)
{
hdcWin = BeginPaint(hwnd, &ps);
hdcCompatible = CreateCompatibleDC(hdcWin);
bmpOld = SelectObject(hdcCompatible, g_hScoreBitmap);
GetObject(g_hScoreBitmap, sizeof(BITMAP), &bitmap);
BitBlt(hdcWin, 0, 0, bitmap.bmWidth, bitmap.bmHeight, hdcCompatible, 0, 0, SRCCOPY);
SelectObject(hdcCompatible, bmpOld);
DeleteDC(hdcCompatible);
EndPaint(hwnd, &ps);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
CoUninitialize();
DeleteObject(g_hScoreBitmap);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}
// Use the Win32_WinSAT WMI class to retrieve the base score and
// state of the most recent assessment.
HRESULT GetBaseScore(float* pBaseScore, WINSAT_ASSESSMENT_STATE* pState)
{
HRESULT hr = S_OK;
IWbemServices* pServices = NULL;
IWbemLocator* pLocator = NULL;
IEnumWbemClassObject* pEnum = NULL;
IWbemClassObject* pWinSAT = NULL;
_variant_t vBaseScore;
_variant_t vState;
ULONG returned = 0;
// WMI code to retrieve the Win32_WinSAT instance.
hr = CoCreateInstance(__uuidof(WbemLocator),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IWbemLocator),
(void**)&pLocator);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
hr = pLocator->ConnectServer(_bstr_t(L"root\\cimv2"),
NULL, NULL, NULL, 0L, NULL, NULL,
&pServices);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
hr = pServices->ExecQuery(_bstr_t(L"WQL"),
_bstr_t(WINSAT_QUERY_STRING),
WBEM_FLAG_USE_AMENDED_QUALIFIERS | WBEM_FLAG_FORWARD_ONLY,
NULL,
&pEnum);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
// The query will return only one instance.
hr = pEnum->Next(WBEM_INFINITE, 1, &pWinSAT, &returned);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
hr = pWinSAT->Get(L"WinSPRLevel", 0, &vBaseScore, NULL, NULL);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
*pBaseScore = vBaseScore.fltVal;
hr = pWinSAT->Get(L"WinSATAssessmentState", 0, &vState, NULL, NULL);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
*pState = (WINSAT_ASSESSMENT_STATE)vState.lVal;
cleanup:
if (pLocator)
pLocator->Release();
if (pServices)
pServices->Release();
if (pEnum)
pEnum->Release();
if (pWinSAT)
pWinSAT->Release();
return hr;
}
HRESULT GetScoreBitmap(const float BaseScore, const WINSAT_ASSESSMENT_STATE State, HBITMAP* phbitmap)
{
HRESULT hr = S_OK;
IProvideWinSATVisuals* pVisuals = NULL;
// Code to retrieve the bitmap from WinSAT. Get the bitmap
// only if the state is one of the following states.
if (WINSAT_ASSESSMENT_STATE_VALID == State ||
WINSAT_ASSESSMENT_STATE_INCOHERENT_WITH_HARDWARE == State)
{
hr = CoCreateInstance(__uuidof(CProvideWinSATVisuals),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IProvideWinSATVisuals),
(void**)&pVisuals);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
hr = pVisuals->get_Bitmap(WINSAT_BITMAP_SIZE_NORMAL,
State,
BaseScore,
phbitmap);
if (FAILED(hr))
{
// Handle error
goto cleanup;
}
}
cleanup:
if (pVisuals)
pVisuals->Release();
return hr;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [solo app desktop] |
Server minimo supportato | Nessuno supportato |
Piattaforma di destinazione | Windows |
Intestazione | winsatcominterfacei.h |
DLL | Winsatapi.dll |