1.调用大漠插件
给有需要的看一下,最好去学习一下大漠。
2. 学习网址
https://lb1989.com/?cat=105
3.具体实现
package main
import (
"context"
"fmt"
"go_codetwo/xiaotool/v22/util"
"log"
"net/http"
"os"
"os/signal"
"strconv"
"strings"
"syscall"
"time"
"github.com/gin-gonic/gin"
"github.com/redzl/go-dmsoft"
)
const (
// 填写自己的注册码
DmRegCode = ""
DmExtraCode = ""
)
// go env -w GOARCH=386
//go env -w GOARCH=amd64
var dm *dmsoft.Dmsoft
var dir, _ = os.Getwd()
// 句柄集
var handleColl []int
type _bytes struct {
Data int
Len int
}
// rsrc -manifest main.manifest -o main.syso
// go build -ldflags="-H windowsgui -w -s"
// 绑定 JSON
func work(gpt string, prormt string) {
time.Sleep(1 * time.Second)
fmt.Println("第一步")
proceess_one(gpt)
time.Sleep(1 * time.Second)
fmt.Println("第二步")
proceess_two(prormt)
time.Sleep(1 * time.Second)
fmt.Println("第三步")
proceess_there(prormt)
}
type Login struct {
Gpt string `form:"gpt" json:"gpt" xml:"gpt" binding:"required"`
Prormt string `form:"prormt" json:"prormt" xml:"prormt" binding:"required"`
}
func main() {
dmtainanl()
defer Release()
//work("25525", "2565")
aa()
}
func aa() {
router := gin.Default()
// 绑定 JSON ({"user": "manu", "password": "123"})
router.POST("/loginJSON", func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
Gptstr, err := util.DecodeBase64(json.Gpt)
if err != nil {
fmt.Println("编码失败")
}
work(string(Gptstr), json.Prormt)
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
})
//创建HTTP服务器
server := &http.Server{
Addr: ":8088",
Handler: router,
}
//启动HTTP服务器
go func() {
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
//等待一个INT或TERM信号
quit := make(chan os.Signal)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
log.Println("Shutdown Server ...")
//创建超时上下文,Shutdown可以让未处理的连接在这个时间内关闭
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
//停止HTTP服务器
if err := server.Shutdown(ctx); err != nil {
log.Fatal("Server Shutdown:", err)
}
}
func dmtainanl() {
dm = CreateDmObj()
log.Printf("插件版本:%s", dm.Ver())
ret := dm.Reg(DmRegCode, DmExtraCode)
switch ret {
case 1:
log.Println("付费功能注册成功")
case -1:
log.Println("无法连接网络")
case -2:
log.Println("进程没有以管理员方式运行")
default:
log.Println("失败 (未知错误)")
}
///defer
EnumWindowHwnd()
BindMultipleWindows(dm, handleColl[0])
}
// Chrome Legacy Window Chrome Legacy Window
// Chrome_RenderWidgetHostHWND Chrome_RenderWidgetHostHWND
func EnumWindowHwnd() {
//handleStr := dm.EnumWindow(0, "网址导航 和另外 5 个页面 - 个人 - Microsoft? Edge", "Chrome_WidgetWin_1", 1+2)
handleStr := dm.EnumWindowByProcess("msedge.exe", "", "", 1+8+16)
fmt.Println(handleStr)
handleStrSlice := strings.Split(handleStr, ",")
// 将string类型转换为int类型
for _, str := range handleStrSlice {
num, err := strconv.Atoi(str)
if err != nil {
fmt.Println(err)
}
handleColl = append(handleColl, num)
}
log.Printf("获取到 %d 个窗口句柄:%v", len(handleColl), handleColl)
}
func Release() {
log.Printf("释放大漠对象:%v,窗口句柄:%d", dm, handleColl[0])
dm.UnBindWindow() // 解除绑定
dm.Release()
}
func BindMultipleWindows(dm *dmsoft.Dmsoft, handle int) {
// 绑定窗口
ret := dm.BindWindowEx(handle, "normal", "windows3", "windows", "", 0)
//dm.EnumWindowByProcess
if ret != 0 {
log.Printf("绑定窗口成功,句柄:%d", handle)
}
//设置字体 设置图片路径
ret = dm.SetPath(dir)
if ret != 0 {
log.Printf("全局路径:%d", handle)
}
//设置字体 设置图片路径
ret = dm.SetDict(0, dir+"\\ziti.txt")
if ret != 0 {
log.Printf("字库成功:%d", handle)
}
ret = dm.SetWindowState(handle, 15)
if ret != 0 {
log.Printf("激活窗口,句柄:%d", handle)
}
// 截图
_ = dm.Capture(0, 0, 2000, 2000, "test_"+strconv.Itoa(handle)+".bmp")
}
func CreateDmObj() *dmsoft.Dmsoft {
// 设置dm.dll路径,并进行注册
ret := dmsoft.SetDllPathW(dir+"\\dm.dll", 0)
if ret {
log.Println("插件注册成功!")
} else {
log.Println("插件注册失败!")
}
return dmsoft.NewDmsoft()
}
func FindPic_dm(a, b, c, d int, picstr string, colorstr string, index int) (int, int) {
var x, y int
_ = dm.FindPic(a, b, c, d, picstr, colorstr, 0.89, index, &x, &y)
// fmt.Println(picstr)
// fmt.Println(colorstr)
if x >= 0 && y >= 0 {
log.Printf("找到")
return x, y
}
return 0, 0
}
func FindWord_dm(a, b, c, d int, str string, colorstr string) (int, int) {
var x, y int
_ = dm.FindStr(a, b, c, d, str, colorstr, 0.89, &x, &y)
if x >= 0 && y >= 0 {
log.Printf("找到")
return x, y
}
return 0, 0
}
func proceess_one(cli string) {
//找图 33 181818 050505
x, y := FindPic_dm(112, 0, 925, 44, "44.bmp", "050505", 0)
//x, y = FindWord_dm(98, 1, 581, 52, "x", "2468f2-4c4a48|b993f3-000000|71c6ff-000000|b993f3-000000|2468f2-000000|247df6-000000")
fmt.Printf("44的坐标 %d--%d\n", x, y)
//左点击
setwindows(handleColl[0])
_ = dm.MoveTo(x, y)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
_ = dm.MoveTo(x, y+60)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
//按down
for i := 0; i <= 50; i++ {
dm.KeyDown(40)
}
dm.KeyUp(40)
//找 添加
x, y = 0, 0
x, y = FindWord_dm(0, 642, 426, 1046, "添加", "2468f2-4c4a48|b993f3-000000|71c6ff-000000|b993f3-000000|2468f2-000000|247df6-000000")
fmt.Printf(" 添加的坐标 %d--%d\n", x, y)
//移动
setwindows(handleColl[0])
_ = dm.MoveTo(x, y)
//点击
//复制粘贴 gpt4
// cli := "中问"
//
_ = dm.MoveTo(x, y-30)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
dm.LeftDoubleClick()
time.Sleep(200 * time.Millisecond)
//快捷键 ji 失效
dm.SendString(handleColl[0], cli)
_ = dm.MoveTo(x, y)
time.Sleep(200 * time.Millisecond)
dm.LeftClick()
fmt.Println(cli)
}
func proceess_two(cli string) {
//找x
x, y := FindPic_dm(112, 0, 925, 44, "55.bmp", "050505", 0)
fmt.Printf("55的坐标 %d--%d\n", x, y)
//左点击
setwindows(handleColl[0])
_ = dm.MoveTo(x, y)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
_ = dm.MoveTo(x, y+60)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
//按down
for i := 0; i <= 50; i++ {
dm.KeyDown(40)
}
dm.KeyUp(40)
//找 11.bmp
x, y = 0, 0
x, y = FindPic_dm(465, 792, 1712, 1039, "22.bmp", "181818", 0)
fmt.Printf("22的坐标 %d--%d\n", x, y)
//移动
setwindows(handleColl[0])
//_ = dm.MoveTo(x, y)
_ = dm.MoveTo(x-30, y-30)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
dm.LeftDoubleClick()
time.Sleep(200 * time.Millisecond)
//复制粘贴 gpt4
// cli := "中sss"
dm.SendString(handleColl[0], cli)
time.Sleep(200 * time.Millisecond)
_ = dm.MoveTo(x+10, y+10)
time.Sleep(200 * time.Millisecond)
dm.LeftClick()
fmt.Println(cli)
}
func proceess_there(cli string) {
//找x
x, y := FindPic_dm(575, 2, 900, 39, "88.bmp", "050505", 0)
fmt.Printf("88的坐标 %d--%d\n", x, y)
//左点击
setwindows(handleColl[0])
_ = dm.MoveTo(x, y)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
_ = dm.MoveTo(x, y+60)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
//按down
// for i := 0; i <= 50; i++ {
// dm.KeyDown(40)
// }
//dm.KeyUp(40)
//找 11.bmp
x, y = 0, 0
x, y = FindPic_dm(55, 76, 1174, 280, "11.bmp", "050505", 0)
fmt.Printf("11的坐标 %d--%d\n", x, y)
//移动
setwindows(handleColl[0])
//_ = dm.MoveTo(x, y)
_ = dm.MoveTo(x+40, y)
time.Sleep(100 * time.Millisecond)
dm.LeftClick()
time.Sleep(100 * time.Millisecond)
//dm.LeftDoubleClick()
// time.Sleep(200 * time.Millisecond)
//复制粘贴 gpt4
// cli := "中fff"
dm.SendString(handleColl[0], cli)
time.Sleep(200 * time.Millisecond)
_ = dm.MoveTo(x, y)
time.Sleep(200 * time.Millisecond)
dm.LeftClick()
fmt.Println(cli)
}
// test
func setwindows(handle int) {
dm.SetWindowState(handle, 15)
}