关于模拟器前台的一些个人经验
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 # 返回异常
感谢提供思路,看了下这种方法针对性比较强,前提是要知道子句柄的标题,我电脑上装了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
我试了木木雷电夜神,都是这样的结构,找到模拟器的第一个子句柄就行。当然木木点击无效。
模拟器的后台兼容我还是想用adb的方式来解决
https://blog.csdn.net/L_fly_J/article/details/110948248