发表于:2005-10-28 16:35:00
1楼
#include "apdefap.h"
int gscAction(void)
{
#pragma code("Winmm.dll")
BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);
#pragma code()
DWORD SND_ASYNC=0x0001;
DWORD SND_LOOP=0x0008;
DWORD alarmunack;
LPCMN_ERROR errorunack;
MSRTGetMsgQuit(&alarmunack,errorunack);
if(alarmunack>0)
sndPlaySoundA("C:\WINNT\Media\\ringin.wav",SND_ASYNC|SND_LOOP);
return 1;
}
把这段放在全局脚本中,同时定义触发器的时间为500ms,然后在计算机的启动属性里把全局脚本勾上,运行即可。在新的报警到来的时候,按单个确认后,声音就消失了。这里是针对5.2版本的
如果是6.0的,情况如下:
首先在变量管理器建立一个内部变量alarm_tag,32wei
接上:首先在变量管理器里建立一个内部BOOL变量alarm_tag
然后在全局脚本里加上如下语句:
#include "apdefap.h"
int gscAction(void)
{
DWORD alarmunack;
LPCMN_ERROR errorunack;
MSRTGetMsgQuit(&alarmunack,errorunack);
if(alarmunack>0)
SetTagBit("alarm_tag",TRUE);
return 1;
}
全局脚本的扫描周期改为500ms
然后在HORN里的第二个标签里,左边的变量选择alarm_tag,右边选择一段音乐,中间不需要填写
同样要在计算机的启动属性里把全局脚本给加上,当新的报警到来时,按下单个确认键后,报警消失.
对此问题解决的核心在于,怎样用一个函数去识别一个新到且没有经过确认的消息,消息一来产生报警,而函数MSRTGetMsgQuit(DWORD dw,LPCMN_ERROR lp)正可以实现这样一个功能,它能够识别报警管理器中有多少个没有确认的消息,dw中存放未确认消息的个数,按单个确认后,dw自动减1,直到dw为0。用一个if语句对dw进行判断,在5.2里可以调用WINDOWS操作系统内部的动态函数实现发声,而在6.0里集成有HORN的功能,只需有一个内部变量,既可实现声音报警