ポーリングで行う必要があります。コードを別のスレッドに置き、合理的である限り、スリープ状態にしてください。システムのパフォーマンスを最小限に抑えるために、毎秒、おそらくは5秒ということもあります。単一のサービスのための 'C' の例として
:
//さまざまなハンドルと文字列のプラス... 上記Service_Status ssStatus。 ...
schSCManager = OpenSCManager(ServiceComputerNameStr,
NULL,
SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
{
// ... error stuff
goto cleanup;
}
scphService = OpenService(schSCManager,
ServiceNameStr,
// SERVICE_QUERY_STATUS);
SERVICE_ALL_ACCESS);
if (scphService == NULL)
{
// ... error stuff
goto cleanup;
}
if (!QueryServiceStatus(scphService, ssStatus))
{
// ... error stuff
goto cleanup;
}
あなたが望む結果はssStatus.dwCurrentStateになります。
これは正式な答えではありませんので、私はコメントとして追加しています。最も近いものは 'RegNotifyChangeKeyValue'です。マシンローカルサービスの' HKLM \ SYSTEM \ CurrentControlSet \ services'キーを見てください。 –