找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5451|回复: 0
打印 上一主题 下一主题
收起左侧

wincc声音报警C脚本版

[复制链接]
跳转到指定楼层
楼主
ID:140343 发表于 2016-9-24 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//wincc声音报警C脚本版,和wincc自身的报警没有任何关系,所以不要和wincc自带的报警相关联


#include "apdefap.h"


//播放声音的函数声明
#pragma code("winmm.dll")
VOID WINAPI PlaySoundA(char *,char *,DWORD);
#pragma code()

struct datainfo    //变量名和声音文件名的对应关系
{
    const char * const tagname;    //变量名
    const char * const soundname;    //声音文件名
};
struct statusdatainfo        //保存报警变量的状态信息
{
    int prevStatus;
    int playing;
};
//所有的报警变量和声音文件名对应关系表
//注意:变量名和文件名要和实际的变量名、文件名完全一致
//注意:声音文件只支持wav文件
//注意:变量越靠前,则优先级越高,在同时发生多个报警时,优先级最高的声音优先播放,而且任一时刻只能播放一个声音
static struct datainfo data[]=   
{
{"www","Windows XP 启动.wav"},     
{"testalarm","ringin.wav"},
{"qqq","Windows XP 关机.wav"},
{"eee","Windows XP 注销音.wav"}
};

static struct statusdatainfo  statusdata[sizeof(data)/sizeof(data[0])];
////////////////////////////////////

int gscAction( void )
{
int totalnum=0;    //总的报警变量数量,也等于总的报警声音数量
int index=0;    //循环变量
int hasfound=0;    //已找到优先级最高的报警变量
char * filename=NULL;    //当前要播放声音的文件名
char * dir;    //声音文件存放的目录
static char * currfilename=NULL;    //当前正在播放声音的文件名,注意:该变量是静态变量
static char  FullName[200];    //当前正在播放声音的文件全名,注意:文件名全名不能太长,该变量是静态变量
char * ack_; //报警确认变量的名字,一次只能确认优先级最高的报警
int ack_status=0;    //当前确认变量的状态

totalnum=sizeof(data)/sizeof(struct datainfo);    //报警变量的数量
ack_status=GetTagBit(ack_name);

for(index=0;index<totalnum;index++)    //查找当前第一个报警的变量所对应的声音文件名,搜索的顺序决定了优先级
{
    if (statusdata[index].playing)
    {
        statusdata[index].prevStatus=GetTagBit(data[index].tagname);
        if (ack_status)    //确认报警变量
        {
            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)    //当要播放的声音文件和当前正在播放的声音文件不同时才播放新的声音
{
    currfilename=filename;        //修改当前正在播放的声音文件名
   
    if (NULL==currfilename)    //如果没有报警则停止播放声音
    {
        FullName[0]=0x0;
        PlaySoundA(NULL,NULL,0x2000|1|8);        //停止播放声音
    }   
    else    //循环播放新的声音文件
    {
        strcpy(FullName,dirname);        //复制目录名
        strcat(FullName,currfilename);        //合成声音文件全名
        PlaySoundA(FullName,NULL,0x2000|1|8);    //播放声音
    }   
}

return 0;


}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表