WINCC 6.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",NULL,1) ;
return 0;
}
把他改成当 BOOL量“QR”为1时,"c:\\.Alarm03"一直报警声音循环响;
当 BOOL量“QR”为0时,"c:\\.Alarm03"报警声音停止
#include "apdefap.h"
BOOL g_QR_flag = FALSE;
int gscAction( void )
{
#pragma option(mbcs)
#pragma code("winmm.dll")
void WINAPI PlaySoundA(char*pszSound,char*hmode,DWORD dwFlag);
#pragma code()
if(g_QR_flag)
{
PlaySoundA("c:\\.Alarm03",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC);
}
else
{
PlaySoundA(NULL, NULL, NULL);
}
return 0;
}
在主程序中,需要根据需要改变g_QR_flag的值来控制报警声音的开启与关闭。 chatGPT_小控 发表于 2023-4-11 14:02
#include "apdefap.h"
BOOL g_QR_flag = FALSE;
{
PlaySoundA("c:\\.Alarm03",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC);
}
中 ,SND_FILENAME | SND_LOOP | SND_ASYNC 这三个代表什么含义 这般难离舍 发表于 2023-04-11 14:10
{
PlaySoundA("c:\\.Alarm03",NULL,SND_FILEN ...
- `SND_FILENAME`:指定播放的是一个文件名,而不是其他形式的数据。这是一个必要的标志,否则 PlaySoundA 将会将第一个参数解释为内存中的音频数据。
- `SND_LOOP`:表示播放音频文件时,循环应该发生多少次。如果没有指定此标志,则默认情况下不执行循环。
- `SND_ASYNC`:使用此标志时,播放声音与主线程异步,也就是说,PlaySoundA 函数将立即返回并且在后台播放声音文件。 chatGPT_小控 发表于 2023-4-11 14:11
- `SND_FILENAME`:指定播放的是一个文件名,而不是其他形式的数据。这是一个必要的标志,否则 PlaySound ...
{
PlaySoundA("c:\\.Alarm03",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC);
}
中 ,SND_FILENAME | SND_LOOP | SND_ASYNC 这三个我在使用中 需要将三个参数如何定义 如何给数 这般难离舍 发表于 2023-04-11 14:14
{
PlaySoundA("c:\\.Alarm03",NULL,SND_FILEN ...
在使用 PlaySoundA 函数时,第一个参数应该是一个字符串常量,表示音频文件的完整路径和文件名。第二个参数应该为 NULL,表示没有特别的设备驱动器应该用于播放声音。第三个参数,请使用你所需要的标志。在这里,我们将使用 `SND_FILENAME | SND_LOOP | SND_ASYNC` 作为第三个参数,以便播放指定的音频文件,并将循环和异步播放标志传递给 PlaySoundA 函数。
如果需要在程序运行过程中根据需求控制报警声音的开启与关闭,你可以定义一个 BOOL 类型的变量来代表报警声音的状态,然后根据这个变量的值,调用 PlaySoundA 函数时添加或移除相应的标志即可。例如,要控制是否启用循环播放,可以使用一个名为 `loop_enabled` 的 BOOL 变量,如下所示:
BOOL loop_enabled = TRUE;
if (loop_enabled) {
PlaySoundA("c:\\.Alarm03", NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);
} else {
PlaySoundA("c:\\.Alarm03", NULL, SND_FILENAME | SND_ASYNC);
}
在这个例子中,当 `loop_enabled` 为 TRUE 时,将使用 `SND_LOOP` 标志,以循环播放指定的音频文件。否则,将不使用该标志,表示只播放一次。 我这样写的程序
#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;
if("QRR")
{
PlaySoundA("c:\\Alarm03.wav",NULL,SND_FILENAME | SND_LOOP | SND_ASYNC);
}
else
{
PlaySoundA(NULL, NULL, NULL);
}
}
编译后出错:
undefined identifier 'SND_FILENAME '
undefined identifier 'SND_LOOP'
undefined identifier 'SND_ASYNC'
type mismatch in argument 3 这般难离舍 发表于 2023-04-11 14:23
我这样写的程序
#include "apdefap.h"
int gscAction ...
问题原因是你没有包含 `<windows.h>` 头文件,该头文件中包含了 SND_FILENAME、SND_LOOP、SND_ASYNC 等音频播放相关的宏定义。
以下是修改后的代码示例:
#include <windows.h>
#include "apdefap.h"
BOOL QRR = TRUE;
int gscAction( void )
{
#pragma option(mbcs)
#pragma code("winmm.dll")
void WINAPI PlaySoundA(char* pszSound, char* hmode, DWORD dwFlag);
#pragma code()
if(QRR)
{
PlaySoundA("c:\\Alarm03.wav", NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);
}
else
{
PlaySoundA(NULL, NULL, NULL);
}
return 0;
}
在程序中,我使用了一个名为 `QRR` 的 BOOL 类型变量来控制报警声音的开启与关闭。如果 `QRR` 为 TRUE,则使用 `SND_FILENAME | SND_LOOP | SND_ASYNC` 标志来播放指定的音频文件,并循环播放;否则,调用 PlaySoundA 函数时不添加任何标志,表示停止播放声音。
建议你在以后的学习和开发中,注意加强对于相关头文件和宏定义的了解。 如何做到#include <windows.h> 加入到开头的呢。 WINCC6.2脚本编辑器中无法写入到开头 这般难离舍 发表于 2023-04-11 14:26
如何做到#include &lt;windows.h&gt; 加入到开头的呢。 WINC ...
确实,WINCC 6.2 的脚本编辑器无法直接加入头文件。不过,你可以通过以下两种方式解决这个问题:
1. 在工程配置中的编译器选项中添加预编译指令 `#include &lt;windows.h&gt;`,这样编译器就会默认加入该头文件。
2. 在你要使用 PlaySoundA 函数的脚本模块中,手动添加头文件 `#include &lt;windows.h&gt;` 即可。
第一种方法需要在工程构建时进行特定配置,而第二种方法则需要在每个需要使用该函数的脚本模块中手动添加头文件,选择哪种方法取决于你的具体情况。
页:
[1]