精易论坛

标题: 精易模块最新版_外部树型框TreeView_双击项目_TVM_GETITEMRECT [打印本页]

作者: a萧哥    时间: 2025-1-1 17:22
标题: 精易模块最新版_外部树型框TreeView_双击项目_TVM_GETITEMRECT
  
我把相关代码先放上来,大佬也可去精易模块直接看:
子程序名返回值类型公开备 注
取指针_通用型整数型 取到的是变量在栈中的地址,和 取变量地址() 一样
参数名类 型参考可空数组备 注
变量通用型基本支持所有类型
置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
返回 (0)
数据类型名公开备 注
精易_矩形 
成员名类 型传址数组备 注
左边整数型左边,相当于左上角的x
顶边整数型顶边,相当于左上角的y
右边整数型右边,相当于右下角的x
底边整数型底边,相当于右下角的y

子程序名返回值类型公开备 注
__get整数型 请确保指针的合法性,读取内存
参数名类 型参考可空数组备 注
lpAddr整数型内存地址
offset整数型偏移
置入代码 ({ 139, 69, 8, 139, 93, 12, 139, 4, 24, 201, 194, 8, 0 })
' mov eax,[ebp+8]
' mov ebx,[ebp+12]
' mov eax,[eax+ebx]
' leave
' ret 8
返回 (0)
窗口程序集名保 留  保 留备 注
外部树型框, , 公开   
变量名类 型数组备 注
m_hItemParent长整数型0有父项目的句柄组
集_单一项目TVITEMEX  
集_树型框项目TVITEMEX2  
集_外部数据地址1整数型  
集_外部数据地址2整数型  
集_项目地址整数型  
m_hWnd整数型  
_数据地址整数型加入项目1 使用,可避免重复使用一些API函数
_项目TVINSERTSTRUCT加入项目1 使用
_搜索回调Call整数型  
m_hProc整数型树型框所在进程的进程句柄, 此值作为判断是否操作外部进程, 操作内部进程此值为0
m_hItems长整数型0树型框所有项目句柄
m_isWow64逻辑型是否运行在Wow64环境下, 为真则进程是32位程序
m_item整数型项目缓冲区, 所有发送TVITEMEXW结构的都使用这个地址, 包含文本缓冲区
m_itemSize整数型m_item 当前的尺寸, 缓冲区变大时需要重新分配

子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用
集_单一项目.cchTextMax = 260
集_树型框项目.cchTextMax = 260
子程序名返回值类型公开备 注
初始化逻辑型 
参数名类 型参考可空数组备 注
树型框句柄整数型
树型框类名文本型
是否操作外部控件逻辑型
变量名类 型静态数组备 注
项目数整数型 
ret逻辑型 
isWow64逻辑型 
isTem32逻辑型 
currentPid整数型 
treePid  
x64Init ()
isTem32 = 系统_是否64位操作系统 () = 假
m_isWow64 = isTem32
如果真 (窗口_句柄是否有效 (树型框句柄))
返回 ()
_数据地址 = 0
' 相同的不再初始化
如果真 (m_hWnd = 树型框句柄 项目数 = 取项目数 ())
返回 ()

currentPid = 进程_取自进程ID ()
treePid = 窗口_句柄取进程ID (树型框句柄)
是否操作外部控件 = currentPid ≠ treePid
如果 (是否操作外部控件)
m_hProc = OpenProc (树型框句柄)
如果真 (m_hProc = 0)
返回 ()
如果真 (isTem32 = IsWow64Process (m_hProc, m_isWow64))
m_isWow64 = 真

m_isWow64 = 真

m_hWnd = 树型框句柄
如果真 (m_isWow64 = )
输出调试文本 (“不支持x64”)
返回 ()

