很棘手!!窗口拦截问题!!

Mohoman 2003-08-10 07:04:38
每个系统提示窗体再出现在我们眼前的时候都是需要系统给他发出指令!!他才能出来!!!
如何在他接到指令之前,或者同时!!我们能够得到她接受的指令!!
在他没有出来之前!!把他做一些修改!!!然后再让他出来!!!!

有的朋友说HOOK但是具体解决方法我还是不知道啊!!!希望有经验的朋友帮忙!!
谢谢!!!

谢谢!!
...全文
81 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mohoman 2003-08-13
  • 打赏
  • 举报
回复
哦了哦了!!确实没看懂!!
hisofty 2003-08-13
  • 打赏
  • 举报
回复
我想,你根本就没看懂这点代码!!
Mohoman 2003-08-13
  • 打赏
  • 举报
回复
大哥!!你看看!
MsgBoxTitle = "MyTitle5"
MsgBox "haha", vbYesNo, MsgBoxTitle
这样的运行效过河你贴的这个运行结果都一样啊!!

怎么才能看出来修改的结果啊!!
hisofty 2003-08-13
  • 打赏
  • 举报
回复
楼主,你傻阿!好心帮你,还说风凉话!!
我帖的不就是在一些系统窗体出来前对它进行修改的一个例子吗!
tangjinn 2003-08-12
  • 打赏
  • 举报
回复
要是有这个DLL可以把windows改乱套, 呵呵。 拿来做病毒不错
Mohoman 2003-08-12
  • 打赏
  • 举报
回复
楼上的!! 你这个出来的效果!!就算没有这个bas也可以实现阿!!我晕到!!写了一大串
没有任何作用!
在他没有出来之前怎么知道他的位置阿!!!
然后修改它的位置!!!然后再让他出来!!!
miranda516 2003-08-12
  • 打赏
  • 举报
回复
关注中……
jornet 2003-08-12
  • 打赏
  • 举报
回复
用上帝之手才能写出来
hisofty 2003-08-12
  • 打赏
  • 举报
回复
更动MsgBox Button 标题(CBT Hook)

来源:cww

如果我们使用MsgBox,并设定其Buttons为vbYesNo,则出来的Button有 "是(Y)" 与 "否(N)"
,有没有可能变成"Yes(Y)"和 "No(N)"呢,或者有没有办法设定MsgBox的位置呢?如果我们
可以在MsgBox显示出来之前取得其hWnd,便可以进而更动其位置或Button的标题了;其实这
真的有些困难,因为MsgBox一呼叫,该Process便进入等待MsgBox结束的状态,连Timer都
不会动,所以想取得MsgBox的进一步资讯似乎很难。所以只好借重CBT Hook。

CBT Hook是做什麽用的呢?它是before activating, creating, destroying,
minimizing, maximizing, moving, or sizing a window; before completing a
system command; before removing a mouse or keyboard event from the
system message queue; before setting the keyboard focus; or before
synchronizing with the system message queue.在以上的状况发生之前拦截到讯息。
所以了,这就达到我们的目的 -->可在MsgBox display前取得其hWnd了。取得hWnd後再
使用EmunChildWindows()取得MsgBox的Control视窗,并取得"Button"型态者,进而判
断其Caption,并进行更改之。

这个程式重点在说明CBT Hook,我想没有人会为了更动MsgBox内的Button而如此做,应
会自行写一个Form,而来呼叫它,并可设定其位置。

'以下在Form
Private Sub Command1_Click()
Call EnableHook
MsgBoxTitle = "MyTitle5"
MsgBox "haha", vbYesNo, MsgBoxTitle
Call FreeHook

End Sub

'以下程式在.Bas
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lparam As Any) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lparam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Public Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5

Public hHook As Long
Public MsgBoxTitle as String

Public Sub EnableHook()
If hHook = 0 Then
hHook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, 0, App.ThreadID)
End If
End Sub
Public Sub FreeHook()
If hHook <> 0 Then
Call UnhookWindowsHookEx(hHook)
hHook = 0
End If
End Sub

