一句话获取webbrowser控句柄句。网上大部吩是用findwindowex枚举法,如果一个窗体上有多个网页控件,怎么区分哪个是Webbrowser1,Webbrowser2的句柄?
我用VB6创建多线程,在线程中加载Web控件,结果控件出来了,但是显示不了网页.
正常的应该有3层句柄树(Shell Embedding》Shell DocObject View》Internet Explorer_Server),结果他只有Shell Embedding。
所以WebBrowser1.Navigate "https://www.baidu.com"就显示不出来了。可能和VB6的包装技术有关。
多线程中初始化用2句:
CreateIExprSrvObj 0&, 4&, 0& 'VB6运行库初始化
'CoInitialize 0 '用这句可以加载第三方控件OCX,但是同时下载XMLHTTP时不返回结果
CoInitializeEx ByVal 0&, 8& 'COM组件初始化,用这句没法加载第三方OCX控件
区别:
用了CoInitialize ,可以显示网页,但是网页变成一个独立窗口了,直接显示在桌面上了(父窗口本来是Form2).
用CoInitializeEx 这个API,可以显示,但是少了2个子层,加载不了网页。所以一直在研究有什么破解方法。
还可以用动态加载控件等技术加载网页控件,显示结果都一样少了2层。而且对象没法用(WebBrowser1.Navigate),一执行就崩溃。
看看有没有高手能搞定?
所以花了好多时间研究如何把WebBrowser1变成正常,怎么试都没用。
最后还是搞回来,如何得到webbrowser1的句柄,还用了tOle.GetWindow()这样的方法,普通EXE有效,用于多线程结果就崩溃。
原理IUnknown对象,方法:GetWindow,搜必应,结果出来Function IUnknown_GetWindow Lib "shlwapi.dll",原来还有这种API呀,效果不错。
Dim tOle As OLelib.IOleWindow
Function IUnknown_GetWindow Lib "shlwapi.dll" (_ ByVal punk As IUnknown, _ ByRef phwnd As LongPtr _) As Long
SHLWAPI.dll:
IUnknown_GetSite IUnknown_GetWindow IUnknown_QueryService IUnknown_Set
IUnknown_SetSite QISearch SHCreateThread SHIsChildOrSelf
SHRegGetValueFromHKCUHKLM SHStrDupW StrCmpCW StrCmpICW
StrRetToStrW
VB6一句话获取Webbrowser控件句柄【史上最强】
需积分: 50 157 浏览量
2019-05-03
02:13:31
上传
评论
收藏 16KB ZIP 举报
专注VB编程开发20年
- 粉丝: 1254
- 资源: 68
最新资源
- 基于MQTT的智能宠物投喂系统
- 312749069629470selfieU重绘.apk
- http%3A%2F%2Fimg.wsdl.vivo.com.cn%2Fappstore%2Fdeveloper%2Ficon%2F201412%2F201412231038336
- 主要记录B站up主莫烦matplotlib教程中的代码.zip
- Java SE Development Kit 8u411 Windows x64 Installer
- 用于科学绘图的 Matplotlib 样式.zip
- Java SE Development Kit 11.0.23 Windows x64 Installer
- 毕业设计-后端项目-网站民宿展示网站SSM
- 基于python绘图,程序详细展示了绘图过程中详尽的命令语句,使得图片达到可发表程度 .zip
- Java SE Development Kit 11.0.23 macOS x64 DMG Installer
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