内部_遍历句柄 ()
返回 ()
子程序名返回值类型公开备 注
__SendMsgW长整数型 
参数名类 型参考可空数组备 注
message整数型
wParam长整数型
lParam长整数型
返回 (SendMessageW (m_hWnd, message, wParam, lParam))
子程序名返回值类型公开备 注
取数据_通用型整数型 取到的是变量在堆中的地址,和 取变量数据地址() 一样,注意: 字节集数据需要+8,前8位是标准,字节集型数据建议使用 取指针_字节集型()
参数名类 型参考可空数组备 注
数据通用型不建议传递字节集型变量
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)
子程序名返回值类型公开备 注
双击项目 
参数名类 型参考可空数组备 注
项目句柄长整数型
变量名类 型静态数组备 注
精易_矩形精易_矩形 
p整数型 
结果1长整数型 
结果2长整数型 
p = 取指针_通用型 (项目句柄)
信息框 (到文本 (m_hWnd)“,”到文本 (p)“,”到文本 (项目句柄)“,”到文本 (精易_矩形.左边)“,”到文本 (精易_矩形.顶边)“,”到文本 (精易_矩形.右边)“,”到文本 (精易_矩形.底边), 0, , )
精易_矩形.左边 = __get (p, 0)
信息框 (到文本 (m_hWnd)“,”到文本 (p)“,”到文本 (项目句柄)“,”到文本 (精易_矩形.左边)“,”到文本 (精易_矩形.顶边)“,”到文本 (精易_矩形.右边)“,”到文本 (精易_矩形.底边), 0, , )
精易_矩形.顶边 = __get (p, 4)
信息框 (到文本 (m_hWnd)“,”到文本 (p)“,”到文本 (项目句柄)“,”到文本 (精易_矩形.左边)“,”到文本 (精易_矩形.顶边)“,”到文本 (精易_矩形.右边)“,”到文本 (精易_矩形.底边), 0, , )
计次循环首 (2, )
结果1 = __SendMsgW ( #TVM_GETITEMRECT, 0, 取数据_通用型 (精易_矩形))  ' 取矩形
信息框 (到文本 (结果1)“,”到文本 (m_hWnd)“,”到文本 (结果2)“,”到文本 (p)“,”到文本 (项目句柄)“,”到文本 (精易_矩形.左边)“,”到文本 (精易_矩形.顶边)“,”到文本 (精易_矩形.右边)“,”到文本 (精易_矩形.底边), 0, , )
结果2 = __SendMsgW ( #TVM_ENSUREVISIBLE, 0, 项目句柄)  ' 保证显示
计次循环尾 ()
以上是精易模块_外部树型框类_双击项目子程序的相关代码说一下为什么双击项目子程序中的__SendMsgW ()函数为什么才3个参数,因为第一个参数直接默认了是初始化中的程序集变量 m_hWnd。
经过测试信息框一共弹了5次,
第一次信息框分别是:3411404,1700504,299761096,0,0,0,0;
第二次信息框和第三次信息框内容是一样的:3411404,1700504,299761096,299761096,0,0,0;
第四次信息框和第五次信息框内容是一样的:0,3411404,0,1700504,299761096,299761096,0,0,0;
请问为什么取的矩形范围不正确!跪求大佬现场教学一波,虚心学习。和你确定的一点的是树型框句柄和树型框项目句柄是没问题的。问题好像出在了__get ()函数传递上,有没有懂的大佬看看,这是精易模块的外部树型框类-双击项目


323F8A24-DD21-4E37-B84D-78D893EC17DC.png (28.69 KB, 下载次数: 0)

323F8A24-DD21-4E37-B84D-78D893EC17DC.png

840DEA41-D5F9-436F-A0F0-8DF6B5D5C655.png (64.83 KB, 下载次数: 0)

840DEA41-D5F9-436F-A0F0-8DF6B5D5C655.png

作者: a萧哥    时间: 2025-1-1 20:17
听别人说好像是第一行的代码有问题,然后又有说是写入内存的问题,我已经没有头绪了,烦请大佬指点,测过无数遍还是搞不好这个
作者: a萧哥    时间: 2025-1-2 11:35
各路大佬麻烦指点迷津,呜呜呜




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4