標(biāo)題:
wincc聲音報(bào)警C腳本版
[打印本頁]
作者:
51hei小林
時(shí)間:
2016-9-24 20:33
標(biāo)題:
wincc聲音報(bào)警C腳本版
//wincc聲音報(bào)警C腳本版,和wincc自身的報(bào)警沒有任何關(guān)系,所以不要和wincc自帶的報(bào)警相關(guān)聯(lián)
#include "apdefap.h"
//播放聲音的函數(shù)聲明
#pragma code("winmm.dll")
VOID WINAPI PlaySoundA(char *,char *,DWORD);
#pragma code()
struct datainfo //變量名和聲音文件名的對(duì)應(yīng)關(guān)系
{
const char * const tagname; //變量名
const char * const soundname; //聲音文件名
};
struct statusdatainfo //保存報(bào)警變量的狀態(tài)信息
{
int prevStatus;
int playing;
};
//所有的報(bào)警變量和聲音文件名對(duì)應(yīng)關(guān)系表
//注意:變量名和文件名要和實(shí)際的變量名、文件名完全一致
//注意:聲音文件只支持wav文件
//注意:變量越靠前,則優(yōu)先級(jí)越高,在同時(shí)發(fā)生多個(gè)報(bào)警時(shí),優(yōu)先級(jí)最高的聲音優(yōu)先播放,而且任一時(shí)刻只能播放一個(gè)聲音
static struct datainfo data[]=
{
{"www","Windows XP 啟動(dòng).wav"},
{"testalarm","ringin.wav"},
{"qqq","Windows XP 關(guān)機(jī).wav"},
{"eee","Windows XP 注銷音.wav"}
};
static struct statusdatainfo statusdata[sizeof(data)/sizeof(data[0])];
////////////////////////////////////
int gscAction( void )
{
int totalnum=0; //總的報(bào)警變量數(shù)量,也等于總的報(bào)警聲音數(shù)量
int index=0; //循環(huán)變量
int hasfound=0; //已找到優(yōu)先級(jí)最高的報(bào)警變量
char * filename=NULL; //當(dāng)前要播放聲音的文件名
char * dir; //聲音文件存放的目錄
static char * currfilename=NULL; //當(dāng)前正在播放聲音的文件名,注意:該變量是靜態(tài)變量
static char FullName[200]; //當(dāng)前正在播放聲音的文件全名,注意:文件名全名不能太長,該變量是靜態(tài)變量
char * ack_; //報(bào)警確認(rèn)變量的名字,一次只能確認(rèn)優(yōu)先級(jí)最高的報(bào)警
int ack_status=0; //當(dāng)前確認(rèn)變量的狀態(tài)
totalnum=sizeof(data)/sizeof(struct datainfo); //報(bào)警變量的數(shù)量
ack_status=GetTagBit(ack_name);
for(index=0;index<totalnum;index++) //查找當(dāng)前第一個(gè)報(bào)警的變量所對(duì)應(yīng)的聲音文件名,搜索的順序決定了優(yōu)先級(jí)
{
if (statusdata[index].playing)
{
statusdata[index].prevStatus=GetTagBit(data[index].tagname);
if (ack_status) //確認(rèn)報(bào)警變量
{
ack_status=0;
statusdata[index].playing=0;
}
else
{
if (0==hasfound)
{
hasfound=1;
filename=data[index].soundname;
}
}
}
else
{
statusdata[index].playing=!statusdata[index].prevStatus && GetTagBit(data[index].tagname);
statusdata[index].prevStatus=GetTagBit(data[index].tagname);
if (statusdata[index].playing)
{
if(0==hasfound)
{
filename=data[index].soundname;
hasfound=1;
}
}
}
}
SetTagBit(ack_name,0);
if (filename!=currfilename) //當(dāng)要播放的聲音文件和當(dāng)前正在播放的聲音文件不同時(shí)才播放新的聲音
{
currfilename=filename; //修改當(dāng)前正在播放的聲音文件名
if (NULL==currfilename) //如果沒有報(bào)警則停止播放聲音
{
FullName[0]=0x0;
PlaySoundA(NULL,NULL,0x2000|1|8); //停止播放聲音
}
else //循環(huán)播放新的聲音文件
{
strcpy(FullName,dirname); //復(fù)制目錄名
strcat(FullName,currfilename); //合成聲音文件全名
PlaySoundA(FullName,NULL,0x2000|1|8); //播放聲音
}
}
return 0;
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1