コード例 #1
1
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 为窗口设置新的尺寸
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
}
コード例 #2
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 恢复窗口
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
}
コード例 #3
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 最大化窗口
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
}
コード例 #4
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 退出程序
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
}
コード例 #5
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 为窗口设置标题
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
}
コード例 #6
0
ファイル: callbacks.go プロジェクト: CodyGuo/gapp
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
}
コード例 #7
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 移动窗口
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
}
コード例 #8
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 为窗口设置新的位置
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
}
コード例 #9
0
ファイル: handler.go プロジェクト: CodyGuo/ngui
// 关闭窗口
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
}
コード例 #10
0
ファイル: callbacks.go プロジェクト: CodyGuo/gapp
// 模拟点击
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
}
コード例 #11
0
ファイル: callbacks.go プロジェクト: CodyGuo/gapp
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")
	//}
	//}
}