请教一下有人实现过禁止某个进程吗?[已解决]
本帖最后由 itljl 于 2011-1-20 13:28 编辑比如有个进程 test.exe,他会定时创建一个窗口。有办法用AU3实现禁止这个进程吗? 结束这个进程就是了啊 如果这个进程创建的窗口是单独进程,可以监控这个进程,出现就结束他。
如果不是单独进程,就监测窗口关闭。。。 我也是用的一个循环:一发现这进程就杀掉他 截取目标进程的User32.CreateWindowEx函数,判断第2个参数lpClassName,如果是指定的类名,则禁止创建。 该帖被管理员或版主屏蔽 楼上的楼上是怎么回事,谁敢屏P版的贴啊。 回复 3# .個朲綉√
进程必须要允许存在,想实现的是不允许其创建窗口(同时也不是发现窗口再关闭,那就迟了)。 回复 7# itljl
是我自己屏蔽的,原因是发现了你的通假字。 回复 9# pusofalse
已修正,请P版指教。 回复 10# itljl
OK,解除屏蔽了。 回复 5# pusofalse
谢谢指点啊,不过这些资料对我来说,要形成可用的代码,还有一定的难度!-_-! 如果这个进程是用system这个用户启动的就没有窗口。 挂钩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。 回复 14# pusofalse
好帖子。。。学习了
页:
[1]
2