刚翻了遍精华帖 看到不少关于WinCC报警声音的
我看到过一个项目是通过 GMSGFUNC.FCT来实现的
优点:比较简洁
缺点:分类报警 比较麻烦
#include "msrtapi.h"//
BOOL GMsgFunction( char* pszMsgData)
{
MSG_RTDATA_STRUCT mRT;
MSG_CLASS_STRUCT mClass;//
CMN_ERROR mError;//
#pragma code ("Winmm.dll")//
VOID WINAPI PlaySoundA (char*pszSound,char*homode, DWORD dwflag ) ;//
memset( &mRT, 0, sizeof( MSG_RTDATA_STRUCT ) );
if( pszMsgData != NULL )
{
printf( "Meldung : %s \r\n", pszMsgData );
// Meldungsdaten einlesen
sscanf( pszMsgData, "%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, %d,%d",
&mRT.dwMsgNr, // Meldungsnummer
&mRT.dwMsgState, // Status MSG_STATE_COME, .._GO, .._QUIT, .._QUIT_SYSTEM
&mRT.stMsgTime.wYear, // Tag
&mRT.stMsgTime.wMonth, // Monat
&mRT.stMsgTime.wDay, // Jahr
&mRT.stMsgTime.wHour, // Stunde
&mRT.stMsgTime.wMinute, // Minute
&mRT.stMsgTime.wSecond, // Sekunde
&mRT.stMsgTime.wMilliseconds, // Millisekunde
&mRT.dwTimeDiff, // Zeitdauer der anstehenden Meldung
&mRT.dwCounter, // Interner Meldungsz鋒ler
&mRT.dwFlags, // Flags( intern )
&mRT.wPValueUsed,
&mRT.wTextValueUsed );
// Prozesswerte lesen, falls gew黱scht
}
printf("Nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %d\r\n" ,
mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth, mRT.stMsgTime.wYear,
mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond, mRT.stMsgTime.wMilliseconds, mRT.dwTimeDiff,
mRT.dwCounter, mRT.dwFlags ) ;
if (!MSRTGetClassInfo(mRT.dwMsgNr, &mClass, &mError)) printf("Get Classinfofailed.\r\n");//
//以下是我们需要手动添加的部分,报警发声程序(出现、确认、离开三个声音)
if ((mClass.dwClassID == 1) && (mRT.dwMsgState == MSG_STATE_COME))//
PlaySoundA("?:\\???\\??.wav", NULL,1);//
else if ((mClass.dwClassID == 1) && (mRT.dwMsgState == MSG_STATE_QUIT))//
PlaySoundA("?:\\???\\??.wav", NULL,1);//
else if ((mClass.dwClassID == 1) && (mRT.dwMsgState == MSG_STATE_GO))//
PlaySoundA("?:\\???\\??.wav", NULL,1);//
return( TRUE );
}