Método IInitiateWinSATAssessment::InitiateFormalAssessment (winsatcominterfacei.h)
[IInitiateWinSATAssessment::InitiateFormalAssessment puede modificarse o no estar disponible para las versiones después de Windows 8.1.]
Inicia una evaluación formal.
Sintaxis
HRESULT InitiateFormalAssessment(
[in, optional] IWinSATInitiateEvents *pCallbacks,
[in, optional] HWND callerHwnd
);
Parámetros
[in, optional] pCallbacks
Interfaz IWinSATInitiateEvents que se implementa para recibir notificaciones cuando la evaluación finaliza o progresa. Puede ser NULL si no desea recibir notificaciones.
[in, optional] callerHwnd
Identificador de ventana del cliente. El identificador se usa para centrar los cuadros de diálogo de WinSAT. Si es NULL, los cuadros de diálogo se centran en el escritorio.
Valor devuelto
Este método puede devolver uno de estos valores.
En esta tabla siguiente se enumeran algunos de los valores HRESULT que devuelve este método.
Código o valor devuelto | Descripción |
---|---|
|
WinSAT se inició correctamente. Para determinar si la evaluación se ejecutó correctamente, implemente el método IWinSATInitiateEvents::WinSATComplete y compruebe el valor del parámetro hresult . |
|
No se encontró el programa WinSAT donde se esperaba. |
Comentarios
Normalmente, se ejecuta una evaluación formal para evaluar todos los subcomponentes del equipo, mientras que una evaluación ad hoc evalúa un subcomponente del equipo. Para ejecutar una evaluación ad hoc, llame al método IInitiateWinSATAssessment::InitiateAssessment .
Para obtener los resultados de una evaluación formal, use la interfaz IQueryRecentWinSATAssessment .
Si llama a esta función desde una aplicación de Windows, implemente la interfaz IWinSATInitiateEvents para que pueda mostrar información de progreso y recibir notificaciones cuando se complete la evaluación. En el caso de una aplicación de consola de Windows, no es necesario mostrar el progreso porque WinSAT escribe información de progreso en la ventana de la consola.
Tenga en cuenta que WinSAT requiere privilegios de administrador para ejecutarse. Si el usuario no tiene privilegios de administrador, WinSAT mostrará un cuadro de diálogo que solicita las credenciales.
Ejemplos
En el ejemplo siguiente se muestra cómo ejecutar una evaluación formal y recibir una notificación de su progreso.
#include <windows.h>
#include <stdio.h>
#include <conio.h> // For kbhit()
#include <winsatcominterfacei.h>
#pragma comment(lib, "ole32.lib")
// Class that implements IWinSATInitiateEvents. Implement this class to
// get progress information and completion notification.
class CWinSATCallbacks : public IWinSATInitiateEvents
{
LONG m_lRefCount;
public:
// Constructor, Destructor
CWinSATCallbacks() {m_lRefCount = 1;};
~CWinSATCallbacks() {};
// IUnknown methods
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID *ppvObj);
ULONG __stdcall AddRef();
ULONG __stdcall Release();
// IWinSATInitiateEvents methods
HRESULT __stdcall WinSATComplete(HRESULT hr, LPCWSTR description);
HRESULT __stdcall WinSATUpdate(UINT currentTick, UINT tickTotal, LPCWSTR currentState);
};
HRESULT CWinSATCallbacks::QueryInterface(REFIID riid, LPVOID* ppvObj)
{
if (riid == __uuidof(IUnknown) || riid == __uuidof(IWinSATInitiateEvents))
{
*ppvObj = this;
}
else
{
*ppvObj = NULL;
return E_NOINTERFACE;
}
AddRef();
return NOERROR;
}
ULONG CWinSATCallbacks::AddRef()
{
return InterlockedIncrement(&m_lRefCount);
}
ULONG CWinSATCallbacks::Release()
{
ULONG ulCount = InterlockedDecrement(&m_lRefCount);
if(0 == ulCount)
{
delete this;
}
return ulCount;
}
// Is called when WinSAT completes the assessment or an error occurs.
HRESULT CWinSATCallbacks::WinSATComplete(HRESULT hr, LPCWSTR description)
{
if (SUCCEEDED(hr))
{
wprintf(L"\n*** %s", description);
}
else
{
wprintf(L"\n*** The assessment failed with 0x%x (%s)\n", hr, description);
}
return S_OK;
}
// Is called when the assessment makes progress. Indicates the percentage of the assessment
// that is complete and the current component being assessed.
HRESULT CWinSATCallbacks::WinSATUpdate(UINT currentTick, UINT tickTotal, LPCWSTR currentState)
{
// Typically, you would provide the tick values to a ProgressBar control.
if (tickTotal > 0)
{
wprintf(L"\n*** Percent complete: %u%%\n", 100*currentTick/tickTotal);
wprintf(L"*** Currently assessing: %s\n\n", currentState);
}
return S_OK;
}
void main(void)
{
HRESULT hr = S_OK;
IInitiateWinSATAssessment* pAssessment = NULL;
CWinSATCallbacks* pCallbacks = NULL; // Class that implements IWinSATInitiateEvents
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
// Get an instance of the assessment interface.
hr = CoCreateInstance(__uuidof(CInitiateWinSAT),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IInitiateWinSATAssessment),
(void**)&pAssessment);
if (FAILED(hr))
{
wprintf(L"Failed to create an instance of IInitiateWinSATAssessment. Failed with 0x%x.\n", hr);
goto cleanup;
}
wprintf(L"Running formal assessment... hit any key when complete.\n");
pCallbacks = new CWinSATCallbacks();
if (NULL == pCallbacks)
{
wprintf(L"Failed to create an instance of the CWinSATCallbacks class.\n");
goto cleanup;
}
// Run the formal assessment.
hr = pAssessment->InitiateFormalAssessment(pCallbacks, NULL);
if (FAILED(hr))
{
// This is a failure to start WinSAT. If WinSAT fails while running,
// your implementation of the IWinSATInitiateEvents::WinSATComplete
// method will receive the failure code.
wprintf(L"InitiateFormalAssessment failed with 0x%x.\n", hr);
goto cleanup;
}
while (!_kbhit())
Sleep(10);
cleanup:
if (pAssessment)
pAssessment->Release();
if (pCallbacks)
pCallbacks->Release();
CoUninitialize();
}
Requisitos
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | No se admite ninguno |
Plataforma de destino | Windows |
Encabezado | winsatcominterfacei.h |
Archivo DLL | Winsatapi.dll |