cpp map 获取所有 key_自动获取雷电模拟器窗口句柄
每次都用命令行去獲取窗口句柄雖說不麻煩,卻是讓人很不爽的事,今天我們就來看看如何自動獲取窗口句柄。
首先,上次我們看到了獲取窗口句柄是用雷電模擬器自帶的命令行工具
dnconsole.exe,其實他和ldconsole.exe是一樣的,我個人習(xí)慣用ldconsole.exe,看官隨意。
首先,安裝好雷電模擬器之后,他會在注冊表里面寫一些信息,我們就去讀這些信息,然后通過這些信息定位到模擬器的路徑,最后拼接出命令行工具的路徑,然后再用python調(diào)用工具,再解析返回值,就可以順利的獲取到窗口句柄了。
注冊表
下面是雷電模擬器注冊表的位置以及信息。
既然知道了信息,我們就可以用他來獲取了,老套路,封裝一個函數(shù),方便日后調(diào)用。
新建文件ld.py,以后所有模擬器相關(guān)操作都封裝到這個文件里面。
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) # 索引,標(biāo)題,頂層窗口句柄,綁定窗口句柄,啟動標(biāo)志,進(jìn)程PID,VBox進(jìn)程PID return result函數(shù)get_ld_dir,是獲取注冊表里面的信息,原封不動的返回出來。
函數(shù)get_ldconsole,是將路徑和我們需要的命令行工具拼接在一起,形成一個完整的路徑。
函數(shù)get_hwnd_list,是調(diào)用命令行工具的list2命令獲取當(dāng)前已運(yùn)行的所有模擬器的信息,所以最后他返回的是一個數(shù)組,比如你開了兩個窗口,它就返回兩個數(shù)據(jù),以此類推,只要電腦夠強(qiáng)悍,100開(理論上,別較真)也不是不可以的。
我們調(diào)用的時候就像這樣,就可以拿到各個模擬器窗口的句柄了:
hws = get_hwnd_list()for h in hws:????print(h[3])?#?根據(jù)格式來說,句柄是第四個,所以下標(biāo)是3#?格式如下:# 索引,標(biāo)題,頂層窗口句柄,綁定窗口句柄,啟動標(biāo)志,進(jìn)程PID,VBox進(jìn)程PID在我電腦上某次的輸出為,我開了兩個模擬器:
1348941510230后話
那么,截圖有了,句柄有了,接下來是不是就該進(jìn)行圖片內(nèi)容分析了?
是的,就是這樣,有了圖片就是分析了,接下來就是有點燒腦的東西了,不過呢,我也是個半吊子,我都能搞懂,各位看官也是可以的,況且只需要了解,并不是掰開來看,是吧。^o^
總結(jié)
以上是生活随笔為你收集整理的cpp map 获取所有 key_自动获取雷电模拟器窗口句柄的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写出漂亮的 数字字体
- 下一篇: 材料科学与计算机结合的研究方向,材料科学