Public Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lparam As Long) As Long
If nCode < 0 Then
HookProc = CallNextHookEx(hHook, nCode, wParam, lparam)
Exit Function
End If
'当MsgBox Activate之前去更改Button的标题
If nCode = HCBT_ACTIVATE Then
Dim str5 As String
Dim len5 As Long, i As Long
str5 = String(255, 0)
len5 = 256
i = GetWindowText(wParam, str5, len5)
str5 = Left(str5, InStr(1, str5, Chr(0)) - 1)
'如果Active Window上的标题是MsgBox上的标题
'
If str5 = MsgBoxTitle Then
'取得MsgBox上的所有子window
Call EnumChildWindows(wParam, AddressOf ChgButtonTitle, 0)
End If
End If
HookProc = 0 '令待完成的动作继续完成,若为1,则取消原本要完成的动作
End Function

Private Function ChgButtonTitle(ByVal hwnd As Long, ByVal lparam As Long) As Long
Dim clsName As String, len5 As Long, i As Long
Dim Title As String
If hwnd = 0 Then
ChgButtonTitle = 0
Exit Function
End If
clsName = String(255, 0)
len5 = 256
i = GetClassName(hwnd, clsName, 256)
clsName = Left(clsName, InStr(1, clsName, Chr(0)) - 1)
Title = String(255, 0)
i = GetWindowText(hwnd, Title, 256)
Title = Left(Title, InStr(1, Title, Chr(0)) - 1)
'找到Button型态的子Window,并更改其上的标题
If clsName = "Button" Then
If Title = "是(&Y)" Then
Call SetWindowText(hwnd, "Yes(&Y)")
Else
If Title = "否(&N)" Then
Call SetWindowText(hwnd, "No(&N)")
End If
End If
End If
ChgButtonTitle = 1 '表示继续找下一个子Window
End Function


boywang 2003-08-12
  • 打赏
  • 举报
回复
hook api?
James0001 2003-08-12
  • 打赏
  • 举报
回复
要 API Hook,自己写 DLL 。
sworddx 2003-08-12
  • 打赏
  • 举报
回复
很麻烦的问题。
pigpag 2003-08-11
  • 打赏
  • 举报
回复
//hook可以拦截本程序中的窗体的消息,要拦截操作系统中所有窗体.需要窗体句柄,怎么得到啊?

需要一个额外的DLL。可惜啊,本来我是有的,重装的时候格掉了,有忘了备份在什么地方。网上找找看
pigpag 2003-08-11
  • 打赏
  • 举报
回复
hlnpro(错误!死机?晕~~~):这种危险的事估计只有ServicePack Installer会去做。出错了跳脚都来不及
tangjinn 2003-08-11
  • 打赏
  • 举报
回复
hook可以拦截本程序中的窗体的消息,要拦截操作系统中所有窗体.需要窗体句柄,怎么得到啊?

关注
pigpag 2003-08-11
  • 打赏
  • 举报
回复
这个东西很有用,我一直在找啊!!!
没找到……
tangjinn 2003-08-11
  • 打赏
  • 举报
回复
pigpag(噼里啪啦) 你能确定吗?帮忙找找好吗?毕竟你用过, 谢谢
girl888 2003-08-11
  • 打赏
  • 举报
回复
用API吧
Mohoman 2003-08-11
  • 打赏
  • 举报
回复
偶晕倒!!Vxd 阿!!!哈哈!!!2000中能用吗?vb也写不出来啊!!!

这种效果曾经在WindowsFX 1.0中有!!!就可以提前知道!
FX2里面就没了!!!可能是捕捉不到!!影像效果阿!!

老人参 2003-08-11
  • 打赏
  • 举报
