aicezam / SmartOnmyoji

阴阳师后台代肝脚本,支持所有类似阴阳师的卡牌游戏(点点点游戏)自动找图-点击…(支持后台运行、支持多开、支持模拟器)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于模拟器前台的一些个人经验

zyhazwraith opened this issue · comments

经测试在雷电模拟器下是可以的,只需要添加一行代码,可以移步最后面。

可以用spy++查看,模拟器最顶端是一个模拟器的窗口,然后还有subwindow,

例如雷电模拟器,

窗口名字:
雷电模拟器
TheRender
sub

获取到这个TheRender的handle给handle_num即可

另外,木木模拟器实测无法完成点击,有可能是对后台模拟操作进行了屏蔽。

自用偷懒的改法,

diff --git a/modules/ModuleHandleSet.py b/modules/ModuleHandleSet.py
index 73f1856..4c00ba9 100644
--- a/modules/ModuleHandleSet.py
+++ b/modules/ModuleHandleSet.py
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-
+import win32gui
 from os.path import abspath, dirname
 from win32api import OpenProcess
 from win32con import PROCESS_ALL_ACCESS
@@ -20,6 +21,8 @@ class HandleSet:
     def get_handle_num(self):
         """通过句柄标题获取句柄编号"""
         self.handle_num = FindWindow(None, self.handle_title)  # 搜索句柄标题,获取句柄编号
+        self.handle_num = win32gui.FindWindowEx(self.handle_num, 0, None, "TheRender")
+        print("adjust handle to", self.handle_num)
         if self.handle_num == 0:
             print("目标程序未启动,即将中止!")
             return None  # 返回异常
commented

感谢提供思路,看了下这种方法针对性比较强,前提是要知道子句柄的标题,我电脑上装了Hyper-V,没法按模拟器不想调试,改天装上吧,我也先弄个偷懒的兼容方法,改天把其他模拟器慢慢加上哈哈哈哈~

def get_handle_num(self):
        """通过句柄标题获取句柄编号"""
        self.handle_num = FindWindow(None, self.handle_title)  # 搜索句柄标题,获取句柄编号
+       if self.handle_title == "雷电模拟器":
+           self.handle_num = FindWindowEx(self.handle_num, 0, None, "TheRender")  # 兼容雷电模拟器后台点击
+       else:
            if self.handle_num == 0:
                print("目标程序未启动,即将中止!")
                return None  # 返回异常
            else:
                return self.handle_num

我试了木木雷电夜神,都是这样的结构,找到模拟器的第一个子句柄就行。当然木木点击无效。

commented

模拟器的后台兼容我还是想用adb的方式来解决
https://blog.csdn.net/L_fly_J/article/details/110948248