找回密码
 加入
搜索
查看: 4547|回复: 4

[网络通信] 如何监控计算机打开的IE标题

[复制链接]
发表于 2012-4-6 15:06:32 | 显示全部楼层 |阅读模式
本帖最后由 半翅鸟 于 2012-4-6 15:34 编辑

我现在给我的一部分学生讲解AU3初步的使用,其实我也是一知半解,不过是引导一下他们,有个事做,但是我的学生是初中生,很爱玩游戏,小游戏以及反恐等。
我现在可以监控进程,大型游戏基本玩不了了,但是网页小游戏还可以玩,我又不想禁止flash,能不能监控IE的打开,一旦打开一个网页,用正则检测其标题,如果包含小游戏三个字,则关闭程序,发出提醒。
这个过程有两个问题,如何监控网页的打开呢?
Opt("TrayIconHide",1)
#include <file.au3>
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run","ProgramLimit","REG_SZ",@ScriptDir&"\ProgrameLimit.exe");添加主程序开机自启动
$filepath=@WindowsDir&"\ProgramLimit.dat";该文件远程下载我电脑上的文本文件,以便于远程维护更新
$file=FileOpen(@WindowsDir&"\ProgramLimit.dat",0)
$linesum=0

while 1
        If ProcessExists("Client.exe") Then
                ProcessClose("Client.exe")
        EndIf
        If ProcessExists("DNFchina.exe") Then
                ProcessClose("DNFchina.exe");地下城与勇士,呵呵,这样限制的东西 
        EndIf
        If ProcessExists("MATOnline.exe") Then
                ProcessClose("MATOnline.exe")
        EndIf
        If ProcessExists("QQDownload.exe") Then
                ProcessClose("QQDownload.exe")
        EndIf
        If ProcessExists("QQGame.exe") Then
                ProcessClose("QQGame.exe");QQ游戏也别玩了吧.好好学习才是最关键的.
        EndIf
        If ProcessExists("QQSG.exe") Then
                ProcessClose("QQSG.exe")
        EndIf
        If ProcessExists("QQSpeedLauncher.exe") Then
                ProcessClose("QQSpeedLauncher.exe")
        EndIf
        If ProcessExists("QQSpeedRepairer.exe") Then
                ProcessClose("QQSpeedRepairer.exe")
        EndIf
        If ProcessExists("QQLogin.exe") Then
                ProcessClose("QQLogin.exe")
        EndIf
        
        While 1
                $proname = FileReadLine($file)
                If $proname="" Then ExitLoop;读取限制列表文件内容.
                $linesum=$linesum+1
        Wend
        For $i=1 To $linesum
                $proname=FileReadLine($file,$i)
                If ProcessExists($proname)>0 Then
                        ProcessClose($proname)
                EndIf
        Next
        
Sleep(1000)
WEnd
发表于 2012-4-6 17:06:31 | 显示全部楼层
需要枚举 IEFrame 类窗口
发表于 2012-4-6 19:23:43 | 显示全部楼层

Opt("WinTitleMatchMode",4)
If WinExists("[CLASS:IEFrame]") Then
    MsgBox(0, "", "ie窗口存在")
EndIf
WinActivate("[CLASS:IEFrame]")
Sleep(200)
Send("^w")
发表于 2012-4-6 19:45:29 | 显示全部楼层
本帖最后由 veket_linux 于 2012-4-6 20:00 编辑


$keywords = "狙击手|小游戏|网页游戏|格斗|4399|7k7k"
$name = StringSplit($keywords,"|")
Opt("WinTitleMatchMode",2)
HotKeySet ( "^1" , "procquit" )

While True
        For $i = 1 To $name[0]
                If WinExists($name[$i]) Then
                        WinClose($name[$i])
                        MsgBox(48,"禁止玩小游戏","",1)
                EndIf
        Next
        Sleep(2000)
WEnd

Func procquit()
        Exit
EndFunc

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-4-6 20:20:03 | 显示全部楼层
楼主的代码层次不清, 不易阅读.
既然要用到配置文件, 那么其实可以减少很多代码了!
出于对楼主职业的敬意, 写了一个完整版的:
Opt("TrayIconHide", 1)
Local $regpath = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"

$str =  RegRead($regpath, "ProgramLimit")
If $str <> @ScriptFullPath Then RegWrite($regpath, "ProgramLimit", "REG_SZ", @ScriptFullPath) ;添加主程序开机自启动

Global $filepath = @WindowsDir & "\ProgramLimit.dat";该文件远程下载我电脑上的文本文件,以便于远程维护更新

While 1
        _CheckProcess() ; 按'需'杀进程
        _CheckWins()     ; 按'需'杀窗口
        Sleep(888)
WEnd

Func _CheckProcess()
        $s = IniReadSection($filepath, 'Deny Process')
        If @error Then Return
        For $i = 1 To $s[0][0]
                If ProcessExists($s[$i][0]) And $s[$i][1] = 1 Then ProcessClose($s[$i][0])
        Next
EndFunc   ;==>_CheckProcess

Func _CheckWins()
        $s = IniReadSection($filepath, 'Deny Wins')
        If @error Then Return
        $title = WinGetTitle("[active]") ; 获取当前 激活/工作中 的窗口标题
        If $title = '' Then Return
        For $i = 1 To $s[0][0]
                If StringInStr($title, $s[$i][0]) And $s[$i][1] = 1 Then
                        $time = TimerInit()
                        While 1
                                WinClose($title) ; 以循环关闭所有同名窗口!
                                If Not WinExists($title) Then ExitLoop
                                If TimerDiff($time) > 2000 Then ExitLoop ; 预防死循环, 超时2秒也退出
                        WEnd
                EndIf
        Next
EndFunc   ;==>_CheckWins

#cs
        ; $filepath  [ProgramLimit.dat] 配置文件示例:
        [Deny Process]
        dnf.exe=1
        crossfire.exe=1
        TypeEasy.exe=0
        
        [Deny Wins]
        游戏=1
        电影=1
        音乐=0
        ;  1 为禁止, 0 不禁止  ; 学习之余, 还是要有适当娱乐时间吧?
#ce
按楼主的需要, 还应该配合进程隐藏或提升进程权限等功能, 预防进程被故意关闭.
以上功能, 请在论坛里搜索吧.

评分

参与人数 1金钱 +30 贡献 +2 收起 理由
afan + 30 + 2

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-29 15:40 , Processed in 0.096804 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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