IInitiateWinSATAssessment::InitiateFormalAssessment-Methode (winsatcominterfacei.h)
[IInitiateWinSATAssessment::InitiateFormalAssessment kann nach Windows 8.1 geändert oder nicht verfügbar sein.]
Initiiert eine formale Bewertung.
Syntax
HRESULT InitiateFormalAssessment(
[in, optional] IWinSATInitiateEvents *pCallbacks,
[in, optional] HWND callerHwnd
);
Parameter
[in, optional] pCallbacks
Eine IWinSATInitiateEvents-Schnittstelle , die Sie implementieren, um Benachrichtigungen zu erhalten, wenn die Bewertung abgeschlossen ist oder Fortschritte macht. Kann NULL sein, wenn Sie keine Benachrichtigungen erhalten möchten.
[in, optional] callerHwnd
Das Fensterhandle Ihres Clients. Das Handle wird verwendet, um die WinSAT-Dialogfelder zu zentrieren. Wenn NULL, werden die Dialogfelder auf dem Desktop zentriert.
Rückgabewert
Diese Methode kann einen dieser Werte zurückgeben.
In der folgenden Tabelle sind einige der HRESULT-Werte aufgeführt, die von dieser Methode zurückgegeben werden.
Rückgabecode/-wert | BESCHREIBUNG |
---|---|
|
WinSAT wurde erfolgreich gestartet. Um festzustellen, ob die Bewertung erfolgreich ausgeführt wurde, implementieren Sie die IWinSATInitiateEvents::WinSATComplete-Methode , und überprüfen Sie den Wert des hresult-Parameters . |
|
Das WinSAT-Programm konnte nicht gefunden werden, wo erwartet. |
Hinweise
In der Regel führen Sie eine formale Bewertung durch, um alle Teilkomponenten des Computers zu bewerten, während eine Ad-hoc-Bewertung einen Teil des Computers bewertet. Um eine Ad-hoc-Bewertung auszuführen, rufen Sie die IInitiateWinSATAssessment::InitiateAssessment-Methode auf.
Verwenden Sie zum Abrufen der Ergebnisse einer formalen Bewertung die IQueryRecentWinSATAssessment-Schnittstelle .
Wenn Sie diese Funktion aus einer Windows-Anwendung aufrufen, implementieren Sie die IWinSATInitiateEvents-Schnittstelle , damit Sie Statusinformationen anzeigen und Benachrichtigungen erhalten können, wenn die Bewertung abgeschlossen ist. Für eine Windows-Konsolenanwendung ist das Anzeigen des Fortschritts nicht erforderlich, da WinSAT Statusinformationen in das Konsolenfenster schreibt.
Beachten Sie, dass winSAT Administratorrechte erfordert, um ausgeführt zu werden. Wenn der Benutzer nicht über Administratorrechte verfügt, zeigt WinSAT ein Dialogfeld an, in dem nach Anmeldeinformationen gefragt wird.
Beispiele
Das folgende Beispiel zeigt, wie Sie eine formale Bewertung ausführen und eine Benachrichtigung über den Fortschritt erhalten.
#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();
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Nicht unterstützt |
Zielplattform | Windows |
Kopfzeile | winsatcominterfacei.h |
DLL | Winsatapi.dll |