找回密码
 加入
搜索
查看: 9639|回复: 20

[AU3基础] 请教一下有人实现过禁止某个进程吗?[已解决]

 火.. [复制链接]
发表于 2010-11-14 18:44:16 | 显示全部楼层 |阅读模式
本帖最后由 itljl 于 2011-1-20 13:28 编辑

比如有个进程 test.exe,他会定时创建一个窗口。有办法用AU3实现禁止这个进程吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-11-15 09:29:24 | 显示全部楼层
结束这个进程就是了啊
发表于 2010-11-15 13:50:33 | 显示全部楼层
如果这个进程创建的窗口是单独进程,可以监控这个进程,出现就结束他。
如果不是单独进程,就监测窗口关闭。。。
发表于 2010-11-15 13:54:12 | 显示全部楼层
我也是用的一个循环:一发现这进程就杀掉他
发表于 2010-11-15 20:15:55 | 显示全部楼层
截取目标进程的User32.CreateWindowEx函数,判断第2个参数lpClassName,如果是指定的类名,则禁止创建。
发表于 2010-11-15 22:50:19 | 显示全部楼层
该帖被管理员或版主屏蔽
 楼主| 发表于 2010-11-17 13:49:27 | 显示全部楼层
楼上的楼上是怎么回事,谁敢屏P版的贴啊。
 楼主| 发表于 2010-11-17 13:49:52 | 显示全部楼层
回复 3# .個朲綉√


    进程必须要允许存在,想实现的是不允许其创建窗口(同时也不是发现窗口再关闭,那就迟了)。
发表于 2010-11-17 17:25:53 | 显示全部楼层
回复 7# itljl


    是我自己屏蔽的,原因是发现了你的通假字。
 楼主| 发表于 2010-11-17 20:32:29 | 显示全部楼层
回复 9# pusofalse

已修正,请P版指教。
发表于 2010-11-17 20:40:06 | 显示全部楼层
回复 10# itljl


    OK,解除屏蔽了。
 楼主| 发表于 2010-11-17 21:10:11 | 显示全部楼层
回复 5# pusofalse

谢谢指点啊,不过这些资料对我来说,要形成可用的代码,还有一定的难度!-_-!
发表于 2010-11-17 21:51:13 | 显示全部楼层
如果这个进程是用system这个用户启动的就没有窗口。
发表于 2010-11-17 22:13:57 | 显示全部楼层
挂钩CreateWindowEx函数之后,如果第三方进程不判断窗口是否建立成功,那么很可能会因此引发异常而直接退出,比如内存不能为“read”等等,如果目标进程有异常处理机制还好,就怕它在没判断的情况下直接创建后续的子控件。

以下这个例子还好,我测试了一下不会引发异常,但不能保证大一点的程序同样可以不发生错误。

test.au3(先编译成test.exe)。
Opt("GUIOnEventMode", 1)

$iWindow = 0

$hGUI = GUICreate("Test", 220, 100)
GUISetOnEvent(-3, "_Exit")

GUICtrlCreateButton("Create a new window", 40, 30, 140, 20)
GUICtrlSetOnEvent(-1, "_CreateWindow")

GUISetState(@SW_SHOW, $hGUI)

While 1
        Sleep(100)
WEnd

Func _Exit()
        Exit
EndFunc

Func _CreateWindow()
        GUICreate("Sub window " & $iWindow, 200, 70)
        GUISetOnEvent(-3, "_CloseSubWindow")
        GUISetState(@SW_SHOW)
        
        $iWindow += 1
EndFunc        ;==>_CreateWindow

Func _CloseSubWindow()
        GUIDelete(@GUI_WinHandle)
EndFunc        ;==>_CloseSubWindow


HookCreateWindow.au3:
#include <RTApiHook32.au3>

$hProcess = _RTOpenProcess("test.exe")

$hCallBack = DllCallBackRegister("_CreateWindowCallBack", "dword", "handle;ptr")
$pCallBack = DllCallBackGetPtr($hCallBack)

$pCreateWindowExW = _RTGetProcAddress("User32.dll", "CreateWindowExW")
$tCreateWindowExW = _RTApiHookEx($hProcess, $pCreateWindowExW, 12, $pCallBack, $APIHOOK_Flags_Default)

OnAutoItExitRegister("_Restore")

While 1
        Sleep(100)
WEnd

Func _Restore()
        _RTApiUnhook($hProcess, $pCreateWindowExW, DllStructGetData($tCreateWindowExW, "Entrypoint"))
        DllCallBackFree($hCallBack)
EndFunc        ;==>_Restore

Func _CreateWindowCallBack($hProcess, $pCallInfo)

        Local $pClassName = _RTApiHookReadParam($hProcess, $pCallInfo, 2)
        Local $sClassName = _RTReadProcessMemory($hProcess, $pClassName, "", 1024, "wstr")

 ;        If ($sClassName = "XXXX") Then

                _RTApiHookSetRetVal($hProcess, $pCallInfo, 0)
                _RTApiHookSetError($hProcess, $pCallInfo, 1407)

                Return $APIHOOK_Flags_Call_Abort
 ;        EndIf
EndFunc        ;==>_CreateWinowCallBack


测试时先运行test.exe,然后运行HookCreateWindow.au3。

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
tryhi + 10 + 5 好例子

查看全部评分

发表于 2010-11-17 22:16:59 | 显示全部楼层
回复 14# pusofalse


    好帖子。。。学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-22 06:12 , Processed in 0.100788 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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