VFP 搜索内存速度!

yrt888 2013-07-18 06:31:39
lpNumberOfBytesRead=0
hProcHeap = GetProcessHeap()
AdrStr = HeapAlloc(hProcHeap,0,4)
lpNumberOfBytesRead=0
GetWindowThreadProcessId(uHwnd,@PID)
hProcess = OpenProcess(0x1F0FFF,0,PId)
FOR dzStart=0x5000000 TO 0X59FFFFF
ReadProcessMemory(hProcess, dzStart, AdrStr, 6,@lpNumberOfBytesRead)
l1 =STRCONV(SYS(2600,AdrStr,6),2)
ReadProcessMemory(hProcess, dzStart+320, AdrStr, 6,@lpNumberOfBytesRead)
l2 =STRCONV(SYS(2600,AdrStr,6),2)

IF l1=='123456'.AND.l2=='654321'
EXIT
ENDIF
ENDFOR
=CloseHandle(hProcess)
=CloseHandle(PID)

以上是我搜索内存确定 地址的方法!

觉得很慢,不知那些地方能够改进,或者有其他更好的方法,谢谢各位老师!
...全文
245 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzctc 2013-07-22
  • 打赏
  • 举报
回复
Thisform.pic_file=Getfile('所有支持的图片文件:wmf,bmp,jpg,jpeg,gif,png,tif,tiff','文件名(&F):','',0,'选择照片') Thisform.pic_file,这是什么呢,不是变量吧
tzctc 2013-07-22
  • 打赏
  • 举报
回复
调用表单:DO FORM form\pict.scx WITH tp &&tp为已打开表的字段,字段值为完整的路径 被调用表单:parameter tp Thisform.Container1.Image1.Picture=tp 可是不能显示图片 ?tp 显示的是完整的图片的路径文件名,如:d:\GD\PICTURE\2DARROW2.WMF
yrt888 2013-07-20
  • 打赏
  • 举报
回复
问题关键也是在: Thisform.Container1.Image1.Picture=调用表单传过来的字段名 这一句,字段名是怎样传递过来,是已打开表的字段?还是变量? 是已打开的表的字段,应该正确啊,这时要保证该表是否在当前工作区,表记录的图片(路径+文件名)要完整! 是变量,那首先也是要表记录的图片路径+文件名完整,其次就是这个变量是全局变量,还是局部变量!
tzctc 2013-07-20
  • 打赏
  • 举报
回复
这段代码是您N年前写的吧
tzctc 2013-07-20
  • 打赏
  • 举报
回复
请教夜猫老师,俺想改用表单调用方式实现图片路径的传递(图片文件路径在字符型字段中),以下代码应该怎么改动呢 Thisform.Container1.Image1.Picture=字段名,可是这样不行啊,请指点迷津,谢谢! Local oError,cMsg *Thisform.pic_file=Getfile('所有支持的图片文件:wmf,bmp,jpg,jpeg,gif,png,tif,tiff','文件名(&F):','',0,'选择照片') &&打开(&O) If !Empty(Thisform.pic_file) Thisform.Image1.Visible=.F. Thisform.Image1.Visible=.T. Thisform.Label2.Visible=.F. Thisform.Width=670 Thisform.AutoCenter=.T. With Thisform.Container1.Image1 .Visible=.F. .Stretch=0 Endwith Try Thisform.Container1.Image1.Picture=调用表单传过来的字段名 m.oError=Null Catch To m.oError Endtry If Isnull(m.oError) With Thisform.Container1 Thisform.pic_width=.Image1.Width Thisform.pic_height=.Image1.Height .Image1.Move((.Width-.Image1.Width)/2,(.Height-.Image1.Height)/2) .Image1.Visible=.T. Thisform.CurrentX=0 Thisform.CurrentY=0 Endwith Else Text To m.cMsg Noshow Textmerge 打开图片文件错误! 错误信息: <<m.oError.Message>> Endtext Messagebox(m.cMsg,16,'信息提示') Endif Endif
yrt888 2013-07-20
  • 打赏
  • 举报
回复
补充一下:用 STRCONV(SYS(2600,AdrStr,1024),15) 取代 STRCONV(SYS(2600,AdrStr,1024),2) 效果更好,不会出现偏离,估计转换过程中,单字节字符串长度会有变化,而存字符串长度固定!
yrt888 2013-07-19
  • 打赏
  • 举报
回复
也是啊,我为了容量 AdrStr = HeapAlloc(hProcHeap,0,1024*1024) 使用了这个,开始时小心,就每次1024个字节,现在版主提醒,是可以增大读取字节数,谢谢!
都市夜猫 2013-07-19
  • 打赏
  • 举报
回复
你还不如一开始就用 HeapAlloc 分配 1w 个字节的缓存, 并一次将另一个进程的那 1w 个字节的内容全部复制过来,之后的搜索就在自己的进程堆中处理了
sych11 2013-07-19
  • 打赏
  • 举报
回复
你是一个优秀的探路者,后来的VFPER有福了
十豆三 2013-07-19
  • 打赏
  • 举报
回复
MyFll.fll 中的 MemRead 函数只能读取本进程的内存
yrt888 2013-07-19
  • 打赏
  • 举报
回复
我读取的是其他进程的内存,而且是单字节字符串,不知那个FLL行不行,目前我的那个方法,进行了偏差时处理,基本达到要求!测试到下午看看,谢谢版主!
十豆三 2013-07-19
  • 打赏
  • 举报
