wincc6.2
wincc6.2的C脚本中#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
#pragma code("winmm.dll")
void WINAPI PlaySoundA(char*pszSound,char*hmode,DWORD dwFlag);
#pragma code()
PlaySoundA("c:\\Alarm03.wav",NULL,1) ;
return 0;
}
将此脚本修改成:
如果BOOL量QRR变为1时,循环播放c:\\Alarm03.wav。
如果BOOL量QRR变为0时,停止播放
int gscAction( void )
{
#pragma option(mbcs)
#pragma code("winmm.dll")
static BOOL bPlaying = FALSE;
static HWAVEOUT hWaveOut;
if(QRR) // 如果QRR为1,则开始播放音频
{
if(!bPlaying) // 如果之前没有在播放,则开始播放
{
bPlaying = TRUE;
WAVEFORMATEX wf;
memset(&wf, 0x00, sizeof(WAVEFORMATEX));
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.nChannels = 1;
wf.nSamplesPerSec = 44100;
wf.nAvgBytesPerSec = 88200;
wf.nBlockAlign = 2;
wf.wBitsPerSample = 16;
DWORD dwFlags = SND_FILENAME | SND_ASYNC | SND_LOOP;
if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &wf, NULL, 0, CALLBACK_NULL) == MMSYSERR_NOERROR)
{
waveOutSetVolume(hWaveOut, 0xFFFF); // 设置音量为最大
if(waveOutPrepareHeader(hWaveOut, NULL, 0) == MMSYSERR_NOERROR)
{
if(waveOutWrite(hWaveOut, (const PWAVEHDR)"c:\\Alarm03.wav", sizeof(WAVEHDR)) == MMSYSERR_NOERROR)
{
waveOutGetVolume(hWaveOut, (LPDWORD)&dwFlags); // 获取当前音量
dwFlags &= 0xFFFF; // 只保留低16位,即左右声道的音量值
dwFlags |= dwFlags << 16; // 将左右声道的音量值分别赋给高低16位
waveOutSetVolume(hWaveOut, dwFlags); // 恢复音量
}
}
}
}
}
else // 如果QRR为0,则停止播放音频
{
if(bPlaying) // 如果之前在播放,则停止播放
{
bPlaying = FALSE;
waveOutReset(hWaveOut);
waveOutUnprepareHeader(hWaveOut, NULL, 0);
waveOutClose(hWaveOut);
hWaveOut = NULL;
}
}
#pragma code()
return 0;
} 这个脚本太复杂了,我想要个简单点的代码;
实现这个功能就行:
如果BOOL量QRR变为1时,循环播放c:\\Alarm03.wav。
如果BOOL量QRR变为0时,停止播放 这般难离舍 发表于 2023-04-13 10:27
这个脚本太复杂了,我想要个简单点的代码;
实现这个 ...
好的,以下是一个简单的代码实现:
int gscAction(void) {
static BOOL bPlaying = FALSE;
if (QRR && !bPlaying) {
PlaySound("c:\\Alarm03.wav", NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
bPlaying = TRUE;
} else if (!QRR && bPlaying) {
PlaySound(NULL, NULL, SND_PURGE);
bPlaying = FALSE;
}
return 0;
}
首先,我们定义了一个静态变量`bPlaying`用来存储当前是否正在播放音频。如果`QRR`为1且`bPlaying`为假,则开始播放音频;如果`QRR`为0且`bPlaying`为真,则停止播放音频。
在开始播放时,我们使用`PlaySound`函数循环播放指定文件,并将`bPlaying`设为真。在停止播放时,我们使用`PlaySound`并将第一个参数设为`NULL`,以停止播放,并将`bPlaying`设为假。
该脚本较为简单,适用于基本的应用场景。
页:
[1]