golang调用大漠插件

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)
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值