|
Beep を制御する |
|
// --------------------------------------------------------------------- // Beep サービスの開始と停止を制御する(一時的操作) // --------------------------------------------------------------------- BOOL EnableBeepService(BOOL bEnable = TRUE) { BOOL bSuccess = FALSE; SERVICE_STATUS svStatus; // サービス制御マネージャとの接続を確立する SC_HANDLE hScm = ::OpenSCManager(NULL, NULL, GENERIC_EXECUTE); if (!hScm) return FALSE; // Beep サービスのハンドルを開く SC_HANDLE hSv = ::OpenService( hScm, "Beep", SERVICE_START | SERVICE_STOP | SERVICE_QUERY_STATUS ); if (hSv) { // 開始指定なら if (bEnable) { // Beep サービスを開始させる if (::StartService(hSv, NULL, NULL)) { // サービスの起動確認を行う if (::QueryServiceStatus(hSv, &svStatus)) { ::Sleep(svStatus.dwWaitHint); if (svStatus.dwCurrentState == SERVICE_RUNNING) bSuccess = TRUE; } } // 停止指定なら } else { // Beep サービスを停止させる if (::ControlService(hSv, SERVICE_CONTROL_STOP, &svStatus)) { // サービスの停止確認を行う if (::QueryServiceStatus(hSv, &svStatus)) { ::Sleep(svStatus.dwWaitHint); if (svStatus.dwCurrentState == SERVICE_STOPPED) bSuccess = TRUE; } } } ::CloseServiceHandle(hSv); } ::CloseServiceHandle(hScm); return bSuccess; } |
|
// --------------------------------------------------------------------- // Beep サービスの稼働状態を取得する // --------------------------------------------------------------------- BOOL CheckBeepService(BOOL* pbStart) { BOOL bSuccess = FALSE; SERVICE_STATUS svStatus; // サービス制御マネージャとの接続を確立する SC_HANDLE hScm = ::OpenSCManager(NULL, NULL, GENERIC_EXECUTE); if (!hScm) return FALSE; // Beep サービスのハンドルを開く SC_HANDLE hSv = ::OpenService(hScm, "Beep", SERVICE_QUERY_STATUS); if (hSv) { // Beep サービスの現在のステータスを取得する if (::QueryServiceStatus(hSv, &svStatus)) { *pbStart = svStatus.dwCurrentState == SERVICE_RUNNING ? TRUE : FALSE; bSuccess = TRUE; } ::CloseServiceHandle(hSv); } ::CloseServiceHandle(hScm); return bSuccess; } |