python引入op插件实现后台挂机
写在前面:不要违法操作哦
准备工具
- 需要用到的环境为 python3.74
python3.74传送门 - 代码编写环境 pycharm
pycharm传送门 - 安装python win32的扩展,
win32扩展传送门 - op插件(类似于大漠插件)
op 0.39传送门 - 实验用到的雷神模拟器
模拟器传送门 - 老工具人阴阳师
这个自己在模拟器内部下载
安装自己随意
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();
本人萌新一枚,大佬不要捶我,后期会写一个后台运行的yys脚本