python引入op插件实现后台挂机

写在前面:不要违法操作哦

准备工具

  1. 需要用到的环境为 python3.74
    python3.74传送门
  2. 代码编写环境 pycharm
    pycharm传送门
  3. 安装python win32的扩展,
    win32扩展传送门
  4. op插件(类似于大漠插件)
    op 0.39传送门
  5. 实验用到的雷神模拟器
    模拟器传送门
  6. 老工具人阴阳师
    这个自己在模拟器内部下载

安装自己随意

op模块用win32模块来打开引用

from win32com.client import Dispatch
class Demo:
    def __init__(self):
        # 创建com对象
        self.op = op = Dispatch("op.opsoft.1");
        self.hwnd = 0;
        self.send_hwnd = 0;
        op.SetPath("C:\\Users\\Administrator\\Desktop\\houtai\\image\\");
        #全局资源的位置

创建一个方法输出op版本号

def test_qidong(self):
        # 输出插件版本号
        print("版本号", self.op.Ver());

输出成功则会显示相应的版本号,在op文档中可以查询相关的报错信息。

雷电模拟器的绑定子窗体的方法

def test_bkmode(self):
      #绑定
        self.hwnd = self.op.FindWindowByProcess("dnplayer.exe","LDPlayerMainFrame","雷电模拟器") ;
        print(self.hwnd);
        time.sleep(0)
        hwnd = self.op.FindWindowEx(self.hwnd, "RenderWindow", "TheRender");
        print("找到子窗体", hwnd);
        # time.sleep(0.1);

        r = self.op.BindWindow(hwnd, "opengl", "windows", "windows", 1);
        # opengl 后台模式 normal 前台模式;
        if r == 0:
            print("绑定失败");
        else:
            print("绑定成功,,,,");
            time.sleep(0);

创建一个简单的移动窗口到固定位置的方法,并修改窗体的大小。

def test_windos(self):
        op_ret = self.op.GetWindowRect(self.hwnd)
        print(op_ret); #显示窗口初始大小
        self.op.SetClientSize(self.hwnd,864,497);
        print("窗口设置为x=867,y=467")
        self.op.MoveWindow(self.hwnd, 10, 10);
        print("窗口移动成功10,10");
        self.op.SetWindowTransparent(self.hwnd,255); #0是隐藏窗口不占位置,完全透明
        #透明度设置
        print("设置透明度成功");

在脚本运行完后需要释放绑定方法。

def test_end(self):
        op_ret = self.op.UnBindWindow();
        # 退出进程
        return op_ret;

这是一个用于测试的截图方法验证是否可以后台截图。

def test_jietu(self):
        op = self.op.Capture(1, 1, 864, 491, "screen.bmp")
        if op == 1:
            print("方法调用成功");
        else:
            print("截图失败");

测试后台鼠标调用是否正常的方法

def test_dianji(self):
        ret1 = self.op.MoveTo(29, 46);
        ret2 = self.op.LeftClick();
        if ret1==0&ret2==0:
            print("失败");
        else:
            print("成功!");

代码的调用解释

def test_all():
    demo = Demo();
    #初始化
    # demo.test_qidong()
    #打开雷电的方法
    demo.test_bkmode()
    #绑定窗体
    demo.test_windos()
    #移动窗体
    demo.test_jietu()
    #截图
    time.sleep(1)
    #等待1秒
    demo.test_dianji()
    #测试点击
    demo.test_end()
    #释放函数
    print("成功结束")
    return 0;

test_all();

这些都成功了那么op插件就完成了绑定,并且完成了一次后台运行的小测试,后续就可以使用它啦,

这里放置完整代码

from win32com.client import Dispatch
import time
import random
class Demo:
    def __init__(self):
        # 创建com对象
        self.op = op = Dispatch("op.opsoft.1");
        self.hwnd = 0;
        self.send_hwnd = 0;
        op.SetPath("C:\\Users\\Administrator\\Desktop\\houtai\\image\\");
        #全局资源的位置

    def test_qidong(self):
        # 输出插件版本号
        print("版本号", self.op.Ver());
        a = self.op.WinExec("F:\\leidian\\LDPlayer4\\dnplayer.exe", 1);
        print("打开",a);

    def test_bkmode(self):
      #绑定
        self.hwnd = self.op.FindWindowByProcess("dnplayer.exe","LDPlayerMainFrame","雷电模拟器") ;
        print(self.hwnd);
        time.sleep(0)
        hwnd = self.op.FindWindowEx(self.hwnd, "RenderWindow", "TheRender");
        print("找到子窗体", hwnd);
        # time.sleep(0.1);

        r = self.op.BindWindow(hwnd, "opengl", "windows", "windows", 1);
        # opengl 后台模式 normal 前台模式;
        if r == 0:
            print("绑定失败");
        else:
            print("绑定成功,,,,");
            time.sleep(0);

    def test_windos(self):
        op_ret = self.op.GetWindowRect(self.hwnd)
        print(op_ret);
        self.op.SetClientSize(self.hwnd,864,497);
        print("窗口设置为x=867,y=467")
        self.op.MoveWindow(self.hwnd, 10, 10);
        print("窗口移动成功10,10");
        self.op.SetWindowTransparent(self.hwnd,255); #0是隐藏窗口不占位置,完全透明
        #透明度设置
        print("设置透明度成功");

    def test_end(self):
        op_ret = self.op.UnBindWindow();
        # 退出进程
        return op_ret;

    def test_jietu(self):
        op = self.op.Capture(1, 1, 864, 491, "screen.bmp")
        if op == 1:
            print("方法调用成功");
        else:
            print("截图失败");

    def test_dianji(self):
        ret1 = self.op.MoveTo(29, 46);
        ret2 = self.op.LeftClick();
        if ret1==0&ret2==0:
            print("失败");
        else:
            print("成功!");
def test_all():
    demo = Demo();
    #初始化
    # demo.test_qidong()
    #打开雷电的方法
    demo.test_bkmode()
    #绑定窗体
    demo.test_windos()
    #移动窗体
    demo.test_jietu()
    #截图
    time.sleep(1)
    #等待1秒
    demo.test_dianji()
    #测试点击
    demo.test_end()
    #释放函数
    print("成功结束")
    return 0;

test_all();

python编写自动化挂机脚本 python游戏挂机_版本号


本人萌新一枚,大佬不要捶我,后期会写一个后台运行的yys脚本