回复
用Vxd吧
加载更多回复(8)
“狙剑”是国内最近推出的一款功能强大的安全反黑工具,它提供系统监视、进程管理、磁盘文件管理、注册表检查、内核检查等功能。并且程序自带了很多系统监视功能,可以防止恶意软件对文件及注册表的修改,从而方便地手工查杀木马,是目前少数能与IceSword(冰刃)抗衡的反黑工具之一。   精简模式操作   当运行“狙剑”后,程序会自动缩小到系统栏中,双击图标可以展开软件的精简模式。精简模式包括进程管理、自启动程序管理等一些主要的安全功能。对不熟悉系统内部操作的用户来说,只需单击相应的功能按钮就可以完成所需要的操作。比如单击“进程”标签可以查看当前系统的进程信息,包括那些在任务管理器中查看不到的隐藏进程;单击“主动防御”功能可以有效阻止恶意程序的激活。主动防御的相关规则包括程序运行控制、钩子安装控制、程序写入控制、进程注入控制等。恶意程序做任何规则禁止的操作,程序都会进行拦截并提示用户注意。   专业模式操作   精简模式操作虽然可以帮助用户解决大部分常见问题,但如果遇到某些棘手问题,专业模式更胜一筹。   单击精简模式窗口中的“进入专业模式”命令进入专业模式,它的操作模式和冰刃有几分相似。下面就来看看在专业模式中,常用到的相关功能。   查杀木马   以下以查杀PcShare木马为例,阐述“狙剑”的使用方法。   PcShare木马采用反弹连接技术、HTTP隧道技术等,而且还使用了驱动隐藏模块,这样就可以更方便地隐藏和保护服务端程序。   首先查找PcShare木马的进程,因为无论是木马程序还是流氓病毒,只要查找到启动项和相关进程等信息,就可以清除恶意程序的相关内容。   在“狙剑”窗口中,单击“内核”下的“进程管理”命令,在进程列表中查看当前系统中的所有进程,包括那些被隐藏的木马服务端程序的进程。   单击鼠标右键中的“自动搜寻可疑模块”命令,程序自动扫描分析进程中的模块。该程序主要利用数字签名来进行模块好坏分析,因此没有数字签名的模块就会被检查出来,这里检测出一个名为“zbrmhjpa.dll”的可疑模块,而且该模块被插入到svchost.exe这个系统进程中。   单击“注册表”下的“自启动程序”命令,可以看到利用注册表、系统服务等多种方式启动的所有信息。启动列表里有两个可疑的启动项,其中一个启动项关联的是驱动隐藏模块,而另一个就是利用svchost.exe进程启动的可疑模块。清除起来很简单,在进程列表中找到“zbrmhjpa.dll”模块后,单击鼠标右键中的“卸载并删除”命令即可。另外在自启动列表中找到“zbrmhjpa”这项内容,同样单击鼠标右键中的“清除的时候删除文件”命令,这样就可以彻底清除该木马程序了。   自动修复   专业模式中的修复功能更加强大,“狙剑”自带的系统终极修复功能可以将系统还原到初装状态,也就是刚安装完Windows系统后的状态。当修复后第一次重新启动时,硬件驱动还未安装,修复完成后可能会出现桌面空白、较低的屏幕分辨率等状态,此修复并不会删除系统中的任何文件。因为安装的驱动程序其实都还在,只是系统暂时还不能装载而已,在大多数情况下只需要再重启一次,Windows系统就会自动将已经安装的驱动进行重新注册。   此功能的意义不言而喻,因为无论系统中了何种木马程序,都将在重启后变成一堆废物。它们的各种隐藏与保护手段都将失效,这时只需再用“狙剑”的文件验证功能对可疑文件进行筛选删除即可。但要特别注意,要防止被病毒木马二次感染,系统修复并不会删除文件,在打开磁盘分区时一定要注意里面的 AutoRun.inf文件。如果整个磁盘文件已被全部感染的话,该功能就无能为力了。   注册表操作   和其它安全工具一样,“狙剑”中也有一个注册表编辑器,这个编辑器是直接解析HIVE文件来实现注册表数据的读取与修改的,这相对于注册表来说已经是最底层的操作了,可以对最隐蔽的启动项进行查看与清除,同时也可以在恶意程序屏蔽注册表时进行操作。   文件管理   文件管理同样是安全检测的重点内容,选择需要查看的磁盘分区,对该分区的文件信息进行安全扫描,扫描结束后显示该分区的文件信息。程序自动统计出该磁盘中的文件数目,包括已有的和已经删除的文件和文件夹数目。通过右键菜单中的复制文件、破坏文件、查找文件命令可以对文件进行管理。   流数据扫描   许多用户在安装系统时都采用NTFS格式,而数据流正是NTFS格式下的概念。有人利用数据流来传播恶意程序,很多安全工具也加入了数据流的扫描检测,“ 狙剑”当然也不例外。单击“文件”下面中的“流数据扫描”命令,就可以发现隐藏在文件流中的病毒并清除,从而让系统变得更加的安全稳定。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