我可以用python从十六进制表(memmap)中提取一些数据吗?

我可以用python从十六进制表(memmap)中提取一些数据吗?,python,winapi,pywin32,memmap,Python,Winapi,Pywin32,Memmap,我有一个名为BGB的游戏男孩模拟器和口袋妖怪红/蓝游戏。在模拟器中,我可以打开一个调试窗口。在窗口中,我可以在十六进制表(memmap)中看到游戏的全部内存: 我需要的窗口部分位于左下角: 我已尝试通过pywin32库访问此数据: 导入win32gui 导入win32con def_windowEnumerationHandler(hwnd,结果列表): “”“传递到win32gui.EnumWindows()以生成窗口句柄列表, 窗口文本、窗口类元组。”“” resultlist.appen

我有一个名为BGB的游戏男孩模拟器和口袋妖怪红/蓝游戏。在模拟器中,我可以打开一个调试窗口。在窗口中,我可以在十六进制表(memmap)中看到游戏的全部内存:

我需要的窗口部分位于左下角:

我已尝试通过pywin32库访问此数据:

导入win32gui
导入win32con
def_windowEnumerationHandler(hwnd,结果列表):
“”“传递到win32gui.EnumWindows()以生成窗口句柄列表,
窗口文本、窗口类元组。”“”
resultlist.append((hwnd,
win32gui.GetWindowText(hwnd),
win32gui.GetClassName(hwnd)))
def枚举子项(hwnd):
先前=无
尽管如此:
cur=win32gui.FindWindowEx(hwnd,previous,None,None)
如果不是cur:
返回
屈服电流
前一个=当前
def main():
hWnd=win32gui.FindWindow(无,'bgb调试器-R:\Games\bgb\ROMs\Pokemon-Red Version(UE)[S][!].gb')
打印(win32gui.GetWindowText(hWnd))
windows=[]
win32gui.EnumChildWindows(hWnd,_windowEnumerationHandler,windows)
hTpl=windows[19]
hFrm=hTpl[0]
打印('Handle Window={hWnd}\nHandle Tuple={hTpl}\nHandle Frame={hFrm}'
.格式(hWnd=hWnd,
hTpl=hTpl,
hFrm=hFrm)
打印(windows)
lWindowTexts=[enumChild(hWnd)中的项的win32gui.GetWindowText(项)]
打印(lWindowTexts)
打印('-------------')
FrameChilds=[]
win32gui.EnumChildWindows(hFrm,_windowEnumerationHandler,FrameChilds)
打印(FrameChilds)
hCtrl=FrameChilds[0][0]
打印('Handle Control={0}'。格式(hCtrl))
LChildText=[enumChild(hFrm)中项目的win32gui.GetWindowText(项目)]
印刷品(山地文字)
buffer=win32gui.PyMakeBuffer(300000)
打印('Text:',win32gui.SendMessage(hCtrl,win32con.WM_GETTEXT,len(buffer),buffer))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
但是什么都没用。。。我得到的只是:

[控制台输出]
bgb调试器-R:\Games\bgb\ROMs\Pokemon-红色版本(UE)[S][!].gb
句柄窗口=2033576
句柄元组=(1574836,,'tscrollermemmap')
手柄架=1574836
[(395264,,“Tdrawcontrol”),(460850,,(c,,“TPanel”),(395250,,“TCheckBox”),(395266,,(395212,,“TCheckBox”),(460824,,(460720,,“TCheckBox”),(395204,,(z,,(460686,,“TCheckBox”),(395232,,“TcpumpumeterControl”),(395202,,“Tdrawcontrol”),(395254,,“TstrawControl”),(395254,,“Tscrolleram”),(TSCROLERAM'),(395260),"TsRawControl","395284","TsRollerStack","TsRawControl","TsRollerRegs","395210","TsRollerStack","395286"TsRawControl","TsRollBar""""TsRollBar"
['', '', '', '', '', '', '']
--------------
[(395270,,'Tdrawcontrol'),(395272,,'TScrollBar')]
手柄控制=395270
['', '']
文本:0
正如我们所见,一切都没有结果。
所以问题是,我可以从程序的内存中抓取几个字节的数据,还是从窗口复制它?

Ажжжаааааааааааааааааааааааааааа。您可以使用spy++检查是否获得了相应窗口的文本内容,并使用
GetLastError
检查具体的错误信息。当然,我建议您通过读取程序内存来获取数据。要获取窗口中显示的底层数据,您需要相关窗口的配合。由于没有实现十六进制视图的标准控件,因此可以假定您正在处理自定义实现。除非自定义实现公开UI自动化接口,否则您几乎无法获取数据。您必须联系作者并让他们实现该功能。