欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

cpp map 获取所有 key_自动获取雷电模拟器窗口句柄

发布时间:2024/1/1 编程问答 170 豆豆
生活随笔 收集整理的这篇文章主要介绍了 cpp map 获取所有 key_自动获取雷电模拟器窗口句柄 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

每次都用命令行去获取窗口句柄虽说不麻烦,却是让人很不爽的事,今天我们就来看看如何自动获取窗口句柄。

首先,上次我们看到了获取窗口句柄是用雷电模拟器自带的命令行工具

dnconsole.exe,其实他和ldconsole.exe是一样的,我个人习惯用ldconsole.exe,看官随意。

首先,安装好雷电模拟器之后,他会在注册表里面写一些信息,我们就去读这些信息,然后通过这些信息定位到模拟器的路径,最后拼接出命令行工具的路径,然后再用python调用工具,再解析返回值,就可以顺利的获取到窗口句柄了。

注册表

下面是雷电模拟器注册表的位置以及信息。

既然知道了信息,我们就可以用他来获取了,老套路,封装一个函数,方便日后调用。

新建文件ld.py,以后所有模拟器相关操作都封装到这个文件里面。

import winreg, osdef get_ld_dir(): try: key = winreg.OpenKeyEx(winreg.HKEY_CURRENT_USER, "Software\ChangZhi2\dnplayer") v = winreg.QueryValueEx(key, "InstallDir") winreg.CloseKey(key) return v[0] except Exception as e: print(e) return "" def get_ldconsole(): return os.path.join(get_ld_dir(), "ldconsole.exe")def get_hwnd_list(): result = [] cmd = "{} list2".format(get_ldconsole()) p = os.popen(cmd) lines = p.readlines() p.close() for line in lines: line = line.strip("\r") line = line.strip("\n") line = line.split(",") for i in range(len(line)): if i != 1: line[i] = int(line[i]) result.append(line) # 索引,标题,顶层窗口句柄,绑定窗口句柄,启动标志,进程PID,VBox进程PID return result

函数get_ld_dir,是获取注册表里面的信息,原封不动的返回出来。

函数get_ldconsole,是将路径和我们需要的命令行工具拼接在一起,形成一个完整的路径。

函数get_hwnd_list,是调用命令行工具的list2命令获取当前已运行的所有模拟器的信息,所以最后他返回的是一个数组,比如你开了两个窗口,它就返回两个数据,以此类推,只要电脑够强悍,100开(理论上,别较真)也不是不可以的。

我们调用的时候就像这样,就可以拿到各个模拟器窗口的句柄了:

hws = get_hwnd_list()for h in hws:    print(h[3]) # 根据格式来说,句柄是第四个,所以下标是3# 格式如下:# 索引,标题,顶层窗口句柄,绑定窗口句柄,启动标志,进程PID,VBox进程PID

在我电脑上某次的输出为,我开了两个模拟器:

1348941510230

后话

那么,截图有了,句柄有了,接下来是不是就该进行图片内容分析了?

是的,就是这样,有了图片就是分析了,接下来就是有点烧脑的东西了,不过呢,我也是个半吊子,我都能搞懂,各位看官也是可以的,况且只需要了解,并不是掰开来看,是吧。^o^

总结

以上是生活随笔为你收集整理的cpp map 获取所有 key_自动获取雷电模拟器窗口句柄的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。