├── README.md
├── dll
├── gonode.dll
└── node.dll
├── gowebui.go
├── miniblinkAPI.go
└── miniblinkCommand.go
/README.md:
--------------------------------------------------------------------------------
1 | # 关于本项目
2 | 基于github.com/weolar/miniblink49 封装的GOLANG使用的WebUI。
3 |
4 | 直接调用DLL,未使用CGO。
5 |
6 | 仅支持32位DLL。
7 |
8 |
9 | # 使用前准备
10 | 首先, go get github.com/selfplan/gowebui
11 |
12 | dll文件夹内有两个DLL文件,一个是 miniblink 的32位接口DLL。
13 |
14 | 大家可以自行到 https://github.com/weolar/miniblink49/releases 下载最新编译后的 dll 替换就行。(注意,名称一定得是 node.dll,后有说明)
15 |
16 | 另一个名称为 gonode.dll 是我自己编译的,主要用于解决GO和mb的DLL之前的调用问题,其中的问题有:
17 |
18 | 1、mb的DLL在返回值或者是回调函数里的参数值类型不为 int32 时,会导致GO接收后的结果不确定。(比如逻辑值应该是0和1,但GO接收到的都是一串数值)
19 |
20 | 2、mb需要GO回调函数返回值为bool型时,GO无论返回0或者1都是同样的效果。
21 |
22 | 对此,我猜想可能是GO调用DLL无论参数和返回类型都只能使用 uintptr 的原因。
23 |
24 | 如果有朋友知道原理并解决,望告知,谢谢!
25 |
26 | 所以,gonode.dll的作用就是为了处理一些GO和mbDLL之间传值的问题。
27 |
28 | 然后,应该没有其它要准备的了。
29 |
30 | 简而言之就是,把两个DLL放在同目录,再在你的代码中设置它们的位置。
31 |
32 |
33 | 另外,如果你的系统是 64位的,在首次编译或者构建时记得请先:
34 | set GOARCH=386
35 |
36 | # 如何使用
37 | 以下是一个简单且完整的显示一个浏览器窗口的代码:
38 | ```go
39 | package main
40 |
41 | import (
42 | "gowebui" //引入包
43 | "strconv"
44 | )
45 |
46 | var mb gowebui.WebView
47 |
48 | func main() {
49 |
50 | gowebui.Initialize("node.dll", "gonode.dll") //设置两个DLL的位置,我这里是两个DLL放在此demo源码文件内。
51 | gowebui.BindJsFunction("showalert", abcC, 99, 3) //绑定一个和网页JS交互的函数
52 |
53 | mb.CreateWebWindow("测试窗口", 0, 0, 0, 0, 700, 400) //创建一个标题为“测试窗口”,宽为700,高为400的窗口
54 | mb.ShowWindow(true)
55 |
56 | mb.LoadHTML(`
测试窗口
57 | 点击打开百度
58 | 点击显示alert
59 | `)
60 | //加载一段HTML代码
61 |
62 | <-gowebui.Exit 等待MB窗口被关闭
63 | }
64 |
65 | //下面是被绑定的函数
66 | func abcC(es gowebui.JsExecState, param uintptr) uintptr {
67 | gowebui.StartCallBack()
68 | defer gowebui.EndCallBack()
69 |
70 | mb.RunJS("alert('链接被点击了,第1个参数为:" + mb.GetJsString(es, mb.GetJsValueFromArg(es, 0)) + "')")
71 | mb.RunJS("alert('链接被点击了,第2个参数为:" + strconv.Itoa(int(mb.GetJsInt(es, mb.GetJsValueFromArg(es, 1)))) + "')")
72 |
73 | if mb.GetJsBool(mb.GetJsValueFromArg(es, 2)) == true {
74 | mb.RunJS("alert('链接被点击了,第3个参数为:true')")
75 | } else {
76 | mb.RunJS("alert('链接被点击了,第3个参数为:false')")
77 | }
78 | return 0
79 | }
80 | ```
81 | # 目前已实现公开接口
82 |
83 | 公开类型:
84 | type JsExecState int32
85 | type WkeWebView int32
86 | type JsValue string //使用文本来存长整型数字
87 | type HWnd int32
88 | type WkeString int32
89 |
90 | type WebView struct {
91 | hWnd HWnd
92 | hWebView WkeWebView
93 | } //此结构代表浏览窗口,见DEMO代码
94 |
95 |
96 | 公开包级接口:
97 | Initialize(mbPath, gonodePath string) bool //初始化,整个程序内只能在最开始时调用且只能调用一次
98 | StartCallBack() //回调函数开始时调用
99 | EndCallBack() //回调函数结束时调,可见上方DEMO代码
100 |
101 |
102 | WebView类型的方法:
103 | func (mb *WebView) SetMainHWND() //将当前窗口句柄设置为主窗口句柄,设置之后,如果此窗口被销毁,则所有窗口都被销毁。
104 | func (mb *WebView) GetWebTitle() string { //获取网页标题
105 | func (mb *WebView) SetWindowTitle(title string) { //设置WIN窗口标题
106 | func (mb *WebView) ShowWindow(visible bool) {
107 | func (mb *WebView) LoadURL(url string) { //加载网页地址
108 | func (mb *WebView) LoadHTML(html string) { //加载HTML
109 | func (mb *WebView) GetURL() string { //取网页地址
110 | func (mb *WebView) GetHWND() HWnd { //取WIN窗口句柄
111 | func (mb *WebView) SetSize(w, h uintptr) { //设置窗口宽高
112 | func (mb *WebView) MoveToCenter() { //将窗口居中
113 | func (mb *WebView) GetUserAgent() string { //取浏览器UA
114 | func (mb *WebView) GetCookie() string { //获取页面COOKIE
115 | func (mb *WebView) DOMReady() bool { //DOM文档结构是否加载完成
116 | func (mb *WebView) WkeStringToString(s WkeString) string { //WkeString 转 string
117 | func (mb *WebView) SetNavigationToNewWindow(y bool) { //设置点a标签后是在本窗口跳转还是新窗口跳转,相关可见 BindWillCreateWebWindow()
118 | func (mb *WebView) CanGoBack() bool { //是否可后退
119 | func (mb *WebView) CanGoForward() bool { //是否可前进
120 | func (mb *WebView) GoBack() { //后退
121 | func (mb *WebView) GoForward() { //前进
122 | func (mb *WebView) Reload() { //刷新
123 |
124 |
125 | //创建浏览器窗口
126 | //参数分别为 标题,类型(0带边框的可调窗口,1透明窗口,2子窗口;为2时,parent 必须设置),父窗口句柄,左边,顶边,宽,高
127 | func (mb *WebView) CreateWebWindow(title string, wkeWindowType, parent, x, y, width, height int32) WkeWebView {
128 |
129 |
130 | //HookRequest,在BindLoadUrlBegin 回调函数中使用,使用之后,如果对job设置了NetHookRequest,
131 | //则表示WebView会缓存获取到的网络数据,并在这次网络请求结束后调用BindLoadUrlEnd设置的回调函数,同时传递缓存的数据。在此期间,mb不会处理网络数据。
132 | func (mb *WebView) NetHookRequest(job uintptr) {
133 |
134 |
135 | //在BindLoadUrlBegin回调里调用,设置后,此请求将被取消。
136 | //参见 BindLoadUrlBegin 反返回值说明,个人尝试,返回值无效,需要取消连接的话,直接调用此方法
137 | func (mb *WebView) NetCancelRequest(job uintptr) {
138 |
139 |
140 | //绑定alert回调
141 | func (mb *WebView) BindAlertBox(f func(webView WkeWebView, param int32, url WkeString) uintptr, callbackParam int32) {
142 |
143 |
144 | //绑定URL改变回调
145 | func (mb *WebView) BindURLChanged(f func(webView WkeWebView, param int32, url WkeString) uintptr, callbackParam int32) {
146 |
147 |
148 | //绑定标题变化回调函数
149 | func (mb *WebView) BindTitleChanged(f func(webView WkeWebView, param int32, title WkeString) uintptr, callbackParam int32) {
150 |
151 |
152 | //网页准备浏览时触发此回调。
153 | //第三个回调的参数:0,表示点击a标签触发;1,点击form触发;2,前进后退触发;3,重新加载触发;4,表单重新提交;5,其它方式触发
154 | //回调函数返回 0 表示阻止本次浏览,1表示继续进行浏览 (见 NetCancelRequest() 方法说明)
155 | func (mb *WebView) BindNavigation(f func(webView WkeWebView, param int32, wkeNavigationType int32, url WkeString) uintptr, callbackParam int32) {
156 |
157 |
158 | //即将创建新浏览窗口
159 | //第一个参数为回调函数,第二个为处定义数据,将会出现在回调函数的 param 这个参数中。
160 | //回调函数的第3个参数见 BindNavigation() 说明。
161 | //返回值为 WkeWebView,表示使用该窗口来显示将创建的新的网页内容,返回自己的WkeWebView或者是关闭SetNavigationToNewWindow(),则使用本窗口加载新窗口内容
162 | func (mb *WebView) BindWillCreateWebWindow(f func(webView WkeWebView, param int32, wkeNavigationType int32, url WkeString, windowFeatures int32) uintptr, callbackParam int32) {
163 |
164 |
165 | //对应 对应js里的body onload事件
166 | //第一个参数为回调函数,第二个参数为自定义数据,将会出现在回调函数里的 param
167 | func (mb *WebView) BindDocumentReady(f func(webView WkeWebView, param int32) uintptr, callbackParam int32) {
168 |
169 |
170 | //对应 对应js里的body onload事件,不同之处是回调函数的第三个参数会传入当前 onload 事件的框架句柄
171 | //第一个参数为回调函数,第二个参数为自定义数据,将会出现在回调函数里的 param
172 | func (mb *WebView) BindDocumentReady2(f func(webView WkeWebView, param int32, frameId int32) uintptr, callbackParam int32) {
173 |
174 |
175 | //任何网络请求发起前会触发此回调,见 NetHookRequest() 说明
176 | func (mb *WebView) BindLoadUrlBegin(f func(webView WkeWebView, param int32, url_char, job uintptr) uintptr, callbackParam int32) {
177 |
178 |
179 | //见 NetHookRequest() 说明
180 | //第三个参数为当前数据的URL, 它是ANSI 编码的 CHAR(通常,如果里面只有ASCII字符的话,可直接 PtrToString() 转成GO的STRING型),第五个参数为数据指针位置,第六个为数据长度
181 | func (mb *WebView) BindLoadUrlEnd(f func(webView WkeWebView, param int32, url_char, job, buf, bufLen uintptr) uintptr, callbackParam int32) {
182 |
183 |
184 | //绑定一个全局函数到主frame的window上,必须在创建窗口前绑定,也就是在 miniblink.Initialize和mb.CreateWebWindow之间
185 | //第一个参数为JSfunc的名称;第二个为回调函数;第三个为自定义参数,可通过回调函数的第2个参数获取; 第四个为JSfunc的参数数量。
186 | func BindJsFunction(jsFuncName string, f func(es JsExecState, param uintptr) uintptr, param uintptr, argCount int32) {
187 |
188 |
189 | //用于JSfunc的回调函数,根据参数索引取得JSfunc传过来的值的 jsValue
190 | //第一个参数 使用回调函数的es参数,第二个参数为索引,从0开始
191 | func (mb *WebView) GetJsValueFromArg(es JsExecState, argIdx int32) JsValue {
192 |
193 |
194 | //获取页面主frame的jsExecState
195 | func (mb *WebView) GetExecState() JsExecState {
196 |
197 |
198 | //通过ES和JsValue将JS传过来的值转为string
199 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
200 | func (mb *WebView) GetJsString(es JsExecState, v JsValue) string {
201 |
202 |
203 | //通过ES和JsValue将JS传过来的值转为整数,如果v是个整形或者浮点,返回相应值(如果是浮点,返回取整后的值)。如果是其他类型,返回0(这里注意)
204 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
205 | func (mb *WebView) GetJsInt(es JsExecState, v JsValue) int32 {
206 |
207 |
208 | //通过ES和JsValue将JS传过来的值转为浮点型,如果v是个浮点型,返回相应值。如果是其他类型,返回0.0(这里注意)
209 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
210 | func (mb *WebView) GetJsFloat64(es JsExecState, v JsValue) float64 {
211 |
212 |
213 | //通过JsValue将JS传过来的值转为BOOL型,如果v本身是个布尔值,返回对应的true或者false;如果是个对象(JSTYPE_OBJECT),返回false(这里注意)
214 | //jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
215 | func (mb *WebView) GetJsBool(v JsValue) bool {
216 |
217 |
218 | //让窗口执行JS代码,此代码是在一个 function(){} 中执行,如果要取返回值的话,需要加 return ;如 RunJS("return $('title').text()")
219 | //参数为JS脚本代码,返回值为 JsValue
220 | func (mb *WebView) RunJS(JsCode string) JsValue {
221 |
222 |
223 |
224 |
--------------------------------------------------------------------------------
/dll/gonode.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/selfplan/gowebui/0ab5fe722ba02273d7a550c732e3896cfe87516c/dll/gonode.dll
--------------------------------------------------------------------------------
/dll/node.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/selfplan/gowebui/0ab5fe722ba02273d7a550c732e3896cfe87516c/dll/node.dll
--------------------------------------------------------------------------------
/gowebui.go:
--------------------------------------------------------------------------------
1 | package gowebui
2 |
3 | import (
4 | "fmt"
5 | "runtime"
6 | "sync"
7 | "syscall"
8 | "unsafe"
9 | )
10 |
11 | type JsExecState int32
12 | type WkeWebView int32
13 | type JsValue string //使用文本来存长整型数字
14 | type HWnd int32
15 | type WkeString int32
16 |
17 | var (
18 | _dllCommand chan dllAPI
19 | _dllReturn chan interface{}
20 | _mhWnd HWnd //主窗口句柄
21 | _allhWnd map[HWnd]WkeWebView //存放所有句柄, 键:WIN窗口句柄,值:webView句柄
22 | Exit chan bool //所有操作完成,退出进程
23 | _lc sync.Mutex //操作回调函数记数
24 |
25 | _callBackNum uint32 //记录了运行的回调函数。(如果不为0,表示有操作是在回调函数里的,调用DLL时,需要判断线程)
26 | _mThreadId uint32 //主线程ID
27 | )
28 |
29 | type dllAPI struct {
30 | hWebView WkeWebView
31 | apiStr string
32 | arg1 interface{}
33 | arg2 interface{}
34 | arg3 interface{}
35 | arg4 interface{}
36 | arg5 interface{}
37 | arg6 interface{}
38 | }
39 |
40 | type WebView struct {
41 | hWnd HWnd
42 | hWebView WkeWebView
43 | }
44 |
45 | //初始化,整个程序内只能在最开始时调用且只能调用一次
46 | func Initialize(mbPath, gonodePath string) bool {
47 | loadMBDLL(mbPath, gonodePath)
48 | _dllCommand = make(chan dllAPI)
49 | _dllReturn = make(chan interface{})
50 | Exit = make(chan bool)
51 | _allhWnd = make(map[HWnd]WkeWebView)
52 | go func() {
53 | runtime.LockOSThread()
54 | _mThreadId = getCurrentThreadId()
55 | for {
56 |
57 | select {
58 | case dllCommand := <-_dllCommand:
59 | switch dllCommand.apiStr {
60 | case "wkeOnWindowDestroy":
61 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(uintptr) uintptr))
62 | ret, _, _ := syscall.Syscall(dllWkeOnWindowDestroy, 3, uintptr(dllCommand.hWebView), uintptr(unsafe.Pointer(f1)), 0)
63 | _dllReturn <- ret
64 | case "wkeJsBindFunction":
65 | f1 := syscall.NewCallbackCDecl(dllCommand.arg2.(func(JsExecState, uintptr) uintptr))
66 | ret, _, _ := syscall.Syscall6(dllWkeJsBindFunction, 4, strToPtr(dllCommand.arg1.(string)), f1, dllCommand.arg3.(uintptr), uintptr(dllCommand.arg4.(int32)), 0, 0)
67 | _dllReturn <- ret
68 | case "wkeOnURLChanged":
69 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32, WkeString) uintptr))
70 | ret, _, _ := syscall.Syscall(dllWkeOnURLChanged, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
71 | _dllReturn <- ret
72 | case "wkeOnAlertBox":
73 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32, WkeString) uintptr))
74 | ret, _, _ := syscall.Syscall(dllWkeOnAlertBox, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
75 | _dllReturn <- ret
76 | case "wkeOnTitleChanged":
77 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32, WkeString) uintptr))
78 | ret, _, _ := syscall.Syscall(dllWkeOnTitleChanged, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
79 | _dllReturn <- ret
80 | case "wkeOnNavigation":
81 | f1 := syscall.NewCallback(dllCommand.arg1.(func(WkeWebView, int32, int32, WkeString) uintptr))
82 | ret, _, _ := syscall.Syscall(GOBindNavigation, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
83 | _dllReturn <- ret
84 | case "wkeOnCreateView":
85 | f1 := syscall.NewCallback(dllCommand.arg1.(func(WkeWebView, int32, int32, WkeString, int32) uintptr))
86 | ret, _, _ := syscall.Syscall(GOBindCreateView, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
87 | _dllReturn <- ret
88 | case "wkeOnDocumentReady":
89 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32) uintptr))
90 | ret, _, _ := syscall.Syscall(dllWkeOnDocumentReady, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
91 | _dllReturn <- ret
92 | case "wkeOnDocumentReady2":
93 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32, int32) uintptr))
94 | ret, _, _ := syscall.Syscall(dllWkeOnDocumentReady2, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
95 | _dllReturn <- ret
96 | case "wkeOnLoadUrlBegin":
97 | f1 := syscall.NewCallback(dllCommand.arg1.(func(WkeWebView, int32, uintptr, uintptr) uintptr))
98 | ret, _, _ := syscall.Syscall(GOBindLoadUrlBegin, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
99 | _dllReturn <- ret
100 | case "wkeOnLoadUrlEnd":
101 | f1 := syscall.NewCallbackCDecl(dllCommand.arg1.(func(WkeWebView, int32, uintptr, uintptr, uintptr, uintptr) uintptr))
102 | ret, _, _ := syscall.Syscall(dllWkeOnLoadUrlEnd, 3, uintptr(dllCommand.hWebView), f1, int32ToPtr(dllCommand.arg2.(int32)))
103 | _dllReturn <- ret
104 |
105 | case "Exit":
106 | postQuitMessage(0)
107 | default:
108 | _dllReturn <- miniblinkCommand(dllCommand.hWebView, dllCommand.apiStr, dllCommand.arg1, dllCommand.arg2, dllCommand.arg3, dllCommand.arg4, dllCommand.arg5, dllCommand.arg6)
109 | }
110 | default:
111 | var msg msg
112 | if peekMessage(&msg, 0, 0, 0, 1) {
113 | translateMessage(&msg)
114 | dispatchMessage(&msg)
115 | if msg.Message == WM_QUIT {
116 | goto Loop
117 | }
118 | }
119 | }
120 | }
121 |
122 | Loop:
123 | fmt.Println("Go OUT!")
124 | freeMBDLL() //卸载DLL
125 | Exit <- true
126 |
127 | }()
128 |
129 | var api dllAPI
130 | api.apiStr = "wkeIsInitialize"
131 | _dllCommand <- api
132 | ret := <-_dllReturn
133 |
134 | if ret != 1 {
135 | api.apiStr = "wkeInitialize"
136 | _dllCommand <- api
137 | ret = <-_dllReturn
138 |
139 | }
140 | api.apiStr = "wkeIsInitialize"
141 | _dllCommand <- api
142 | ret = <-_dllReturn
143 | fmt.Println(ret)
144 | return (ret == 1)
145 | }
146 |
147 | //将当前窗口句柄设置为主窗口句柄,设置之后,如果此窗口被销毁,则所有窗口都被销毁。
148 | func (mb *WebView) SetMainHWND() {
149 | _mhWnd = mb.hWnd
150 | }
151 |
152 | //窗口将被销毁回调
153 | func (mb *WebView) wkeOnWindowDestroy(wkeWebView uintptr) uintptr {
154 | StartCallBack()
155 | defer EndCallBack()
156 | fmt.Println("将被销毁,", mb.hWnd, _mhWnd, mb.hWebView)
157 | if mb.hWnd == _mhWnd {
158 | //为主窗口被销毁
159 |
160 | var api dllAPI
161 | api.apiStr = "Exit"
162 | callDLLAPI(api)
163 | } else {
164 | //普通窗口被销毁
165 | delete(_allhWnd, mb.hWnd)
166 | }
167 | return 0
168 | }
169 |
170 | //获取网页标题
171 | func (mb *WebView) GetWebTitle() string {
172 | var api dllAPI
173 | api.hWebView = mb.hWebView
174 | api.apiStr = "wkeGetTitle"
175 | ret := callDLLAPI(api)
176 |
177 | return ret.(string)
178 | }
179 |
180 | //设置WIN窗口标题
181 | func (mb *WebView) SetWindowTitle(title string) {
182 | var api dllAPI
183 | api.apiStr = "wkeSetWindowTitle"
184 | api.hWebView = mb.hWebView
185 | api.arg1 = title
186 | callDLLAPI(api)
187 | }
188 |
189 | //显示窗口
190 | func (mb *WebView) ShowWindow(visible bool) {
191 | var api dllAPI
192 | api.hWebView = mb.hWebView
193 | api.apiStr = "wkeShowWindow"
194 | if visible == true {
195 | api.arg1 = uintptr(1)
196 | } else {
197 | api.arg1 = uintptr(0)
198 | }
199 |
200 | callDLLAPI(api)
201 | }
202 |
203 | //加载网页地址
204 | func (mb *WebView) LoadURL(url string) {
205 | var api dllAPI
206 | api.apiStr = "wkeLoadURL"
207 | api.hWebView = mb.hWebView
208 | api.arg1 = url
209 | callDLLAPI(api)
210 | }
211 |
212 | //加载HTML
213 | func (mb *WebView) LoadHTML(html string) {
214 | var api dllAPI
215 | api.apiStr = "wkeLoadHTML"
216 | api.hWebView = mb.hWebView
217 | api.arg1 = html
218 | callDLLAPI(api)
219 | }
220 |
221 | //取网页地址
222 | func (mb *WebView) GetURL() string {
223 | var api dllAPI
224 | api.apiStr = "wkeGetURL"
225 | api.hWebView = mb.hWebView
226 | ret := callDLLAPI(api)
227 | return ret.(string)
228 | }
229 |
230 | //取WIN窗口句柄
231 | func (mb *WebView) GetHWND() HWnd {
232 | return mb.hWnd
233 | }
234 |
235 | //设置窗口宽高
236 | func (mb *WebView) SetSize(w, h uintptr) {
237 | var api dllAPI
238 | api.apiStr = "wkeResize"
239 | api.hWebView = mb.hWebView
240 | api.arg1 = w
241 | api.arg2 = h
242 | callDLLAPI(api)
243 | }
244 |
245 | //将窗口居中
246 | func (mb *WebView) MoveToCenter() {
247 | var api dllAPI
248 | api.apiStr = "wkeMoveToCenter"
249 | api.hWebView = mb.hWebView
250 | callDLLAPI(api)
251 | }
252 |
253 | //获取浏览器UA
254 | func (mb *WebView) GetUserAgent() string {
255 | var api dllAPI
256 | api.apiStr = "wkeGetUserAgent"
257 | api.hWebView = mb.hWebView
258 | ret := callDLLAPI(api)
259 | return ret.(string)
260 | }
261 |
262 | //获取页面COOKIE
263 | func (mb *WebView) GetCookie() string {
264 | var api dllAPI
265 | api.apiStr = "wkeGetCookie"
266 | api.hWebView = mb.hWebView
267 | ret := callDLLAPI(api)
268 | return ret.(string)
269 | }
270 |
271 | //DOM文档结构是否加载完成
272 | func (mb *WebView) DOMReady() bool {
273 | var api dllAPI
274 | api.apiStr = "wkeIsDocumentReady"
275 | api.hWebView = mb.hWebView
276 | ret := callDLLAPI(api)
277 | return ret.(bool)
278 | }
279 |
280 | //WkeString 转 string
281 | func (mb *WebView) WkeStringToString(s WkeString) string {
282 | var api dllAPI
283 | api.apiStr = "wkeGetString"
284 | api.arg1 = s
285 | ret := callDLLAPI(api)
286 | return ret.(string)
287 |
288 | }
289 |
290 | //设置点a标签后是在本窗口跳转还是新窗口跳转,相关可见 BindWillCreateWebWindow()
291 | func (mb *WebView) SetNavigationToNewWindow(y bool) {
292 | var api dllAPI
293 | api.apiStr = "wkeSetNavigationToNewWindowEnable"
294 | api.hWebView = mb.hWebView
295 | if y {
296 | api.arg1 = uintptr(1)
297 | } else {
298 | api.arg1 = uintptr(0)
299 | }
300 | callDLLAPI(api)
301 | }
302 |
303 | //是否可后退
304 | func (mb *WebView) CanGoBack() bool {
305 | var api dllAPI
306 | api.apiStr = "wkeCanGoBack"
307 | api.hWebView = mb.hWebView
308 | ret := callDLLAPI(api)
309 | return ret.(bool)
310 | }
311 |
312 | //是否可前进
313 | func (mb *WebView) CanGoForward() bool {
314 | var api dllAPI
315 | api.apiStr = "wkeCanGoForward"
316 | api.hWebView = mb.hWebView
317 | ret := callDLLAPI(api)
318 | return ret.(bool)
319 | }
320 |
321 | //后退
322 | func (mb *WebView) GoBack() {
323 | var api dllAPI
324 | api.apiStr = "wkeGoBack"
325 | api.hWebView = mb.hWebView
326 | callDLLAPI(api)
327 | }
328 |
329 | //前进
330 | func (mb *WebView) GoForward() {
331 | var api dllAPI
332 | api.apiStr = "wkeGoForward"
333 | api.hWebView = mb.hWebView
334 | callDLLAPI(api)
335 | }
336 |
337 | //刷新
338 | func (mb *WebView) Reload() {
339 | var api dllAPI
340 | api.apiStr = "wkeReload"
341 | api.hWebView = mb.hWebView
342 | callDLLAPI(api)
343 | }
344 |
345 | //创建浏览器窗口
346 | //参数分别为 标题,类型(0带边框的可调窗口,1透明窗口,2子窗口;为2时,parent 必须设置),父窗口句柄,左边,顶边,宽,高
347 | func (mb *WebView) CreateWebWindow(title string, wkeWindowType, parent, x, y, width, height int32) WkeWebView {
348 | var api dllAPI
349 | api.apiStr = "wkeCreateWebWindow"
350 | api.arg1 = wkeWindowType
351 | api.arg2 = parent
352 | api.arg3 = x
353 | api.arg4 = y
354 | api.arg5 = width
355 | api.arg6 = height
356 |
357 | ret := callDLLAPI(api)
358 | mb.hWebView = ret.(WkeWebView)
359 | api.apiStr = "wkeGetWindowHandle"
360 | api.hWebView = mb.hWebView
361 | mb.hWnd = callDLLAPI(api).(HWnd)
362 |
363 | api.apiStr = "wkeOnWindowDestroy"
364 | api.hWebView = mb.hWebView
365 | api.arg1 = mb.wkeOnWindowDestroy
366 | callDLLAPI(api)
367 |
368 | _allhWnd[mb.hWnd] = mb.hWebView
369 | if _mhWnd == 0 {
370 | _mhWnd = mb.hWnd //默认将第一个窗口设为主窗口
371 | }
372 |
373 | api.apiStr = "wkeSetWindowTitle"
374 | api.hWebView = mb.hWebView
375 | api.arg1 = title
376 | callDLLAPI(api)
377 | return ret.(WkeWebView)
378 | }
379 |
380 | //以下为 NET 相关接口
381 |
382 | //HookRequest,在BindLoadUrlBegin 回调函数中使用,使用之后,如果对job设置了NetHookRequest,
383 | //则表示WebView会缓存获取到的网络数据,并在这次网络请求结束后调用BindLoadUrlEnd设置的回调函数,同时传递缓存的数据。在此期间,mb不会处理网络数据。
384 | func (mb *WebView) NetHookRequest(job uintptr) {
385 | var api dllAPI
386 | api.apiStr = "wkeNetHookRequest"
387 | api.arg1 = job
388 | callDLLAPI(api)
389 | }
390 |
391 | //在BindLoadUrlBegin回调里调用,设置后,此请求将被取消。
392 | //参见 BindLoadUrlBegin 反返回值说明,个人尝试,返回值无效,需要取消连接的话,直接调用此方法
393 | func (mb *WebView) NetCancelRequest(job uintptr) {
394 | var api dllAPI
395 | api.apiStr = "wkeNetCancelRequest"
396 | api.arg1 = job
397 | callDLLAPI(api)
398 | }
399 |
400 | //以下为有回调函数的事件
401 | //绑定alert回调
402 | func (mb *WebView) BindAlertBox(f func(webView WkeWebView, param int32, url WkeString) uintptr, callbackParam int32) {
403 | var api dllAPI
404 | api.apiStr = "wkeOnAlertBox"
405 | api.hWebView = mb.hWebView
406 | api.arg1 = f
407 | api.arg2 = callbackParam
408 | callDLLAPI(api)
409 | }
410 |
411 | //绑定URL改变回调
412 | func (mb *WebView) BindURLChanged(f func(webView WkeWebView, param int32, url WkeString) uintptr, callbackParam int32) {
413 | var api dllAPI
414 | api.apiStr = "wkeOnURLChanged"
415 | api.hWebView = mb.hWebView
416 | api.arg1 = f
417 | api.arg2 = callbackParam
418 | callDLLAPI(api)
419 | }
420 |
421 | //绑定标题变化回调函数
422 | func (mb *WebView) BindTitleChanged(f func(webView WkeWebView, param int32, title WkeString) uintptr, callbackParam int32) {
423 | var api dllAPI
424 | api.apiStr = "wkeOnTitleChanged"
425 | api.hWebView = mb.hWebView
426 | api.arg1 = f
427 | api.arg2 = callbackParam
428 | callDLLAPI(api)
429 | }
430 |
431 | //网页准备浏览时触发此回调。
432 | //第三个回调的参数:0,表示点击a标签触发;1,点击form触发;2,前进后退触发;3,重新加载触发;4,表单重新提交;5,其它方式触发
433 | //回调函数返回 0 表示阻止本次浏览,1表示继续进行浏览 (见 NetCancelRequest() 方法说明)
434 | func (mb *WebView) BindNavigation(f func(webView WkeWebView, param int32, wkeNavigationType int32, url WkeString) uintptr, callbackParam int32) {
435 | var api dllAPI
436 | api.apiStr = "wkeOnNavigation"
437 | api.hWebView = mb.hWebView
438 | api.arg1 = f
439 | api.arg2 = callbackParam
440 | callDLLAPI(api)
441 | }
442 |
443 | //即将创建新浏览窗口
444 | //第一个参数为回调函数,第二个为处定义数据,将会出现在回调函数的 param 这个参数中。
445 | //回调函数的第3个参数见 BindNavigation() 说明。
446 | //返回值为 WkeWebView,表示使用该窗口来显示将创建的新的网页内容,返回自己的WkeWebView或者是关闭SetNavigationToNewWindow(),则使用本窗口加载新窗口内容
447 | func (mb *WebView) BindWillCreateWebWindow(f func(webView WkeWebView, param int32, wkeNavigationType int32, url WkeString, windowFeatures int32) uintptr, callbackParam int32) {
448 | var api dllAPI
449 | api.apiStr = "wkeOnCreateView"
450 | api.hWebView = mb.hWebView
451 | api.arg1 = f
452 | api.arg2 = callbackParam
453 | callDLLAPI(api)
454 | }
455 |
456 | //对应 对应js里的body onload事件
457 | //第一个参数为回调函数,第二个参数为自定义数据,将会出现在回调函数里的 param
458 | func (mb *WebView) BindDocumentReady(f func(webView WkeWebView, param int32) uintptr, callbackParam int32) {
459 | var api dllAPI
460 | api.apiStr = "wkeOnDocumentReady"
461 | api.hWebView = mb.hWebView
462 | api.arg1 = f
463 | api.arg2 = callbackParam
464 | callDLLAPI(api)
465 | }
466 |
467 | //对应 对应js里的body onload事件,不同之处是回调函数的第三个参数会传入当前 onload 事件的框架句柄
468 | //第一个参数为回调函数,第二个参数为自定义数据,将会出现在回调函数里的 param
469 | func (mb *WebView) BindDocumentReady2(f func(webView WkeWebView, param int32, frameId int32) uintptr, callbackParam int32) {
470 | var api dllAPI
471 | api.apiStr = "wkeOnDocumentReady2"
472 | api.hWebView = mb.hWebView
473 | api.arg1 = f
474 | api.arg2 = callbackParam
475 | callDLLAPI(api)
476 | }
477 |
478 | //任何网络请求发起前会触发此回调,见 NetHookRequest() 说明
479 | func (mb *WebView) BindLoadUrlBegin(f func(webView WkeWebView, param int32, url_char, job uintptr) uintptr, callbackParam int32) {
480 | var api dllAPI
481 | api.apiStr = "wkeOnLoadUrlBegin"
482 | api.hWebView = mb.hWebView
483 | api.arg1 = f
484 | api.arg2 = callbackParam
485 | callDLLAPI(api)
486 | }
487 |
488 | //见 NetHookRequest() 说明
489 | //第三个参数为当前数据的URL, 它是ANSI 编码的 CHAR(通常,如果里面只有ASCII字符的话,可直接 PtrToString() 转成GO的STRING型),第五个参数为数据指针位置,第六个为数据长度
490 | func (mb *WebView) BindLoadUrlEnd(f func(webView WkeWebView, param int32, url_char, job, buf, bufLen uintptr) uintptr, callbackParam int32) {
491 | var api dllAPI
492 | api.apiStr = "wkeOnLoadUrlEnd"
493 | api.hWebView = mb.hWebView
494 | api.arg1 = f
495 | api.arg2 = callbackParam
496 | callDLLAPI(api)
497 | }
498 |
499 | //以下为JS相关接口
500 | //绑定一个全局函数到主frame的window上,必须在创建窗口前绑定,也就是在 miniblink.Initialize和mb.CreateWebWindow之间
501 | //第一个参数为JSfunc的名称;第二个为回调函数;第三个为自定义参数,可通过回调函数的第2个参数获取; 第四个为JSfunc的参数数量。
502 | func BindJsFunction(jsFuncName string, f func(es JsExecState, param uintptr) uintptr, param uintptr, argCount int32) {
503 | var api dllAPI
504 | api.apiStr = "wkeJsBindFunction"
505 | api.arg1 = jsFuncName
506 | api.arg2 = f
507 | api.arg3 = param
508 | api.arg4 = argCount
509 | callDLLAPI(api)
510 |
511 | }
512 |
513 | //用于JSfunc的回调函数,根据参数索引取得JSfunc传过来的值的 jsValue
514 | //第一个参数 使用回调函数的es参数,第二个参数为索引,从0开始
515 | func (mb *WebView) GetJsValueFromArg(es JsExecState, argIdx int32) JsValue {
516 | var api dllAPI
517 | api.apiStr = "jsArg"
518 | api.arg1 = es
519 | api.arg2 = argIdx
520 | ret := callDLLAPI(api)
521 | return ret.(JsValue)
522 |
523 | }
524 |
525 | //获取页面主frame的jsExecState
526 | func (mb *WebView) GetExecState() JsExecState {
527 | var api dllAPI
528 | api.apiStr = "wkeGlobalExec"
529 | api.hWebView = mb.hWebView
530 | return callDLLAPI(api).(JsExecState)
531 | }
532 |
533 | //通过ES和JsValue将JS传过来的值转为string
534 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
535 | func (mb *WebView) GetJsString(es JsExecState, v JsValue) string {
536 | var api dllAPI
537 | api.apiStr = "jsToString"
538 | api.arg1 = es
539 | api.arg2 = v
540 | ret := callDLLAPI(api)
541 | return ret.(string)
542 | }
543 |
544 | //通过ES和JsValue将JS传过来的值转为整数,如果v是个整形或者浮点,返回相应值(如果是浮点,返回取整后的值)。如果是其他类型,返回0(这里注意)
545 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
546 | func (mb *WebView) GetJsInt(es JsExecState, v JsValue) int32 {
547 | var api dllAPI
548 | api.apiStr = "jsToInt"
549 | api.arg1 = es
550 | api.arg2 = v
551 | ret := callDLLAPI(api)
552 | return ret.(int32)
553 | }
554 |
555 | //通过ES和JsValue将JS传过来的值转为浮点型,如果v是个浮点型,返回相应值。如果是其他类型,返回0.0(这里注意)
556 | //es通过 GetExecState() 获取或者回调函数的es参数,jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
557 | func (mb *WebView) GetJsFloat64(es JsExecState, v JsValue) float64 {
558 | var api dllAPI
559 | api.apiStr = "jsToDouble"
560 | api.arg1 = es
561 | api.arg2 = v
562 | ret := callDLLAPI(api)
563 | return ret.(float64)
564 | }
565 |
566 | //通过JsValue将JS传过来的值转为BOOL型,如果v本身是个布尔值,返回对应的true或者false;如果是个对象(JSTYPE_OBJECT),返回false(这里注意)
567 | //jsValue通过 GetJsValue…… 之类的获取或者RunJS()返回值
568 | func (mb *WebView) GetJsBool(v JsValue) bool {
569 | var api dllAPI
570 | api.apiStr = "jsIsTrue"
571 | api.arg1 = v
572 | ret := callDLLAPI(api)
573 | return ret.(bool)
574 | }
575 |
576 | //让窗口执行JS代码,此代码是在一个 function(){} 中执行,如果要取返回值的话,需要加 return ;如 RunJS("return $('title').text()")
577 | //参数为JS脚本代码,返回值为 JsValue
578 | func (mb *WebView) RunJS(JsCode string) JsValue {
579 | var api dllAPI
580 | api.apiStr = "wkeRunJS"
581 | api.hWebView = mb.hWebView
582 | api.arg1 = JsCode
583 | ret := callDLLAPI(api)
584 | return ret.(JsValue)
585 | }
586 |
587 | //内部支持
588 | //调用DLL,主要解决在回调函数里操作时,channel 死锁的问题
589 | func callDLLAPI(api dllAPI) interface{} {
590 | _lc.Lock()
591 | callBackNum := _callBackNum
592 | _lc.Unlock()
593 | if callBackNum > 0 {
594 | //表示有操作是在回调函数里进行的
595 | if _mThreadId == getCurrentThreadId() {
596 | //当前在主线程,表示此操作是在回调里进行的
597 | switch api.apiStr {
598 | case "Exit":
599 | postQuitMessage(0)
600 | return 0
601 | default:
602 | return miniblinkCommand(api.hWebView, api.apiStr, api.arg1, api.arg2, api.arg3, api.arg4, api.arg5, api.arg6)
603 | }
604 | } else {
605 | //非回调里进行的
606 | _dllCommand <- api
607 |
608 | return <-_dllReturn
609 | }
610 | } else {
611 | //非回调里进行的
612 | _dllCommand <- api
613 | return <-_dllReturn
614 | }
615 |
616 | }
617 |
618 | //回调函数开始时调用
619 | func StartCallBack() {
620 | _lc.Lock()
621 | defer _lc.Unlock()
622 | _callBackNum++
623 | }
624 |
625 | //回调函数结束时调用
626 | func EndCallBack() {
627 | _lc.Lock()
628 | defer _lc.Unlock()
629 | _callBackNum--
630 | }
631 |
--------------------------------------------------------------------------------
/miniblinkAPI.go:
--------------------------------------------------------------------------------
1 | package gowebui
2 |
3 | import (
4 | "syscall"
5 | )
6 |
7 | const (
8 | WKE_LBUTTON = 1
9 | WKE_RBUTTON = 2
10 | WKE_SHIFT = 4
11 | WKE_CONTROL = 8
12 | WKE_MBUTTON = 16
13 |
14 | WM_PAINT = 15
15 | WM_SIZE = 5
16 | WM_QUIT = 18
17 | WM_KEYDOWN = 256
18 | WM_KEYUP = 257
19 | WM_CHAR = 258
20 | WM_LBUTTONDOWN = 513
21 | WM_MBUTTONDOWN = 519
22 | WM_RBUTTONDOWN = 516
23 | WM_LBUTTONDBLCLK = 515
24 | WM_MBUTTONDBLCLK = 521
25 | WM_RBUTTONDBLCLK = 518
26 | WM_LBUTTONUP = 514
27 | WM_MBUTTONUP = 520
28 | WM_RBUTTONUP = 517
29 | WM_MOUSEMOVE = 512
30 | MK_CONTROL = 8
31 | MK_SHIFT = 4
32 | MK_LBUTTON = 1
33 | MK_MBUTTON = 16
34 | MK_RBUTTON = 2
35 | WM_CONTEXTMENU = 123
36 | WM_MOUSEWHEEL = 522
37 | WM_SETFOCUS = 7
38 | WM_KILLFOCUS = 8
39 | WM_IME_STARTCOMPOSITION = 269
40 | CFS_EXCLUDE = 128
41 | WS_CHILD = 1073741824
42 | WS_VISIBLE = 268435456
43 | SS_NOTIFY = 256
44 | WS_EX_LAYERED = 524288
45 | WM_NCHITTEST = 132
46 | WM_GETMINMAXINFO = 36
47 | HTTOP = 12
48 | HTLEFT = 10
49 | HTRIGHT = 11
50 | HTBOTTOM = 15
51 | HTTOPLEFT = 13
52 | HTTOPRIGHT = 14
53 | HTBOTTOMLEFT = 16
54 | HTBOTTOMRIGHT = 17
55 | SPI_GETWORKAREA = 48
56 | WM_DESTROY = 2
57 | WKE_EXTENDED = 256
58 | WKE_REPEAT = 16384
59 | GWL_EXSTYLE = -20
60 | SRCCOPY = 13369376
61 | WM_TIMER = 275
62 | WM_ERASEBKGND = 20
63 | WM_SETCURSOR = 32
64 | OBJ_BITMAP = 7
65 | CAPTUREBLT = 1073741824
66 | GA_ROOT = 2
67 | WM_NCDESTROY = 130
68 | WM_CLOSE = 16
69 | CP_UTF8 = 65001
70 | CP_936 = 936
71 | CFS_POINT = 2
72 | CFS_FORCE_POSITION = 32
73 | )
74 |
75 | var (
76 | kr32 syscall.Handle
77 | dllGetCurrentThreadId uintptr
78 |
79 | u32 syscall.Handle
80 | dllPostQuitMessage uintptr
81 | dllDispatchMessage uintptr
82 | dllTranslateMessage uintptr
83 | dllPeekMessage uintptr
84 |
85 | mb syscall.Handle
86 |
87 | dllWkeCreateWebWindow uintptr
88 | dllWkeDestroyWebWindow uintptr
89 | dllWkeGetWindowHandle uintptr
90 | dllWkeShowWindow uintptr
91 | dllWkeEnableWindow uintptr
92 | dllWkeMoveWindow uintptr
93 | dllWkeMoveToCenter uintptr
94 | dllWkeResizeWindow uintptr
95 | dllWkeSetWindowTitleW uintptr
96 | dllWkeInitialize uintptr
97 | dllWkeIsInitialize uintptr
98 | dllWkeInitializeEx uintptr
99 | dllWkeFinalize uintptr
100 | dllWkeUpdate uintptr
101 | dllWkeGetVersion uintptr
102 | dllWkeGetVersionString uintptr
103 | dllWkeOnWindowClosing uintptr
104 | dllWkeOnWindowDestroy uintptr
105 | dllWkeSetNavigationToNewWindowEnable uintptr
106 | dllWkeLoadW uintptr
107 | dllWkeSetProxy uintptr
108 | dllWkeSetViewProxy uintptr
109 | dllWkeGetName uintptr
110 | dllWkeSetName uintptr
111 | dllWkeSetHandle uintptr
112 | dllWkeSetHandleOffset uintptr
113 | dllWkeSetUserAgentW uintptr
114 | dllWkeSetUserAgent uintptr
115 | dllWkeLoadURLW uintptr
116 | dllWkeLoadURL uintptr
117 | dllWkeLoadHTMLW uintptr
118 | dllWkeLoadHTML uintptr
119 | dllWkeLoadFileW uintptr
120 | dllWkePostURLW uintptr
121 | dllWkePostURL uintptr
122 | dllWkeGetURL uintptr
123 | dllWkeIsLoading uintptr
124 | dllWkeIsLoadingSucceeded uintptr
125 | dllWkeIsLoadingFailed uintptr
126 | dllWkeIsLoadingCompleted uintptr
127 | dllWkeIsDocumentReady uintptr
128 | dllWkeStopLoading uintptr
129 | dllWkeReload uintptr
130 | dllWkeGetTitleW uintptr
131 | dllWkeGetTitle uintptr
132 | dllWkeResize uintptr
133 | dllWkeGetWidth uintptr
134 | dllWkeGetHeight uintptr
135 | dllWkeGetContentWidth uintptr
136 | dllWkeGetContentHeight uintptr
137 | dllWkeRepaintIfNeeded uintptr
138 | dllWkeSetDirty uintptr
139 | dllWkeIsDirty uintptr
140 | dllWkeAddDirtyArea uintptr
141 | dllWkeLayoutIfNeeded uintptr
142 | dllWkePaint2 uintptr
143 | dllWkePaint uintptr
144 | dllWkeGetViewDC uintptr
145 | dllWkeGC uintptr
146 | dllWkeGetHostHWND uintptr
147 | dllWkeGetSource uintptr
148 | dllWkeCanGoBack uintptr
149 | dllWkeGoBack uintptr
150 | dllWkeCanGoForward uintptr
151 | dllWkeGoForward uintptr
152 | dllWkeEditorSelectAll uintptr
153 | dllWkeEditorUnSelect uintptr
154 | dllWkeEditorCopy uintptr
155 | dllWkeEditorCut uintptr
156 | dllWkeEditorPaste uintptr
157 | dllWkeEditorDelete uintptr
158 | dllWkeEditorUndo uintptr
159 | dllWkeEditorRedo uintptr
160 | dllWkeGetCookieW uintptr
161 | dllWkeGetCookie uintptr
162 | dllWkeSetCookie uintptr
163 | dllWkeSetCookieEnabled uintptr
164 | dllWkeIsCookieEnabled uintptr
165 | dllWkeSetCookieJarPath uintptr
166 | dllWkeSetCookieJarFullPath uintptr
167 | dllWkeSetMediaVolume uintptr
168 | dllWkeGetMediaVolume uintptr
169 | dllWkeSetFocus uintptr
170 | dllWkeKillFocus uintptr
171 | dllWkeRunJSW uintptr
172 | dllWkeRunJS uintptr
173 | dllWkeGlobalExec uintptr
174 | dllWkeSleep uintptr
175 | dllWkeWake uintptr
176 | dllWkeIsAwake uintptr
177 | dllWkeSetTransparent uintptr
178 | dllWkeSetZoomFactor uintptr
179 | dllWkeGetZoomFactor uintptr
180 | dllWkeSetEditable uintptr
181 | dllWkeGetStringW uintptr
182 | dllWkeGetString uintptr
183 | dllWkeSetStringW uintptr
184 | dllWkeGetWebViewForCurrentContext uintptr
185 | dllWkeSetUserKeyValue uintptr
186 | dllWkeGetUserKeyValue uintptr
187 | dllWkeSetDragFiles uintptr
188 | dllWkeOnTitleChanged uintptr
189 | dllWkeOnURLChanged uintptr
190 | dllWkeOnURLChanged2 uintptr
191 | dllWkeOnAlertBox uintptr
192 | dllWkeOnConfirmBox uintptr
193 | dllWkeOnPromptBox uintptr
194 | dllWkeOnNavigation uintptr
195 | dllWkeOnCreateView uintptr
196 | dllWkeOnDocumentReady uintptr
197 | dllWkeOnDocumentReady2 uintptr
198 | dllWkeOnLoadingFinish uintptr
199 | dllWkeOnDownload uintptr
200 | dllWkeOnConsole uintptr
201 | dllWkeOnPaintUpdated uintptr
202 | dllWkeOnWillMediaLoad uintptr
203 | dllWkeFireMouseEvent uintptr
204 | dllWkeFireContextMenuEvent uintptr
205 | dllWkeFireMouseWheelEvent uintptr
206 | dllWkeFireKeyUpEvent uintptr
207 | dllWkeFireKeyDownEvent uintptr
208 | dllWkeFireKeyPressEvent uintptr
209 | dllWkeFireWindowsMessage uintptr
210 | dllWkeIsMainFrame uintptr
211 | dllWkeIsWebRemoteFrame uintptr
212 | dllWkeWebFrameGetMainFrame uintptr
213 | dllWkeNetSetMIMEType uintptr
214 | dllWkeNetSetHTTPHeaderField uintptr
215 | dllWkeNetGetHTTPHeaderField uintptr
216 | dllWkeNetSetURL uintptr
217 | dllWkeNetSetData uintptr
218 | dllWkeGetCursorInfoType uintptr
219 | dllWkeSetCspCheckEnable uintptr
220 | dllWkeSetViewNetInterface uintptr
221 | dllWkeNetHookRequest uintptr
222 | dllWkeOnLoadUrlBegin uintptr
223 | dllWkeOnLoadUrlEnd uintptr
224 | dllWkeOnDidCreateScriptContext uintptr
225 | dllWkeOnWillReleaseScriptContext uintptr
226 | dllWkeNetOnResponse uintptr
227 | dllWkeNetGetMIMEType uintptr
228 | dllWkeWebFrameGetMainWorldScriptContext uintptr
229 | dllWkeGetBlinkMainThreadIsolate uintptr
230 | dllWkeCreateStringW uintptr
231 | dllWkeDeleteString uintptr
232 | dllWkeSetLocalStorageFullPath uintptr
233 | dllWkeJsBindFunction uintptr
234 | dllJsBindFunction uintptr
235 | dllWkeJsBindGetter uintptr
236 | dllJsBindGetter uintptr
237 | dllWkeJsBindSetter uintptr
238 | dllJsBindSetter uintptr
239 | dllJsArgCount uintptr
240 | dllJsArgType uintptr
241 | dllJsArg uintptr
242 | dllJsTypeOf uintptr
243 | dllJsIsNumber uintptr
244 | dllJsIsString uintptr
245 | dllJsIsBoolean uintptr
246 | dllJsIsObject uintptr
247 | dllJsIsFunction uintptr
248 | dllJsIsUndefined uintptr
249 | dllJsIsNull uintptr
250 | dllJsIsArray uintptr
251 | dllJsIsTrue uintptr
252 | dllJsIsFalse uintptr
253 | dllJsToInt uintptr
254 | dllJsToFloat uintptr
255 | dllJsToDouble uintptr
256 | dllJsToBoolean uintptr
257 | dllJsToTempStringW uintptr
258 | dllJsToTempString uintptr
259 | dllJsInt uintptr
260 | dllJsFloat uintptr
261 | dllJsDouble uintptr
262 | dllJsBoolean uintptr
263 | dllJsUndefined uintptr
264 | dllJsNull uintptr
265 | dllJsTrue uintptr
266 | dllJsFalse uintptr
267 | dllJsStringW uintptr
268 | dllJsEmptyObject uintptr
269 | dllJsEmptyArray uintptr
270 | dllJsObject uintptr
271 | dllJsFunction uintptr
272 | dllJsGetData uintptr
273 | dllJsGet uintptr
274 | dllJsSet uintptr
275 | dllJsGetAt uintptr
276 | dllJsSetAt uintptr
277 | dllJsGetLength uintptr
278 | dllJsSetLength uintptr
279 | dllJsGlobalObject uintptr
280 | dllJsGetWebView uintptr
281 | dllJsEvalW uintptr
282 | dllJsEvalExW uintptr
283 | dllJsCall uintptr
284 | dllJsCallGlobal uintptr
285 | dllJsGetGlobal uintptr
286 | dllJsSetGlobal uintptr
287 | dllJsGC uintptr
288 | dllJsToString uintptr
289 | dllJsToStringW uintptr
290 | dllJsArrayBuffer uintptr
291 | dllWkeSetFileSystem uintptr
292 | dllWkeCreateWebView uintptr
293 | dllWkeGetWebView uintptr
294 | dllWkeGetCaretRect uintptr
295 | dllWkeDestroyWebView uintptr
296 | dllWkeVisitAllCookie uintptr
297 | dllWkePerformCookieCommand uintptr
298 | dllWkeRunJsByFrame uintptr
299 | dllWkeSetNpapiPluginsEnabled uintptr
300 | dllWkeSetHeadlessEnabled uintptr
301 | dllWkeSetTouchEnabled uintptr
302 | dllWkeSetDragEnable uintptr
303 | dllWkeSetMemoryCacheEnable uintptr
304 | dllWkeOnMouseOverUrlChanged uintptr
305 | dllWkeSetDebugConfig uintptr
306 | dllWkeSetDeviceParameter uintptr
307 | dllWkeGetUserAgent uintptr
308 | dllWkeNetCancelRequest uintptr
309 | gonode syscall.Handle
310 | GOjsArg uintptr
311 | GOjsToString uintptr
312 | GOwkeRunJS uintptr
313 | GOjsIsTrue uintptr
314 | GOjsToInt uintptr
315 | GOjsToDouble uintptr
316 | GOBindNavigation uintptr
317 | GOBindCreateView uintptr
318 | GOBindLoadUrlBegin uintptr
319 | GOwkeSetNavigationToNewWindowEnable uintptr
320 | GOwkeCanGoBack uintptr
321 | GOwkeCanGoForward uintptr
322 | )
323 |
324 | func loadMBDLL(mbPath, gonodePath string) {
325 |
326 | kr32, _ = syscall.LoadLibrary("kernel32.dll")
327 | dllGetCurrentThreadId, _ = syscall.GetProcAddress(kr32, "GetCurrentThreadId")
328 |
329 | u32, _ = syscall.LoadLibrary("user32.dll")
330 | dllPostQuitMessage, _ = syscall.GetProcAddress(u32, "PostQuitMessage")
331 | dllDispatchMessage, _ = syscall.GetProcAddress(u32, "DispatchMessageW")
332 | dllTranslateMessage, _ = syscall.GetProcAddress(u32, "TranslateMessage")
333 | dllPeekMessage, _ = syscall.GetProcAddress(u32, "PeekMessageW")
334 |
335 | mb, _ = syscall.LoadLibrary(mbPath)
336 | gonode, _ = syscall.LoadLibrary(gonodePath)
337 |
338 | GOjsArg, _ = syscall.GetProcAddress(gonode, "GOjsArg")
339 | GOjsToString, _ = syscall.GetProcAddress(gonode, "GOjsToString")
340 | GOwkeRunJS, _ = syscall.GetProcAddress(gonode, "GOwkeRunJS")
341 | GOjsIsTrue, _ = syscall.GetProcAddress(gonode, "GOjsIsTrue")
342 | GOjsToInt, _ = syscall.GetProcAddress(gonode, "GOjsToInt")
343 | GOjsToDouble, _ = syscall.GetProcAddress(gonode, "GOjsToDouble")
344 | GOBindNavigation, _ = syscall.GetProcAddress(gonode, "GOBindNavigation")
345 | GOBindCreateView, _ = syscall.GetProcAddress(gonode, "GOBindCreateView")
346 | GOBindLoadUrlBegin, _ = syscall.GetProcAddress(gonode, "GOBindLoadUrlBegin")
347 | GOwkeSetNavigationToNewWindowEnable, _ = syscall.GetProcAddress(gonode, "GOwkeSetNavigationToNewWindowEnable")
348 | GOwkeCanGoBack, _ = syscall.GetProcAddress(gonode, "GOwkeCanGoBack")
349 | GOwkeCanGoForward, _ = syscall.GetProcAddress(gonode, "GOwkeCanGoForward")
350 |
351 | dllWkeCreateWebWindow, _ = syscall.GetProcAddress(mb, "wkeCreateWebWindow")
352 | dllWkeDestroyWebWindow, _ = syscall.GetProcAddress(mb, "wkeDestroyWebWindow")
353 | dllWkeGetWindowHandle, _ = syscall.GetProcAddress(mb, "wkeGetWindowHandle")
354 | dllWkeShowWindow, _ = syscall.GetProcAddress(mb, "wkeShowWindow")
355 | dllWkeNetCancelRequest, _ = syscall.GetProcAddress(mb, "wkeNetCancelRequest")
356 |
357 | /*
358 | dllWkeEnableWindow, _ = syscall.GetProcAddress(mb, "wkeEnableWindow")
359 | dllWkeMoveWindow, _ = syscall.GetProcAddress(mb, "wkeMoveWindow")*/
360 | dllWkeMoveToCenter, _ = syscall.GetProcAddress(mb, "wkeMoveToCenter") /*
361 | dllWkeResizeWindow, _ = syscall.GetProcAddress(mb, "wkeResizeWindow")*/
362 | dllWkeSetWindowTitleW, _ = syscall.GetProcAddress(mb, "wkeSetWindowTitleW")
363 | dllWkeInitialize, _ = syscall.GetProcAddress(mb, "wkeInitialize")
364 | dllWkeIsInitialize, _ = syscall.GetProcAddress(mb, "wkeIsInitialize") /*
365 | dllWkeInitializeEx, _ = syscall.GetProcAddress(mb, "wkeInitializeEx")*/
366 | dllWkeFinalize, _ = syscall.GetProcAddress(mb, "wkeFinalize")
367 | dllWkeGetUserAgent, _ = syscall.GetProcAddress(mb, "wkeGetUserAgent") /*
368 | dllWkeUpdate, _ = syscall.GetProcAddress(mb, "wkeUpdate")
369 | dllWkeGetVersion, _ = syscall.GetProcAddress(mb, "wkeGetVersion")
370 | dllWkeGetVersionString, _ = syscall.GetProcAddress(mb, "wkeGetVersionString")
371 | dllWkeOnWindowClosing, _ = syscall.GetProcAddress(mb, "wkeOnWindowClosing")*/
372 | dllWkeOnWindowDestroy, _ = syscall.GetProcAddress(mb, "wkeOnWindowDestroy") /*
373 | dllWkeSetNavigationToNewWindowEnable, _ = syscall.GetProcAddress(mb, "wkeSetNavigationToNewWindowEnable") /*
374 | dllWkeLoadW, _ = syscall.GetProcAddress(mb, "wkeLoadW")
375 | dllWkeSetProxy, _ = syscall.GetProcAddress(mb, "wkeSetProxy")
376 | dllWkeSetViewProxy, _ = syscall.GetProcAddress(mb, "wkeSetViewProxy")
377 | dllWkeGetName, _ = syscall.GetProcAddress(mb, "wkeGetName")
378 | dllWkeSetName, _ = syscall.GetProcAddress(mb, "wkeSetName")*/
379 | dllWkeSetHandle, _ = syscall.GetProcAddress(mb, "wkeSetHandle") /*
380 | dllWkeSetHandleOffset, _ = syscall.GetProcAddress(mb, "wkeSetHandleOffset")
381 | dllWkeSetUserAgentW, _ = syscall.GetProcAddress(mb, "wkeSetUserAgentW")
382 | dllWkeSetUserAgent, _ = syscall.GetProcAddress(mb, "wkeSetUserAgent")*/
383 | dllWkeLoadURLW, _ = syscall.GetProcAddress(mb, "wkeLoadURLW")
384 | dllWkeLoadURL, _ = syscall.GetProcAddress(mb, "wkeLoadURL") /*
385 | dllWkeLoadHTMLW, _ = syscall.GetProcAddress(mb, "wkeLoadHTMLW")*/
386 | dllWkeLoadHTML, _ = syscall.GetProcAddress(mb, "wkeLoadHTML") /*
387 | dllWkeLoadFileW, _ = syscall.GetProcAddress(mb, "wkeLoadFileW")
388 | dllWkePostURLW, _ = syscall.GetProcAddress(mb, "wkePostURLW")
389 | dllWkePostURL, _ = syscall.GetProcAddress(mb, "wkePostURL")*/
390 | dllWkeGetURL, _ = syscall.GetProcAddress(mb, "wkeGetURL") /*
391 | dllWkeIsLoading, _ = syscall.GetProcAddress(mb, "wkeIsLoading")
392 | dllWkeIsLoadingSucceeded, _ = syscall.GetProcAddress(mb, "wkeIsLoadingSucceeded")
393 | dllWkeIsLoadingFailed, _ = syscall.GetProcAddress(mb, "wkeIsLoadingFailed")
394 | dllWkeIsLoadingCompleted, _ = syscall.GetProcAddress(mb, "wkeIsLoadingCompleted")*/
395 | dllWkeIsDocumentReady, _ = syscall.GetProcAddress(mb, "wkeIsDocumentReady") /*
396 | dllWkeStopLoading, _ = syscall.GetProcAddress(mb, "wkeStopLoading")*/
397 | dllWkeReload, _ = syscall.GetProcAddress(mb, "wkeReload") /*
398 | dllWkeGetTitleW, _ = syscall.GetProcAddress(mb, "wkeGetTitleW")*/
399 | dllWkeGetTitle, _ = syscall.GetProcAddress(mb, "wkeGetTitle")
400 | dllWkeResize, _ = syscall.GetProcAddress(mb, "wkeResize") /*
401 | dllWkeGetWidth, _ = syscall.GetProcAddress(mb, "wkeGetWidth")
402 | dllWkeGetHeight, _ = syscall.GetProcAddress(mb, "wkeGetHeight")
403 | dllWkeGetContentWidth, _ = syscall.GetProcAddress(mb, "wkeGetContentWidth")
404 | dllWkeGetContentHeight, _ = syscall.GetProcAddress(mb, "wkeGetContentHeight")
405 | dllWkeRepaintIfNeeded, _ = syscall.GetProcAddress(mb, "wkeRepaintIfNeeded")
406 | dllWkeSetDirty, _ = syscall.GetProcAddress(mb, "wkeSetDirty")
407 | dllWkeIsDirty, _ = syscall.GetProcAddress(mb, "wkeIsDirty")
408 | dllWkeAddDirtyArea, _ = syscall.GetProcAddress(mb, "wkeAddDirtyArea")
409 | dllWkeLayoutIfNeeded, _ = syscall.GetProcAddress(mb, "wkeLayoutIfNeeded")
410 | dllWkePaint2, _ = syscall.GetProcAddress(mb, "wkePaint2")
411 | dllWkePaint, _ = syscall.GetProcAddress(mb, "wkePaint")*/
412 | dllWkeGetViewDC, _ = syscall.GetProcAddress(mb, "wkeGetViewDC") /*
413 | dllWkeGC, _ = syscall.GetProcAddress(mb, "wkeGC")
414 | dllWkeGetHostHWND, _ = syscall.GetProcAddress(mb, "wkeGetHostHWND")
415 | dllWkeGetSource, _ = syscall.GetProcAddress(mb, "wkeGetSource")
416 | dllWkeCanGoBack, _ = syscall.GetProcAddress(mb, "wkeCanGoBack")
417 | dllWkeCanGoForward, _ = syscall.GetProcAddress(mb, "wkeCanGoForward")*/
418 | dllWkeGoBack, _ = syscall.GetProcAddress(mb, "wkeGoBack")
419 | dllWkeGoForward, _ = syscall.GetProcAddress(mb, "wkeGoForward") /*
420 | dllWkeEditorSelectAll, _ = syscall.GetProcAddress(mb, "wkeEditorSelectAll")
421 | dllWkeEditorUnSelect, _ = syscall.GetProcAddress(mb, "wkeEditorUnSelect")
422 | dllWkeEditorCopy, _ = syscall.GetProcAddress(mb, "wkeEditorCopy")
423 | dllWkeEditorCut, _ = syscall.GetProcAddress(mb, "wkeEditorCut")
424 | dllWkeEditorPaste, _ = syscall.GetProcAddress(mb, "wkeEditorPaste")
425 | dllWkeEditorDelete, _ = syscall.GetProcAddress(mb, "wkeEditorDelete")
426 | dllWkeEditorUndo, _ = syscall.GetProcAddress(mb, "wkeEditorUndo")
427 | dllWkeEditorRedo, _ = syscall.GetProcAddress(mb, "wkeEditorRedo")
428 | dllWkeGetCookieW, _ = syscall.GetProcAddress(mb, "wkeGetCookieW")*/
429 | dllWkeGetCookie, _ = syscall.GetProcAddress(mb, "wkeGetCookie") /*
430 | dllWkeSetCookie, _ = syscall.GetProcAddress(mb, "wkeSetCookie")
431 | dllWkeSetCookieEnabled, _ = syscall.GetProcAddress(mb, "wkeSetCookieEnabled")
432 | dllWkeIsCookieEnabled, _ = syscall.GetProcAddress(mb, "wkeIsCookieEnabled")
433 | dllWkeSetCookieJarPath, _ = syscall.GetProcAddress(mb, "wkeSetCookieJarPath")
434 | dllWkeSetCookieJarFullPath, _ = syscall.GetProcAddress(mb, "wkeSetCookieJarFullPath")
435 | dllWkeSetMediaVolume, _ = syscall.GetProcAddress(mb, "wkeSetMediaVolume")
436 | dllWkeGetMediaVolume, _ = syscall.GetProcAddress(mb, "wkeGetMediaVolume")*/
437 | dllWkeSetFocus, _ = syscall.GetProcAddress(mb, "wkeSetFocus")
438 | dllWkeKillFocus, _ = syscall.GetProcAddress(mb, "wkeKillFocus") /*
439 | dllWkeRunJSW, _ = syscall.GetProcAddress(mb, "wkeRunJSW")*/
440 | dllWkeRunJS, _ = syscall.GetProcAddress(mb, "wkeRunJS")
441 | dllWkeGlobalExec, _ = syscall.GetProcAddress(mb, "wkeGlobalExec") /*
442 | dllWkeSleep, _ = syscall.GetProcAddress(mb, "wkeSleep")
443 | dllWkeWake, _ = syscall.GetProcAddress(mb, "wkeWake")
444 | dllWkeIsAwake, _ = syscall.GetProcAddress(mb, "wkeIsAwake")
445 | dllWkeSetTransparent, _ = syscall.GetProcAddress(mb, "wkeSetTransparent")
446 | dllWkeSetZoomFactor, _ = syscall.GetProcAddress(mb, "wkeSetZoomFactor")
447 | dllWkeGetZoomFactor, _ = syscall.GetProcAddress(mb, "wkeGetZoomFactor")
448 | dllWkeSetEditable, _ = syscall.GetProcAddress(mb, "wkeSetEditable")
449 | dllWkeGetStringW, _ = syscall.GetProcAddress(mb, "wkeGetStringW")*/
450 | dllWkeGetString, _ = syscall.GetProcAddress(mb, "wkeGetString") /*
451 | dllWkeSetStringW, _ = syscall.GetProcAddress(mb, "wkeSetStringW")
452 | dllWkeGetWebViewForCurrentContext, _ = syscall.GetProcAddress(mb, "wkeGetWebViewForCurrentContext")
453 | dllWkeSetUserKeyValue, _ = syscall.GetProcAddress(mb, "wkeSetUserKeyValue")
454 | dllWkeGetUserKeyValue, _ = syscall.GetProcAddress(mb, "wkeGetUserKeyValue")
455 | dllWkeSetDragFiles, _ = syscall.GetProcAddress(mb, "wkeSetDragFiles")*/
456 | dllWkeOnTitleChanged, _ = syscall.GetProcAddress(mb, "wkeOnTitleChanged")
457 | dllWkeOnURLChanged, _ = syscall.GetProcAddress(mb, "wkeOnURLChanged")
458 | dllWkeOnURLChanged2, _ = syscall.GetProcAddress(mb, "wkeOnURLChanged2")
459 | dllWkeOnAlertBox, _ = syscall.GetProcAddress(mb, "wkeOnAlertBox") /*
460 | dllWkeOnConfirmBox, _ = syscall.GetProcAddress(mb, "wkeOnConfirmBox")
461 | dllWkeOnPromptBox, _ = syscall.GetProcAddress(mb, "wkeOnPromptBox")
462 | dllWkeOnNavigation, _ = syscall.GetProcAddress(mb, "wkeOnNavigation")*/
463 | dllWkeOnCreateView, _ = syscall.GetProcAddress(mb, "wkeOnCreateView")
464 | dllWkeOnDocumentReady, _ = syscall.GetProcAddress(mb, "wkeOnDocumentReady")
465 | dllWkeOnDocumentReady2, _ = syscall.GetProcAddress(mb, "wkeOnDocumentReady2") /*
466 | dllWkeOnLoadingFinish, _ = syscall.GetProcAddress(mb, "wkeOnLoadingFinish")
467 | dllWkeOnDownload, _ = syscall.GetProcAddress(mb, "wkeOnDownload")
468 | dllWkeOnConsole, _ = syscall.GetProcAddress(mb, "wkeOnConsole")
469 | dllWkeOnPaintUpdated, _ = syscall.GetProcAddress(mb, "wkeOnPaintUpdated")
470 | dllWkeOnWillMediaLoad, _ = syscall.GetProcAddress(mb, "wkeOnWillMediaLoad")
471 | dllWkeFireMouseEvent, _ = syscall.GetProcAddress(mb, "wkeFireMouseEvent")
472 | dllWkeFireContextMenuEvent, _ = syscall.GetProcAddress(mb, "wkeFireContextMenuEvent")
473 | dllWkeFireMouseWheelEvent, _ = syscall.GetProcAddress(mb, "wkeFireMouseWheelEvent")
474 | dllWkeFireKeyUpEvent, _ = syscall.GetProcAddress(mb, "wkeFireKeyUpEvent")
475 | dllWkeFireKeyDownEvent, _ = syscall.GetProcAddress(mb, "wkeFireKeyDownEvent")
476 | dllWkeFireKeyPressEvent, _ = syscall.GetProcAddress(mb, "wkeFireKeyPressEvent")
477 | dllWkeFireWindowsMessage, _ = syscall.GetProcAddress(mb, "wkeFireWindowsMessage")
478 | dllWkeIsMainFrame, _ = syscall.GetProcAddress(mb, "wkeIsMainFrame")
479 | dllWkeIsWebRemoteFrame, _ = syscall.GetProcAddress(mb, "wkeIsWebRemoteFrame")
480 | dllWkeWebFrameGetMainFrame, _ = syscall.GetProcAddress(mb, "wkeWebFrameGetMainFrame")
481 | dllWkeNetSetMIMEType, _ = syscall.GetProcAddress(mb, "wkeNetSetMIMEType")
482 | dllWkeNetSetHTTPHeaderField, _ = syscall.GetProcAddress(mb, "wkeNetSetHTTPHeaderField")
483 | dllWkeNetGetHTTPHeaderField, _ = syscall.GetProcAddress(mb, "wkeNetGetHTTPHeaderField")
484 | dllWkeNetSetURL, _ = syscall.GetProcAddress(mb, "wkeNetSetURL")
485 | dllWkeNetSetData, _ = syscall.GetProcAddress(mb, "wkeNetSetData")
486 | dllWkeGetCursorInfoType, _ = syscall.GetProcAddress(mb, "wkeGetCursorInfoType")
487 | dllWkeSetCspCheckEnable, _ = syscall.GetProcAddress(mb, "wkeSetCspCheckEnable")
488 | dllWkeSetViewNetInterface, _ = syscall.GetProcAddress(mb, "wkeSetViewNetInterface")*/
489 | dllWkeNetHookRequest, _ = syscall.GetProcAddress(mb, "wkeNetHookRequest")
490 | dllWkeOnLoadUrlBegin, _ = syscall.GetProcAddress(mb, "wkeOnLoadUrlBegin")
491 | dllWkeOnLoadUrlEnd, _ = syscall.GetProcAddress(mb, "wkeOnLoadUrlEnd") /*
492 | dllWkeOnDidCreateScriptContext, _ = syscall.GetProcAddress(mb, "wkeOnDidCreateScriptContext")
493 | dllWkeOnWillReleaseScriptContext, _ = syscall.GetProcAddress(mb, "wkeOnWillReleaseScriptContext")
494 | dllWkeNetOnResponse, _ = syscall.GetProcAddress(mb, "wkeNetOnResponse")
495 | dllWkeNetGetMIMEType, _ = syscall.GetProcAddress(mb, "wkeNetGetMIMEType")
496 | dllWkeWebFrameGetMainWorldScriptContext, _ = syscall.GetProcAddress(mb, "wkeWebFrameGetMainWorldScriptContext")
497 | dllWkeGetBlinkMainThreadIsolate, _ = syscall.GetProcAddress(mb, "wkeGetBlinkMainThreadIsolate")
498 | dllWkeCreateStringW, _ = syscall.GetProcAddress(mb, "wkeCreateStringW")
499 | dllWkeDeleteString, _ = syscall.GetProcAddress(mb, "wkeDeleteString")
500 | dllWkeSetLocalStorageFullPath, _ = syscall.GetProcAddress(mb, "wkeSetLocalStorageFullPath")*/
501 | dllWkeJsBindFunction, _ = syscall.GetProcAddress(mb, "wkeJsBindFunction") /*
502 | dllJsBindFunction, _ = syscall.GetProcAddress(mb, "jsBindFunction")
503 | dllWkeJsBindGetter, _ = syscall.GetProcAddress(mb, "wkeJsBindGetter")
504 | dllJsBindGetter, _ = syscall.GetProcAddress(mb, "jsBindGetter")
505 | dllWkeJsBindSetter, _ = syscall.GetProcAddress(mb, "wkeJsBindSetter")
506 | dllJsBindSetter, _ = syscall.GetProcAddress(mb, "jsBindSetter")
507 | dllJsArgCount, _ = syscall.GetProcAddress(mb, "jsArgCount")
508 | dllJsArgType, _ = syscall.GetProcAddress(mb, "jsArgType")*/
509 | dllJsArg, _ = syscall.GetProcAddress(mb, "jsArg") /*
510 | dllJsTypeOf, _ = syscall.GetProcAddress(mb, "jsTypeOf")
511 | dllJsIsNumber, _ = syscall.GetProcAddress(mb, "jsIsNumber")
512 | dllJsIsString, _ = syscall.GetProcAddress(mb, "jsIsString")
513 | dllJsIsBoolean, _ = syscall.GetProcAddress(mb, "jsIsBoolean")
514 | dllJsIsObject, _ = syscall.GetProcAddress(mb, "jsIsObject")
515 | dllJsIsFunction, _ = syscall.GetProcAddress(mb, "jsIsFunction")
516 | dllJsIsUndefined, _ = syscall.GetProcAddress(mb, "jsIsUndefined")
517 | dllJsIsNull, _ = syscall.GetProcAddress(mb, "jsIsNull")
518 | dllJsIsArray, _ = syscall.GetProcAddress(mb, "jsIsArray")*/
519 | dllJsIsTrue, _ = syscall.GetProcAddress(mb, "jsIsTrue")
520 | dllJsIsFalse, _ = syscall.GetProcAddress(mb, "jsIsFalse")
521 | dllJsToInt, _ = syscall.GetProcAddress(mb, "jsToInt")
522 | dllJsToFloat, _ = syscall.GetProcAddress(mb, "jsToFloat")
523 | dllJsToDouble, _ = syscall.GetProcAddress(mb, "jsToDouble") /*
524 | dllJsToBoolean, _ = syscall.GetProcAddress(mb, "jsToBoolean")*/
525 | dllJsToTempString, _ = syscall.GetProcAddress(mb, "jsToTempString") /*
526 | dllJsInt, _ = syscall.GetProcAddress(mb, "jsInt")
527 | dllJsFloat, _ = syscall.GetProcAddress(mb, "jsFloat")
528 | dllJsDouble, _ = syscall.GetProcAddress(mb, "jsDouble")
529 | dllJsBoolean, _ = syscall.GetProcAddress(mb, "jsBoolean")
530 | dllJsUndefined, _ = syscall.GetProcAddress(mb, "jsUndefined")
531 | dllJsNull, _ = syscall.GetProcAddress(mb, "jsNull")
532 | dllJsTrue, _ = syscall.GetProcAddress(mb, "jsTrue")
533 | dllJsFalse, _ = syscall.GetProcAddress(mb, "jsFalse")
534 | dllJsStringW, _ = syscall.GetProcAddress(mb, "jsStringW")
535 | dllJsEmptyObject, _ = syscall.GetProcAddress(mb, "jsEmptyObject")
536 | dllJsEmptyArray, _ = syscall.GetProcAddress(mb, "jsEmptyArray")
537 | dllJsObject, _ = syscall.GetProcAddress(mb, "jsObject")
538 | dllJsFunction, _ = syscall.GetProcAddress(mb, "jsFunction")
539 | dllJsGetData, _ = syscall.GetProcAddress(mb, "jsGetData")
540 | dllJsGet, _ = syscall.GetProcAddress(mb, "jsGet")
541 | dllJsSet, _ = syscall.GetProcAddress(mb, "jsSet")
542 | dllJsGetAt, _ = syscall.GetProcAddress(mb, "jsGetAt")
543 | dllJsSetAt, _ = syscall.GetProcAddress(mb, "jsSetAt")
544 | dllJsGetLength, _ = syscall.GetProcAddress(mb, "jsGetLength")
545 | dllJsSetLength, _ = syscall.GetProcAddress(mb, "jsSetLength")
546 | dllJsGlobalObject, _ = syscall.GetProcAddress(mb, "jsGlobalObject")
547 | dllJsGetWebView, _ = syscall.GetProcAddress(mb, "jsGetWebView")
548 | dllJsEvalW, _ = syscall.GetProcAddress(mb, "jsEvalW")
549 | dllJsEvalExW, _ = syscall.GetProcAddress(mb, "jsEvalExW")
550 | dllJsCall, _ = syscall.GetProcAddress(mb, "jsCall")
551 | dllJsCallGlobal, _ = syscall.GetProcAddress(mb, "jsCallGlobal")
552 | dllJsGetGlobal, _ = syscall.GetProcAddress(mb, "jsGetGlobal")
553 | dllJsSetGlobal, _ = syscall.GetProcAddress(mb, "jsSetGlobal")
554 | dllJsGC, _ = syscall.GetProcAddress(mb, "jsGC")*/
555 | dllJsToString, _ = syscall.GetProcAddress(mb, "jsToString")
556 | dllJsToStringW, _ = syscall.GetProcAddress(mb, "jsToStringW") /*
557 | dllJsArrayBuffer, _ = syscall.GetProcAddress(mb, "jsArrayBuffer")
558 | dllWkeSetFileSystem, _ = syscall.GetProcAddress(mb, "wkeSetFileSystem")*/
559 | dllWkeCreateWebView, _ = syscall.GetProcAddress(mb, "wkeCreateWebView")
560 | dllWkeGetWebView, _ = syscall.GetProcAddress(mb, "wkeGetWebView")
561 | dllWkeGetCaretRect, _ = syscall.GetProcAddress(mb, "wkeGetCaretRect") /*
562 | dllWkeDestroyWebView, _ = syscall.GetProcAddress(mb, "wkeDestroyWebView")
563 | dllWkeVisitAllCookie, _ = syscall.GetProcAddress(mb, "wkeVisitAllCookie")
564 | dllWkePerformCookieCommand, _ = syscall.GetProcAddress(mb, "wkePerformCookieCommand")
565 | dllWkeRunJsByFrame, _ = syscall.GetProcAddress(mb, "wkeRunJsByFrame")
566 | dllWkeSetNpapiPluginsEnabled, _ = syscall.GetProcAddress(mb, "wkeSetNpapiPluginsEnabled")
567 | dllWkeSetHeadlessEnabled, _ = syscall.GetProcAddress(mb, "wkeSetHeadlessEnabled")
568 | dllWkeSetTouchEnabled, _ = syscall.GetProcAddress(mb, "wkeSetTouchEnabled")
569 | dllWkeSetDragEnable, _ = syscall.GetProcAddress(mb, "wkeSetDragEnable")
570 | dllWkeSetMemoryCacheEnable, _ = syscall.GetProcAddress(mb, "wkeSetMemoryCacheEnable")
571 | dllWkeOnMouseOverUrlChanged, _ = syscall.GetProcAddress(mb, "wkeOnMouseOverUrlChanged")
572 | dllWkeSetDebugConfig, _ = syscall.GetProcAddress(mb, "wkeSetDebugConfig")
573 | dllWkeSetDeviceParameter, _ = syscall.GetProcAddress(mb, "wkeSetDeviceParameter")*/
574 |
575 | }
576 |
577 | func freeMBDLL() {
578 | syscall.FreeLibrary(mb)
579 | syscall.FreeLibrary(gonode)
580 | syscall.FreeLibrary(kr32)
581 | syscall.FreeLibrary(u32)
582 | }
583 |
--------------------------------------------------------------------------------
/miniblinkCommand.go:
--------------------------------------------------------------------------------
1 | package gowebui
2 |
3 | import (
4 | "syscall"
5 | "unicode/utf16"
6 | "unsafe"
7 | )
8 |
9 | type point struct {
10 | X, Y int32
11 | }
12 | type msg struct {
13 | HWnd uintptr
14 | Message uint32
15 | WParam uintptr
16 | LParam uintptr
17 | Time uint32
18 | Pt point
19 | }
20 |
21 | func getCurrentThreadId() uint32 {
22 | ret, _, _ := syscall.Syscall(dllGetCurrentThreadId, 0,
23 | 0,
24 | 0,
25 | 0)
26 |
27 | return uint32(ret)
28 | }
29 |
30 | func postQuitMessage(exitCode int32) {
31 | syscall.Syscall(dllPostQuitMessage, 1,
32 | uintptr(exitCode),
33 | 0,
34 | 0)
35 | }
36 |
37 | func peekMessage(lpMsg *msg, hWnd uintptr, wMsgFilterMin, wMsgFilterMax, wRemoveMsg uint32) bool {
38 | ret, _, _ := syscall.Syscall6(dllPeekMessage, 5,
39 | uintptr(unsafe.Pointer(lpMsg)),
40 | uintptr(hWnd),
41 | uintptr(wMsgFilterMin),
42 | uintptr(wMsgFilterMax),
43 | uintptr(wRemoveMsg),
44 | 0)
45 |
46 | return ret != 0
47 | }
48 |
49 | func translateMessage(msg *msg) bool {
50 | ret, _, _ := syscall.Syscall(dllTranslateMessage, 1,
51 | uintptr(unsafe.Pointer(msg)),
52 | 0,
53 | 0)
54 |
55 | return ret != 0
56 | }
57 |
58 | func dispatchMessage(msg *msg) uintptr {
59 | ret, _, _ := syscall.Syscall(dllDispatchMessage, 1,
60 | uintptr(unsafe.Pointer(msg)),
61 | 0,
62 | 0)
63 |
64 | return ret
65 | }
66 |
67 | func miniblinkCommand(m_WebView WkeWebView, command string, args ...interface{}) interface{} {
68 | var ret uintptr
69 | switch command {
70 | case "wkeIsInitialize":
71 | ret, _, _ = syscall.Syscall(dllWkeIsInitialize, 0, 0, 0, 0)
72 | if ptrToInt32(ret) == 1 {
73 | return true
74 | } else {
75 | return false
76 | }
77 | case "wkeInitialize":
78 | ret, _, _ = syscall.Syscall(dllWkeInitialize, 0, 0, 0, 0)
79 | case "wkeDestroyWebWindow":
80 | ret, _, _ = syscall.Syscall(dllWkeDestroyWebWindow, 1, wkeWebViewToPtr(m_WebView), 0, 0)
81 | case "wkeLoadURL":
82 | ret, _, _ = syscall.Syscall(dllWkeLoadURL, 2, wkeWebViewToPtr(m_WebView), strToPtr(args[0].(string)), 0)
83 | case "wkeShowWindow":
84 | ret, _, _ = syscall.Syscall(dllWkeShowWindow, 2, wkeWebViewToPtr(m_WebView), args[0].(uintptr), 0)
85 | case "wkeMoveToCenter":
86 | ret, _, _ = syscall.Syscall(dllWkeMoveToCenter, 1, wkeWebViewToPtr(m_WebView), 0, 0)
87 | case "wkeGetURL":
88 | ret, _, _ = syscall.Syscall(dllWkeGetURL, 1, wkeWebViewToPtr(m_WebView), 0, 0)
89 | return PtrToString(ret)
90 | case "wkeGetTitle":
91 | ret, _, _ = syscall.Syscall(dllWkeGetTitle, 1, wkeWebViewToPtr(m_WebView), 0, 0)
92 | return PtrToString(ret)
93 | case "wkeCreateWebWindow":
94 | ret, _, _ = syscall.Syscall6(dllWkeCreateWebWindow, 6, int32ToPtr(args[0].(int32)), int32ToPtr(args[1].(int32)), int32ToPtr(args[2].(int32)), int32ToPtr(args[3].(int32)), int32ToPtr(args[4].(int32)), int32ToPtr(args[5].(int32)))
95 | return WkeWebView(ptrToInt32(ret))
96 | case "wkeGetWindowHandle":
97 | ret, _, _ = syscall.Syscall(dllWkeGetWindowHandle, 1, wkeWebViewToPtr(m_WebView), 0, 0)
98 | return HWnd(ptrToInt32(ret))
99 | case "wkeSetWindowTitle":
100 | ret, _, _ = syscall.Syscall(dllWkeSetWindowTitleW, 2, wkeWebViewToPtr(m_WebView), strToUTF16Ptr(args[0].(string)), 0)
101 | case "wkeLoadHTML":
102 | ret, _, _ = syscall.Syscall(dllWkeLoadHTML, 2, wkeWebViewToPtr(m_WebView), strToPtr(args[0].(string)), 0)
103 | case "jsArg":
104 | ret, _, _ = syscall.Syscall(GOjsArg, 2, jsExecStateToPtr(args[0].(JsExecState)), int32ToPtr(args[1].(int32)), 0)
105 | return JsValue(PtrToString(ret))
106 | case "jsToString":
107 | ret, _, _ = syscall.Syscall(GOjsToString, 2, jsExecStateToPtr(args[0].(JsExecState)), jsValueToPtr(args[1].(JsValue)), 0)
108 | return PtrToString(ret)
109 | case "wkeGlobalExec":
110 | ret, _, _ = syscall.Syscall(dllWkeGlobalExec, 1, wkeWebViewToPtr(m_WebView), 0, 0)
111 | return JsExecState(ptrToUint32(&ret))
112 | case "wkeRunJS":
113 | ret, _, _ = syscall.Syscall(GOwkeRunJS, 2, wkeWebViewToPtr(m_WebView), strToPtr(args[0].(string)), 0)
114 | return ptrToJsValue(ret)
115 | case "jsToInt":
116 | ret, _, _ = syscall.Syscall(GOjsToInt, 2, jsExecStateToPtr(args[0].(JsExecState)), jsValueToPtr(args[1].(JsValue)), 0)
117 | return ptrToInt32(ret)
118 | case "jsToDouble":
119 | ret, _, _ = syscall.Syscall(GOjsToDouble, 2, jsExecStateToPtr(args[0].(JsExecState)), jsValueToPtr(args[1].(JsValue)), 0)
120 | return ptrToFloat64(ret)
121 | case "jsIsTrue":
122 | ret, _, _ = syscall.Syscall(GOjsIsTrue, 1, jsValueToPtr(args[0].(JsValue)), 0, 0)
123 | if ptrToInt32(ret) == 1 {
124 | return true
125 | } else {
126 | return false
127 | }
128 | case "wkeIsDocumentReady":
129 | ret, _, _ = syscall.Syscall(dllWkeIsDocumentReady, 1, wkeWebViewToPtr(m_WebView), 0, 0)
130 | if ptrToInt32(ret) == 1 {
131 | return true
132 | } else {
133 | return false
134 | }
135 | case "wkeGetCookie":
136 | ret, _, _ = syscall.Syscall(dllWkeGetCookie, 1, wkeWebViewToPtr(m_WebView), 0, 0)
137 | return PtrToString(ret)
138 |
139 | case "wkeResize":
140 | ret, _, _ = syscall.Syscall(dllWkeResize, 3, wkeWebViewToPtr(m_WebView), args[0].(uintptr), args[1].(uintptr))
141 | return ret
142 |
143 | case "wkeGetUserAgent":
144 | ret, _, _ = syscall.Syscall(dllWkeGetUserAgent, 1, wkeWebViewToPtr(m_WebView), 0, 0)
145 | return PtrToString(ret)
146 | case "wkeGetString":
147 | ret, _, _ = syscall.Syscall(dllWkeGetString, 1, wkeStringToPtr(args[0].(WkeString)), 0, 0)
148 | return PtrToString(ret)
149 | case "wkeNetHookRequest":
150 | ret, _, _ = syscall.Syscall(dllWkeNetHookRequest, 1, args[0].(uintptr), 0, 0)
151 | return 0
152 | case "wkeNetCancelRequest":
153 | ret, _, _ = syscall.Syscall(dllWkeNetCancelRequest, 1, args[0].(uintptr), 0, 0)
154 | return 0
155 | case "wkeSetNavigationToNewWindowEnable":
156 | ret, _, _ = syscall.Syscall(GOwkeSetNavigationToNewWindowEnable, 2, wkeWebViewToPtr(m_WebView), args[0].(uintptr), 0)
157 | return 0
158 | case "wkeCanGoBack":
159 | ret, _, _ = syscall.Syscall(GOwkeCanGoBack, 1, wkeWebViewToPtr(m_WebView), 0, 0)
160 | if ptrToInt32(ret) == 1 {
161 | return true
162 | } else {
163 | return false
164 | }
165 | case "wkeGoBack":
166 | ret, _, _ = syscall.Syscall(dllWkeGoBack, 1, wkeWebViewToPtr(m_WebView), 0, 0)
167 | return 0
168 | case "wkeCanGoForward":
169 | ret, _, _ = syscall.Syscall(GOwkeCanGoForward, 1, wkeWebViewToPtr(m_WebView), 0, 0)
170 | if ptrToInt32(ret) == 1 {
171 | return true
172 | } else {
173 | return false
174 | }
175 | case "wkeGoForward":
176 | ret, _, _ = syscall.Syscall(dllWkeGoForward, 1, wkeWebViewToPtr(m_WebView), 0, 0)
177 | return 0
178 | case "wkeReload":
179 | ret, _, _ = syscall.Syscall(dllWkeReload, 1, wkeWebViewToPtr(m_WebView), 0, 0)
180 | return 0
181 | default:
182 | }
183 | return ret
184 | }
185 |
186 | //以下为类型转换
187 | func strToPtr(s string) uintptr {
188 | url := []byte(s)
189 | url = append(url, byte(0))
190 | return uintptr(unsafe.Pointer(&url[0]))
191 | }
192 | func strToUTF16Ptr(s string) uintptr {
193 | return uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s)))
194 | }
195 |
196 | func PtrToString(ptr uintptr) string {
197 | p := (*byte)(unsafe.Pointer(ptr))
198 | data := make([]byte, 0)
199 | for *p != 0 {
200 | data = append(data, *p)
201 | ptr += unsafe.Sizeof(byte(0))
202 | p = (*byte)(unsafe.Pointer(ptr))
203 | }
204 | return string(data)
205 | }
206 |
207 | func utf16ptrToString(po *uintptr) string {
208 | p := (*uint16)(unsafe.Pointer(po))
209 | ptr := *po
210 | data := make([]uint16, 0)
211 | for *p != 0 {
212 | data = append(data, *p)
213 | ptr += unsafe.Sizeof(uint16(0))
214 | p = (*uint16)(unsafe.Pointer(ptr))
215 | }
216 | return string(utf16.Decode(data))
217 | }
218 |
219 | func ptrToUint32(p *uintptr) uint32 {
220 | return *(*uint32)(unsafe.Pointer(p))
221 | }
222 |
223 | func ptrToInt32(p uintptr) int32 {
224 | return int32(p)
225 | }
226 |
227 | func ptrToFloat64(p uintptr) float64 {
228 | return *(*float64)(unsafe.Pointer(p))
229 | }
230 |
231 | func int32ToPtr(i int32) uintptr {
232 | return uintptr(i)
233 | }
234 |
235 | func wkeStringToPtr(s WkeString) uintptr {
236 | return uintptr(s)
237 | }
238 |
239 | func int64ToPtr(i int64) uintptr {
240 | return uintptr(unsafe.Pointer(&i))
241 | }
242 |
243 | func ptrToInt64(p *uintptr) int64 {
244 | return int64(*(*uint64)(unsafe.Pointer(p)))
245 | }
246 |
247 | func ptrToInt641(p uintptr) int64 {
248 | return int64(*(*uint64)(unsafe.Pointer(&p)))
249 | }
250 |
251 | func jsExecStateToPtr(es JsExecState) uintptr {
252 | return uintptr(es)
253 | }
254 |
255 | func wkeWebViewToPtr(w WkeWebView) uintptr {
256 | return uintptr(w)
257 | }
258 |
259 | func jsValueToPtr(v JsValue) uintptr {
260 | url := []byte(v)
261 | url = append(url, byte(0))
262 | return uintptr(unsafe.Pointer(&url[0]))
263 | }
264 |
265 | func ptrToJsValue(ptr uintptr) JsValue {
266 | p := (*byte)(unsafe.Pointer(ptr))
267 | data := make([]byte, 0)
268 | for *p != 0 {
269 | data = append(data, *p)
270 | ptr += unsafe.Sizeof(byte(0))
271 | p = (*byte)(unsafe.Pointer(ptr))
272 | }
273 | return JsValue(string(data))
274 | }
275 |
276 | func hWndToPtr(h HWnd) uintptr {
277 | return uintptr(h)
278 | }
279 |
--------------------------------------------------------------------------------