// 为窗口设置新的尺寸 func win_handler_sizeTo(browser *cef.Browser, args []cef.V8Value) (result interface{}) { fmt.Println("win_handler_sizeTo") width := cef.V8ValueToInt32(args[0]) height := cef.V8ValueToInt32(args[1]) h := win.HWND(browser.GetWindowHandle()) var rect win.RECT win.GetWindowRect(h, &rect) fmt.Printf("win_handler_sizeTo Left=%v,Right=%v,Width=%v,Height=%v\n", rect.Left, rect.Top, width, height) win.MoveWindow(h, rect.Left, rect.Top, width, height, true) //result = 1 return }
// 恢复窗口 func win_handler_restore(browser *cef.Browser, args []cef.V8Value) (result interface{}) { fmt.Println("win_handler_restore") h := win.HWND(browser.GetWindowHandle()) win.ShowWindow(h, win.SW_RESTORE) return }
// 最大化窗口 func win_handler_maximize(browser *cef.Browser, args []cef.V8Value) (result interface{}) { fmt.Println("win_handler_maximize") h := win.HWND(browser.GetWindowHandle()) win.ShowWindow(h, win.SW_MAXIMIZE) return }
// 退出程序 func win_handler_quit(browser *cef.Browser, args []cef.V8Value) (result interface{}) { h := win.HWND(browser.GetWindowHandle()) win.SendMessage(h, win.WM_CLOSE, 0, 0) //win.PostQuitMessage(0); os.Exit(1) return }
// 为窗口设置标题 func win_handler_setTitle(browser *cef.Browser, args []cef.V8Value) (result interface{}) { title := cef.V8ValueToString(args[0]) h := win.HWND(browser.GetWindowHandle()) win.SetWindowText(h, title) return }
func win_start_browser(browser *cef.Browser, message *cef.CefProcessMessage) interface{} { fmt.Printf("win_start_browser\n") handle := browser.GetWindowHandle() openerHandle := browser.GetOpenerWindowHandle() rootHandle := browser.GetRootWindowHandle() fmt.Printf("win_start_browser handle=%v openerHandle=%v rootHandle=%v\n", handle, openerHandle, rootHandle) win.ShowWindow(win.HWND(rootHandle), win.SW_MAXIMIZE) return 0 }
// 移动窗口 func win_handler_startDrag(browser *cef.Browser, args []cef.V8Value) (result interface{}) { fmt.Println("win_handler_startDrag") h := win.HWND(browser.GetWindowHandle()) var pt win.POINT win.GetCursorPos(&pt) isDrag = true win.PostMessage(h, win.WM_LBUTTONDOWN, win.HTCAPTION, uintptr(win.MAKELONG(uint16(pt.X), uint16(pt.Y)))) return }
// 为窗口设置新的位置 func win_handler_moveTo(browser *cef.Browser, args []cef.V8Value) (result interface{}) { fmt.Println("win_handler_moveTo") left := cef.V8ValueToInt32(args[0]) top := cef.V8ValueToInt32(args[1]) fmt.Printf("win_handler_moveTo left=%v,top=%v\n", left, top) h := win.HWND(browser.GetWindowHandle()) var rect win.RECT win.GetWindowRect(h, &rect) width := int32(rect.Right - rect.Left) height := int32(rect.Bottom - rect.Top) fmt.Printf("win_handler_moveTo Left=%v,Right=%v,Width=%v,Height=%v\n", left, top, width, height) win.MoveWindow(h, left, top, width, height, true) return }
// 关闭窗口 func win_handler_close(browser *cef.Browser, args []cef.V8Value) (result interface{}) { h := win.HWND(browser.GetWindowHandle()) win.SendMessage(h, win.WM_CLOSE, 0, 0) return }
// 模拟点击 func win_emuClick(browser *cef.Browser, message *cef.CefProcessMessage) interface{} { fmt.Printf("win_emuClick\n") handle := browser.GetWindowHandle() openerHandle := browser.GetOpenerWindowHandle() rootHandle := browser.GetRootWindowHandle() fmt.Printf("win_start_browser handle=%v openerHandle=%v rootHandle=%v\n", handle, openerHandle, rootHandle) //win.ShowWindow(win.HWND(rootHandle), win.SW_MAXIMIZE) // 模拟点击 // 查找窗口 url := message.GetArgumentList().GetString(1) fmt.Printf("url=%v\n", url) w, ok := windowHolders[url] if ok { fmt.Printf("找到窗口\n") b, o := cef.BrowserByHandle(unsafe.Pointer(w)) if o { x := message.GetArgumentList().GetInt(2) y := message.GetArgumentList().GetInt(3) buttonType := message.GetArgumentList().GetBool(4) fmt.Printf("X=%v Y=%v ButtonType=%v\n", x, y, buttonType) rootHandle = b.GetRootWindowHandle() //win.ShowWindow(win.HWND(rootHandle), win.SW_MAXIMIZE) // 模拟鼠标 var pt win.POINT pt.X = int32(x) // This is your click coordinates pt.Y = int32(y) hWnd := win.HWND(rootHandle) go func() { win.SetForegroundWindow(hWnd) time.Sleep(3 * time.Second) win.ClientToScreen(hWnd, &pt) fmt.Printf("ClientToScreen X=%v Y=%v\n", pt.X, pt.Y) cx_screen := win.GetSystemMetrics(win.SM_CXSCREEN) //屏幕 宽 cy_screen := win.GetSystemMetrics(win.SM_CYSCREEN) // 高 real_x := 65535 * pt.X / cx_screen //转换后的 x real_y := 65535 * pt.Y / cy_screen // y var input win.MOUSE_INPUT input.Type = win.INPUT_MOUSE input.Mi.Dx = real_x input.Mi.Dy = real_y if buttonType { input.Mi.DwFlags = (win.MOUSEEVENTF_ABSOLUTE | win.MOUSEEVENTF_MOVE | win.MOUSEEVENTF_RIGHTDOWN | win.MOUSEEVENTF_RIGHTUP) } else { input.Mi.DwFlags = (win.MOUSEEVENTF_ABSOLUTE | win.MOUSEEVENTF_MOVE | win.MOUSEEVENTF_LEFTDOWN | win.MOUSEEVENTF_LEFTUP) } input.Mi.MouseData = 0 input.Mi.DwExtraInfo = 0 input.Mi.Time = 0 win.SendInput(2, unsafe.Pointer(&input), int32(unsafe.Sizeof(input))) fmt.Printf("点击") }() //hWnd = win.WindowFromPoint(pt) } } else { fmt.Printf("找不到窗口\n") } return 0 }
func emuInput2(browser *cef.Browser) { fmt.Printf("emuInput\n") // 查找 frame := browser.GetMainFrame() //frameCount := browser.GetFrameCount() //fmt.Printf("frameCount=%v\n", frameCount) //frameIdentifiers := browser.GetFrameIdentifiers() //fmt.Printf("frameIdentifiers=%v\n", frameIdentifiers) // 计算frame坐标 //mainFrame := browser.GetMainFrame() //login_frame_left, login_frame_top := navigator.GetHtmlElementOffset(mainFrame, "#loginIframe") //fmt.Printf("#loginIframe坐标:left=%v,top=%v\n", login_frame_left, login_frame_top) // 获取frameElement id //for i := 0; i < len(frameIdentifiers); i++ { //identifier := frameIdentifiers[i] //fmt.Printf("frame-identifier=%v\n", identifier) // id=loginIframe //frame := browser.GetFrameByIdent(identifier) //if !frame.IsValid() { // fmt.Printf("IsValid fail.\n") // continue //} /*c := ` var id_ = ""; var frame = window.frameElement; //Get <iframe> element of the window if (frame) { //if (typeof frameElement_.id !== "undefined" && frameElement_.id !== null) { // some code here if (typeof frame.id !== "undefined" && frame.id !== null) { id_ = frame.id; } } app.cefResult(id_); `*/ //frame_id := frame.ExecuteJavaScriptWithResult(c) //fmt.Printf("frame_id=%v\n", frame_id) //if frame_id == "loginIframe" { fmt.Printf("找到登录界面") navigator.InjectFocus(browser, true) fmt.Printf("开始登录支付宝...\n") fmt.Printf("获取账号输入框按钮坐标\n") left, top := navigator.GetHtmlElementOffset(frame, "#J-input-user") fmt.Printf("输入框坐标:left=%v,top=%v\n", left, top) x := left + 10 y := top + 10 fmt.Printf("点击账号输入框 x=%v,y=%v\n", x, y) hWnd := win.HWND(browser.GetWindowHandle()) fmt.Printf("hWnd=%v\n", hWnd) navigator.MouseClick(hWnd, x, y) fmt.Printf("点击账号输入框\n") time.Sleep(2 * time.Second) navigator.InjectKeyPress(browser, "*****@*****.**") fmt.Printf("输入完成.\n") time.Sleep(5 * time.Second) fmt.Printf("点击密码输入框\n") left, top = navigator.GetHtmlElementOffset(frame, "#password_input") x = left + 10 + 40 y = top + 10 fmt.Printf("输入框坐标:left=%v,top=%v\n", x, y) navigator.InjectMouseClick(browser, x, y) fmt.Printf("点击账号输入框\n") time.Sleep(3 * time.Second) navigator.InjectKeyPress(browser, "1") fmt.Printf("输入完成.\n") time.Sleep(5 * time.Second) fmt.Printf("失去焦点1.\n") navigator.InjectFocus(browser, false) fmt.Printf("失去焦点2.\n") //} //} }