Método IInitiateWinSATAssessment::InitiateFormalAssessment (winsatcominterfacei.h)
[IInitiateWinSATAssessment::InitiateFormalAssessment pode ser alterado ou indisponível para versões após Windows 8.1.]
Inicia uma avaliação formal.
Sintaxe
HRESULT InitiateFormalAssessment(
[in, optional] IWinSATInitiateEvents *pCallbacks,
[in, optional] HWND callerHwnd
);
Parâmetros
[in, optional] pCallbacks
Uma interface IWinSATInitiateEvents que você implementa para receber notificação quando a avaliação é concluída ou avança. Pode ser NULL se você não quiser receber notificações.
[in, optional] callerHwnd
O identificador de janela do cliente. O identificador é usado para centralizar as caixas de diálogo WinSAT. Se FOR NULL, as caixas de diálogo serão centralizados na área de trabalho.
Valor retornado
Esse método pode retornar um desses valores.
Esta tabela a seguir lista alguns dos valores HRESULT que esse método retorna.
Valor/código retornado | Descrição |
---|---|
|
WinSAT iniciado com êxito. Para determinar se a avaliação foi executada com êxito, implemente o método IWinSATInitiateEvents::WinSATComplete e marcar o valor do parâmetro hresult. |
|
Não foi possível encontrar o programa WinSAT onde o esperado. |
Comentários
Normalmente, você executa uma avaliação formal para avaliar todos os subcomponentes do computador, enquanto uma avaliação ad hoc avalia um subcomponente do computador. Para executar uma avaliação ad hoc, chame o método IInitiateWinSATAssessment::InitiateAssessment .
Para obter os resultados de uma avaliação formal, use a interface IQueryRecentWinSATAssessment .
Se você chamar essa função de um aplicativo do Windows, implemente a interface IWinSATInitiateEvents para que você possa exibir informações de progresso e receber notificação quando a avaliação for concluída. Para um aplicativo de console do Windows, mostrar o progresso não é necessário porque o WinSAT grava informações de progresso na janela do console.
Observe que o WinSAT requer privilégios de administrador para execução. Se o usuário não tiver privilégios de administrador, o WinSAT exibirá uma caixa de diálogo que solicita credenciais.
Exemplos
O exemplo a seguir mostra como executar uma avaliação formal e receber uma notificação de seu progresso.
#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 com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Nenhum compatível |
Plataforma de Destino | Windows |
Cabeçalho | winsatcominterfacei.h |
DLL | Winsatapi.dll |