易语言怎么判断电脑是否有声音输出?

其实就是想判断视频是否暂停了,我想通过判断是否有声音来判断是否暂停了。... 其实就是想判断视频是否暂停了,我想通过判断是否有声音来判断是否暂停了。 展开
 我来答
灵殇影落
2014-12-24 · TA获得超过420个赞
知道小有建树答主
回答量:184
采纳率:100%
帮助的人:181万
展开全部

  如果是单纯判断声音,那么如果用户还在播放其他音频呢?

  你可以尝试获取播放器的前台程序句柄,然后再寻找子控件,找到对应的播放/暂停键判断。

  需要使用API,API声明如下:

.版本 2

.DLL命令 取窗口标题_, 整数型, "user32", "GetWindowTextA", , , 取得一个窗体的标题(caption)文字,或者一个控件的内容(在vb里使用:使用vb窗体或控件的caption或text属性)  复制到lpString的字串长度;不包括空中止字符。会设置GetLastError
    .参数 窗口句柄, 整数型, , 欲获取文字的那个窗口的句柄
    .参数 缓冲区, 文本型, , 预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入
    .参数 缓冲尺寸, 整数型, , lp缓冲区的长度;

.DLL命令 GetWindowThreadProcessId, 整数型, "user32"
    .参数 hwnd, 整数型
    .参数 lpdwProcessId, 整数型, 传址

.DLL命令 寻找子窗口_, 整数型, "user32", "FindWindowExA", , , 在窗口列表中寻找与指定条件相符的第一个子窗口  找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
    .参数 窗口句柄1, 整数型, , 在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)
    .参数 窗口句柄2, 整数型, , 从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
    .参数 欲搜索的类名1, 文本型, , 欲搜索的类名。“”表示忽略
    .参数 欲搜索的类名2, 文本型, , 欲搜索的类名。“”表示忽略;

.DLL命令 发送消息_, 整数型, "user32", "SendMessageA", , , 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, ; SendMessageByString是该函数的“类型安全”声明形式 由具体的消息决定
    .参数 窗口句柄, 整数型, , 要接收消息的那个窗口的句柄
    .参数 信息值, 整数型, , 消息的标识符
    .参数 参数一, 逻辑型, , 具体取决于消息
    .参数 参数二, 整数型, , 具体取决于消息;

  在程序集中,调用命令如下:

.版本 2

.子程序 API_取组件句柄, 整数型
.参数 父窗口句柄, 整数型
.参数 开始寻找的组件句柄, 整数型, 可空, 如果指定则从该组件开始寻找,为空或为0则从开始寻找。
.参数 欲寻找的组件窗口类名, 文本型, 可空, 欲寻找的组件的窗口类名,为空则寻找所有类型的组件。
.参数 欲寻找的组件文本, 文本型, 可空, 欲寻找的组件的标题、内容等属性,为空则寻找所有组件。

返回 (寻找子窗口_ (父窗口句柄, 开始寻找的组件句柄, 欲寻找的组件窗口类名, 欲寻找的组件文本))

.子程序 API_取窗口标题, 整数型
.参数 句柄, 整数型, , 可以是窗口的,也可以是组件的。
.参数 保存标题的文本变量, 文本型, 参考
.参数 缓冲区长度, 整数型, 可空, 欲保存的结果长度,若取得的结果长度大于本参数则去除多余的文本。为空则默认为255。

.如果真 (是否为空 (缓冲区长度))
    缓冲区长度 = 255
.如果真结束
保存标题的文本变量 = 取空白文本 (缓冲区长度)
返回 (取窗口标题_ (句柄, 保存标题的文本变量, 缓冲区长度))

.版本 2
.支持库 eAPI

.子程序 进程取句柄, 整数型, , 区分大小写
.参数 进程名, 文本型
.局部变量 所有句柄, 文本型, , "0"
.局部变量 计次1, 整数型
.局部变量 进程ID, 整数型
.局部变量 所有进程, 进程信息, , "0"
.局部变量 计次2, 整数型
.局部变量 指定进程ID, 整数型
.局部变量 保存, 文本型

所有句柄 = 取所有窗口列表 ()
所有进程 = 取系统进程列表 ()
.计次循环首 (取数组成员数 (所有进程), 计次2)
    .如果真 (所有进程 [计次2].进程名称 = 进程名)
        指定进程ID = 所有进程 [计次2].进程标识符
        跳出循环 ()
    .如果真结束

.计次循环尾 ()
.计次循环首 (取数组成员数 (所有句柄), 计次1)
    GetWindowThreadProcessId (到数值 (所有句柄 [计次1]), 进程ID)
    保存 = “”
    .如果真 (进程ID = 指定进程ID)
        保存 = 所有句柄 [计次1]
        跳出循环 ()
    .如果真结束

.计次循环尾 ()
返回 (到整数 (保存))

  调用实例如下:

.版本 2
.支持库 eAPI
.支持库 spec

    寻找的标题 = “Win32.Rbot专用查杀工具”
    窗口列表 = 取所有窗口列表 ()
    .计次循环首 (取数组成员数 (窗口列表), Temp)
        .如果真 (取窗口标题 (到整数 (窗口列表 [Temp])) = 寻找的标题)
            程序句柄 = 到整数 (窗口列表 [Temp])
        .如果真结束
    .计次循环尾 ()
按钮句柄 = 取组件句柄 (程序句柄, 0, “Button”, “杀毒”)
.判断循环首 (按钮句柄 ≠ 0)
    API_取窗口标题 (按钮句柄, 缓冲区, )
    .如果真 (缓冲区 = “杀毒”)
        跳出循环 ()
    .如果真结束
    按钮句柄 = 取组件句柄 (程序句柄, , “Button”, “杀毒”)
.判断循环尾 ()
API_取窗口标题 (按钮句柄, 缓冲区)
.如果真 (缓冲区 = “杀毒”)
    发送消息_ (按钮句柄, 245, 真, 0)

  这样的效果就是,在所有前台进程中遍历寻找一个窗口标题是“Win32.Rbot专用查杀工具
”的应用程序的窗口,获取其句柄,然后在这个窗口中寻找类名为“Button”、标题为“杀毒”的子控件。如果是,则单击之。

  以上实例代码稍加修改即符合你的要求。

  如有疑问请追问。

追问
我判断的是网页里播放器的声音
追答
  网页播放器就没有办法了,可以试一试抓取flash状态来实现。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式