回复
用 MyFll.fll 中的 函数名:MemRead(nAddress,nBytes) 试试速度和准确度如何 缩写:memr 读取指定地址的内存,注意,只能读取本进程的内存 返回值: 字符型 参数: nAddress:整型,内存地址,比如0x12fdc4 nBytes :整型,要读取的字节数 示例代码 Set Library To myfll ?MemRead(0x12fdc4,60) Set Library To
yrt888 2013-07-19
  • 打赏
  • 举报
回复
目前 尝试的一个方法: PID=0 lpNumberOfBytesRead=0 GetWindowThreadProcessId(uHwnd,@PID) hProcess = OpenProcess(0x1F0FFF,0,PId) dzStart=0x5000000 CLEA ZAODAO=0 DO WHIL dzStart<=0x59FFFFF ReadProcessMemory(hProcess, dzStart, AdrStr, 1024,@lpNumberOfBytesRead) l1 =STRCONV(SYS(2600,AdrStr,1024),2) F=OCCURS('123456',L1 ) IF F>0 FOR SA=1 TO F EE=STREXTRACT(L1,'123456','654321',SA ) IF LEN(EE)>260.AND. LEN(EE)<350 ZAODAO=1 A=AT('123456',L1,SA) DZ=dzStart+A ?TRANSFORM(DZ,[@0]) CANCEL ENDIF ENDFOR W=AT('123456',L1,F) IF (1024-W)<500 dzStart=dzStart+W-50 LOOP ENDIF ENDIF dzStart=dzStart+1000 ENDDO 正在测试中,速度很快,不过不是每次都正确,偶尔出现偏差上下几个地址,不过出现偏差的是还未完全完善的时候,现在连续测试了几十次是正确的!观察中。。。。谢谢!
Andy__Huang 2013-07-18
  • 打赏
  • 举报
回复
玩VFP玩到内存搜索,还不如用心去玩C++,毕竟现在使用VFP很少了
vf6.0,要考二级没系统的下哈 Microsoft Visual FoxPro 6.0 for Windows 的常见问题 这些是有关 Microsoft Visual FoxPro 最常见的问题。在您求助 Microsoft 产品支持服务之前,请先查阅这张列表。 若想打印这些附注,请从“文件”菜单中选择“打印”命令。此文档分为以下四部分: --------------------------------------------------------------------- 部分 1. 技术支持与市场 部分 2. Visual FoxPro 6.0 新增功能 部分 3. 从其他版本的 FoxPro 和 Visual FoxPro 中移植 部分 4. Visual FoxPro 常见问题 --------------------------------------------------------------------- 部分 1. 技术支持与市场 问题 1-1: 从何处可以获得产品的更新版本? 答案: 在 Visual FoxPro 的 Web 站点上即可获得产品的更新信息,其中包括有关 Service Pack 和更新的示例、向导及其他代码的信息,该站点的网址为: www.microsoft.com/vfoxpro 请定期查看该网站,以便下载产品的最新版本。 问题 1-2: 从何处可以得到有关 Visual FoxPro 的详细资料? 答案: 通过 Microsoft Visual FoxPro Web 站点是随时获得各种最新产品发布信息的最佳途径。在此站点上不仅有新的产品公告,而且还提供了产品的更新信息、技术文章、白皮书、专业开发人员设计的优秀示例、会议公告、以及与其他许多 FoxPro web 站点的各种链接。 问题 1-3: 如何获得技术支持,以及如何报告软件错误? 答案: Microsoft Visual FoxPro Web 站点已经链接到了多种联机支持选项,其中包括覆盖面广阔的有关所有产品 Microsoft Knowledge Base(Microsoft 知识库)。您还可以阅读一份有关常见问题的清单。除联机支持之外,还可以直接通过电话获得技术支持。“帮助”菜单中的选项可列出技术支持的电话号码。这些电话号码也可用于报告产品中的错误。 问题 1-4. 什么是 Knowledge Base?如何使用它? 答案: Knowledge Base 是内容广泛的论文集,覆盖了如何使用产品的各种特性、已知的软件错误及其解决方案或回避的方法、以及其他有助于使用各种 Microsoft 产品的有用信息。通过以下站点可访问整个 Knowledge Base: support.microsoft.com 问题 1-5: 是否会有 Visual FoxPro 6.0a? 答案: Microsoft 公司一向承诺为用户提供高质量的产品。如果确实需要,我们将提供 Visual FoxPro 6.0 的错误修订版。但是,修订版不会使用 6.0a 版的形式。Visual FoxPro 6.0 中任何错误的修正都将包含在 Visual Studio Service Pack 中。同时还会在 Visual FoxPro 的 www.microsoft.com/vfoxpro 或 Visual Studio 的www.microsoft.com/vstudio 的 Web 站点上发布修订公告。 问题 1-6: Microsoft 公司为应用程序的开发提供了一些优秀的解决方案。怎样才能知道应该向客户推荐和使用哪种产品? 答案: 在选择适用某项任务的产品时,需要考虑多方面的因素。Microsoft Visual FoxPro web 站点上有一份优秀的策略背景论文,它比较了 Visual FoxPro、Visual Basic、SQL Server 和 Access 等 Microsoft 产品之间的不同。 问题 1-7: 哪里可以找到 Visual FoxPro 的使用示例? 答案: Visual FoxPro 6.0 产品中带有丰富的示例,其中有一些是针对 6.0 版特有功能的新示例。与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的位置。 除了产品中所自带的示例外,Microsoft Visual FoxPro web 站点还将经常提供新的示例。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