找回密码
 加入
搜索
查看: 4503|回复: 10

[系统综合] 如何监控PC喇叭正在报警

  [复制链接]
发表于 2011-11-8 14:03:46 | 显示全部楼层 |阅读模式
PC喇叭正在报警,但是机器比较多,想让这个PC喇叭报警的机器弹出界面,PC喇叭报警的命令是其他软件发出的
发表于 2011-11-8 15:12:19 | 显示全部楼层
不会。期待高手的来解决
发表于 2011-11-8 21:21:33 | 显示全部楼层
这个恐怕还是要看楼主具体用的是什么软件,
关键是那个软件报警的触发条件及报警后产生的事件。
你那个软件难道除了声音报警,就没有界面提示吗?
最起码,那个软件应该有日志文件吧
判断一下那个日志文件里的内容是不是可以做到。

一个例子:内存报警器,内存占用率超过60%就开始报警 (XP SP3)
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <WinAPI.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 304, 156, 342, 110)
$Label1 = GUICtrlCreateLabel("内存报警器", 104, 56, 84, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $info=_WinAPI_GlobalMemoryStatus()
        If $info[0] > 60 Then audio()         
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Func audio()
    SoundPlay (@WindowsDir & "\Media\notify.wav")
        MsgBox(0,"","声音已报警!")
EndFunc
 楼主| 发表于 2011-11-9 11:44:21 | 显示全部楼层
有人帮忙不
发表于 2011-11-9 13:51:14 | 显示全部楼层
要对系统蜂鸣器进行hook,这个强项是P版哈
beep 是直接DeviceIoControl \device\beep
MsgBeep是NtUserCallOneParam(0x31)
发表于 2011-11-11 09:13:43 | 显示全部楼层
回复 5# menfan1

--------------------------------------------------------
嗯,就是说,要拦截系统蜂鸣器。
硬着头皮,去搜了P版的一些贴子看了下,还有网上的一些介绍。
疑惑很多呀:
Beep  其实是调用的 API 函数: MessageBeep
UDF上介绍 _WinAPI_MessageBeep()
经过排队的声音, MessageBeep 函数返回调用函数的控件和异步播放声音.
但查了很久,都没找到到底如何获取这个调用函数的控件。
另外,楼主的监控软件已经启动,怎么实现拦截蜂鸣器?以什么做触发条件?
难道说双击或单击鼠标启动那软件时,就立即HOOK,运行一个自定义循环?
然后再交还给原程序,直到报警。但原程序直接调用Beep报警,自定义循环如何知道Beep报警已经发生动作了?
这跟拦截鼠标或键盘是不一样的啊......
发表于 2011-11-12 10:15:10 | 显示全部楼层
更正一下,UDF调用beep的函数是_WinAPI_Beep(500,1000)
而 MessageBeep 函数测试不成功,返回值也不是true或False。

查看_WinAPI_Beep函数的原型,如下:
DllCall("Kernel32.dll", "int", "Beep", "dword", 500, "dword", 1000)

是通过DllCall调用了Kernel32.dll里面的Beep函数。
Beep函数通过循环和变频来使蜂鸣器发出不同的报警声,
若将Beep延时设置较长,则不能及时返回DllCall的值与参数数组。

按照5#所说来推理,就是安装钩子到这个dll里面,然后写一个自定义的Beep函数,加入弹窗部份代码。
则目标软件驱动DllCall来发声时,就被导入到被修改的Beep函数中,
这需要很清楚dll处理函数的机制才能做到。
处理完毕后,退出钩子,恢复原状。
说起来似乎能说通,可惜本人能力不够,没法验证。
发表于 2011-11-12 10:22:48 | 显示全部楼层
而且楼主所说的监控软件,其报警机制亦不确定。
是通过Beep报警呢?
还是通过声卡播放系统声音报警?
再或是目标软件自带的报警文件报警。
增加了拦截的难度。
还是判断目标软件在报警后除了发声,还发生其他哪些事件似乎要容易操作一些。
发表于 2011-11-12 22:02:38 | 显示全部楼层
用hook,是P版的强项
发表于 2011-11-12 23:07:42 | 显示全部楼层
最重要的是说明在什么情况下BEEP,没入系统?如果进了,WINDOWS下什么情况会BEEP报警,如果是,可能就真要HOOK了
发表于 2011-11-13 18:25:57 | 显示全部楼层
看来这个有点靠谱,在网上查到
对于调用DLL的beep来完成报警的程序而言,可以用Detours来HOOK目标DLL。
Detours是微软开发的一个函数库,具体用途是:拦截WIN32 API调用,实现WIN32 API的定制。
.....
后面内容看不懂....冏
涉及DLL注入,权限调用之类的,消化不了。

只有P版大神能搞定....
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 16:30 , Processed in 0.082694 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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