| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 449 人关注过本帖
标题:VFP 能不能与不在VFP窗体下的浏览器交互?从hwnd获得webbrowser组件
只看楼主 加入收藏
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
结帖率:2.78%
收藏
已结贴  问题点数:20 回复次数:5 
VFP 能不能与不在VFP窗体下的浏览器交互?从hwnd获得webbrowser组件
VFP 能不能与不在VFP窗体下的浏览器交互?

SendMessage hWnd, WM_HTML_GETOBJECT,0, 0

[此贴子已经被作者于2023-10-16 14:57编辑过]

搜索更多相关主题的帖子: VFP 浏览器 窗体 hwnd 交互 
2023-10-16 11:50
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
从hwnd获得webbrowser组件

Option Explicit

Private Type UUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Declare Sub ZeroMemory()Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" ( _
        Destination As Any, _
        ByVal Length As Long)

Private Declare Function FindWindowA()Function FindWindowA Lib "user32" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As Long) As Long

Private Declare Function FindWindowExA()Function FindWindowExA Lib "user32" ( _
        ByVal hWnd1 As Long, _
        ByVal hWnd2 As Long, _
        ByVal lpsz1 As String, _
        ByVal lpsz2 As Long) As Long

Private Declare Function ObjectFromLresult()Function ObjectFromLresult Lib "oleacc" ( _
        ByVal lResult As Long, _
        riid As UUID, _
        ByVal wParam As Long, _
        ppvObject As Any) As Long

Private Declare Function RegisterWindowMessageA()Function RegisterWindowMessageA Lib "user32" ( _
        ByVal lpString As String) As Long

Private Declare Function SendMessageTimeoutA()Function SendMessageTimeoutA Lib "user32" ( _
        ByVal hwnd As Long, _
        ByVal Msg As Long, _
        ByVal wParam As Long, _
        lparam As Any, _
        ByVal fuFlags As Long, _
        ByVal uTimeout As Long, _
        lpdwResult As Long) As Long

Private Declare Function EnumWindows()Function EnumWindows Lib "user32" ( _
        ByVal lpEnumFunc As Long, _
        lparam As Long) As Boolean

Private Declare Function RealGetWindowClassA()Function RealGetWindowClassA Lib "user32" ( _
        ByVal hwnd As Long, _
        ByVal psztype As String, _
        ByVal cchtype As Long) As Long

Private Declare Function ShellExecuteA()Function ShellExecuteA Lib "shell32.dll" ( _
        ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long

Private Declare Sub Sleep()Sub Sleep Lib "kernel32" ( _
        ByVal dwMilliseconds As Long)

'// FindWindow args
Private Const arg  As String = "ieframe"
Private Const arg1 As String = "shell docobject view"
Private Const arg2 As String = "Internet Explorer_Server"

'// GetObject args
Private Const WM_HTML_GETOBJECT As String = "WM_HTML_GETOBJECT"

Private HTML    As HTMLDocument
Dim Handle      As Long
Dim IsIE        As String

Public Sub doLogin()Sub doLogin()
    IsIE = vbNullString
    IsIE = Space$(10)
    EnumWindows AddressOf Frames, 0
End Sub

Public Sub GoWeb()Sub GoWeb(ByVal address As String, Optional Timeout As Long)
    ShellExecuteA 0, "open", address, "", vbNullString, 1
    Sleep Timeout
End Sub

Public Function Generate()Function Generate(ByVal hwnd As Long) As IHTMLDocument
   
    Dim ID     As UUID
    Dim lngReg As Long
    Dim lngHnD As Long
   
    lngHnD = RegisterWindowMessageA(WM_HTML_GETOBJECT)
   
    With ID
        .Data1 = &H626FC520


        .Data2 = &HA41E
        .Data3 = &H11CF
        .Data4(0) = &HA7
        .Data4(1) = &H31
        .Data4(2) = &H0
        .Data4(3) = &HA0
        .Data4(4) = &HC9
        .Data4(5) = &H8
        .Data4(6) = &H26
        .Data4(7) = &H37
    End With
   
    Call SendMessageTimeoutA(hwnd, lngHnD, 0, 0, &H2, 2000, lngReg)
    Call ZeroMemory(ID, Len(ID))
   
    '从句柄获得webbrowser对象
    Call ObjectFromLresult(lngReg, ID, 0, Generate)

End Function

调用的方法:
    Dim xDoc As IHTMLDocument
      
    Set xDoc = Generate(hwnd)

2023-10-16 13:32
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
tnhwnd

*!*    function getobjfromhwnd(tnhwnd)

*!*    Private Declare Function RegisterWindowMessageA()Function RegisterWindowMessageA Lib "user32" ( _
*!*            ByVal lpString As String) As Long
        
local nmsg, nres, oret
declare long RegisterWindowMessageA in win32api string
declare long SendMessageTimeoutA in win32api long, long, long, long, long, long, long @
declare long ObjectFromLresult in oleacc long, string, long, object @
oret = null
nmsg = RegisterWindowMessageA('wm_html_getobject')  &&WM_HTML_GETOBJECT
nres = 0
SendMessageTimeoutA(tnhwnd, nmsg, 0, 0, 2, 1000, @ nres)
?nres
if nres > 0
ObjectFromLresult(nres, 0h20c56f621ea4cf11a73100a0c9082637, 0, @ oret)
endif
return oret

似乎没有返回信息
2023-10-16 13:49
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:789
专家分:1165
注 册:2021-10-13
收藏
得分:10 
回复 楼主 ljb8864
肯定可以的,和浏览器通讯就是属于BS开发的范畴了。
2023-10-16 20:43
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:232
专家分:1746
注 册:2023-6-29
收藏
得分:10 
这个好像和BS开发没啥关系, 主要是实现类似rpa的功能, 进程间通讯, 模拟键盘鼠标操作
2023-10-17 09:39
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用yiyanxiyin在2023-10-17 09:39:08的发言:

这个好像和BS开发没啥关系, 主要是实现类似rpa的功能, 进程间通讯, 模拟键盘鼠标操作


对,找到句柄,并转化为对象,
2023-10-18 16:46
快速回复:VFP 能不能与不在VFP窗体下的浏览器交互?从hwnd获得webbrowser组件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020156 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved