16,471
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <sapi.h>
#include <wininet.h>
#include <assert.h>
#include <cstdio>
#include <sphelper.h>
#include <WCHAR.h>
#pragma comment(lib, "wininet")
void MyPlayText();
int main(int argc, char* argv[])
{
MyPlayText();
return TRUE;
}
void MyPlayText()
{
ISpeechVoice* pVoice = NULL;
ISpeechBaseStream* stream=NULL;
ISpeechAudioFormat* pFormat=NULL;
ISpeechObjectTokens* ObjectTokens=NULL;
ISpeechObjectToken* pToken=NULL;
VARIANT vt;
VARIANT vt1;
long StreamNumber;
if (FAILED(::CoInitialize(NULL)))
{
OutputDebugString("==> ::CoInitialize(NULL) failed");
return;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpeechVoice, (void**)&pVoice);
if (SUCCEEDED(hr))
{
HRESULT hr = CoCreateInstance(CLSID_SpMemoryStream, NULL, CLSCTX_ALL, IID_ISpeechBaseStream, (void**)&stream);
if (SUCCEEDED(hr))
{
try
{
OutputDebugString("-----> ----->");
stream->get_Format(&pFormat);
pFormat->put_Type(SAFT8kHz16BitMono);
pVoice->putref_AudioOutputStream(stream);
pVoice->put_AllowAudioOutputFormatChangesOnNextSet(FALSE);
pVoice->GetVoices(L"", L"", &ObjectTokens);
ObjectTokens->Item(0, &pToken);
pVoice->putref_Voice(pToken);
StreamNumber = 1000;
HRESULT hr = pVoice->Speak(L"TTTTTTaaaaaaaa", SVSFDefault, &StreamNumber);
if (SUCCEEDED(hr))
{OutputDebugString("pVoice->Speak OK");}
else
{OutputDebugString("pVoice->Speak not OK");}
memset(&vt, 0, sizeof(vt));
memset(&vt1, 0, sizeof(vt1));
hr = stream->Seek(vt, SSSPTRelativeToEnd, &vt1);
if (SUCCEEDED(hr))
{OutputDebugString("stream->Seek OK");}
else
{OutputDebugString("stream->Seek not OK");}
OutputDebugString("<----- <-----");
}
catch(...)
{
OutputDebugString("-----> some err");
}
}
pVoice-> Release();
pVoice = NULL;
}
::CoUninitialize();
}
void MyPlayText()
{
ISpVoice* pVoice;
ISpObjectToken* pVoiceToken;
IEnumSpObjectTokens* pEnum;
// CComPtr<ISpStreamFormat> cpOldStream;
ULONG ulCount = 0;
if (FAILED(::CoInitialize(NULL)))
{
OutputDebugString("==> ::CoInitialize(NULL) failed");
return;
}
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice);
if (SUCCEEDED(hr))
{
hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &pEnum);
try
{
if(SUCCEEDED(hr))
hr = pEnum-> Next( 1, &pVoiceToken, NULL );
if(SUCCEEDED(hr))
hr = pVoice-> SetVoice(pVoiceToken);
OutputDebugString("==> Before pVoice->Speak");
if(SUCCEEDED(hr))
{
hr = pVoice->Speak(L"How are you?", SPF_DEFAULT, NULL);
if(SUCCEEDED(hr))
OutputDebugString(" --> pVoice->Speak OK");
else
OutputDebugString(" --> pVoice->Speak not OK");
}
OutputDebugString("==> After pVoice->Speak");
pVoiceToken->Release();
pVoiceToken=NULL;
}
catch(...)
{
OutputDebugString("==> some err");
}
pVoice-> Release();
pVoice = NULL;
}
::CoUninitialize();
}
#include <windows.h>
#include <stdio.h>
#include <sapi.h>
#include <wininet.h>
#include <assert.h>
#include <sphelper.h>
#include <WCHAR.h>
#pragma comment(lib, "wininet")
#define SLEEP_TIME 5000
#define LOGFILE "C:\\MemoryStatus\\memstatus.txt"
////////////////////////////////////////////////////////////
// Declare several global variables to share
// their values across multiple functions of your program.
////////////////////////////////////////////////////////////
SERVICE_STATUS ServiceStatus;
SERVICE_STATUS_HANDLE hStatus;
////////////////////////////////////////////////////////////
// Make the forward definitions of functions prototypes.
//
////////////////////////////////////////////////////////////
void ServiceMain(int argc, char** argv);
void ControlHandler(DWORD request);
int InitService();
void MyPlayText();
void MyPlayText1();
void ZcPrintMsg(int _i,int _j);
int WriteToLog(char* str)
{
FILE* log;
log = fopen(LOGFILE, "a+");
if (log == NULL){
OutputDebugString("Log file open failed.");
return -1;
}
fprintf(log, "%s\n", str);
fclose(log);
return 0;
}
// Service initialization
int InitService()
{
OutputDebugString("Monitoring started.");
int result;
result = WriteToLog("Monitoring started.");
return(result);
}
// Control Handler
void ControlHandler(DWORD request)
{
switch(request)
{
case SERVICE_CONTROL_STOP:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
case SERVICE_CONTROL_SHUTDOWN:
OutputDebugString("Monitoring stopped.");
WriteToLog("Monitoring stopped.");
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus (hStatus, &ServiceStatus);
return;
default:
break;
}
// Report current status
SetServiceStatus (hStatus, &ServiceStatus);
return;
}
void ServiceMain(int argc, char** argv)
{
int error;
ServiceStatus.dwServiceType =
SERVICE_WIN32;
ServiceStatus.dwCurrentState =
SERVICE_START_PENDING;
ServiceStatus.dwControlsAccepted =
SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
ServiceStatus.dwWin32ExitCode = 0;
ServiceStatus.dwServiceSpecificExitCode = 0;
ServiceStatus.dwCheckPoint = 0;
ServiceStatus.dwWaitHint = 0;
hStatus = RegisterServiceCtrlHandler(
"MemoryStatus",
(LPHANDLER_FUNCTION)ControlHandler);
if (hStatus == (SERVICE_STATUS_HANDLE)0)
{
// Registering Control Handler failed
return;
}
// Initialize Service
error = InitService();
if (error)
{
// Initialization failed
ServiceStatus.dwCurrentState =
SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus, &ServiceStatus);
return;
}
// We report the running status to SCM.
ServiceStatus.dwCurrentState =
SERVICE_RUNNING;
SetServiceStatus (hStatus, &ServiceStatus);
// MEMORYSTATUS memory;
// The worker loop of a service
while (ServiceStatus.dwCurrentState == SERVICE_RUNNING)
{
/* char buffer[16];
GlobalMemoryStatus(&memory);
sprintf(buffer, "%d", memory.dwAvailPhys);
OutputDebugString(buffer);
int result = WriteToLog(buffer);
if (result)
{
ServiceStatus.dwCurrentState =
SERVICE_STOPPED;
ServiceStatus.dwWin32ExitCode = -1;
SetServiceStatus(hStatus,
&ServiceStatus);
return;
}
*/
MyPlayText(); // ----------- here
Sleep(SLEEP_TIME);
}
return;
}
void main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "MemoryStatus";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
// Start the control dispatcher thread for our service
StartServiceCtrlDispatcher(ServiceTable);
}