能够通过API实现“把外部程序的RichTextBox控件,当做自己的内部控件一样的进行控制吗?”  100分求解

sakura2005 2005-12-27 11:52:55
我做的一个小程序,已经用API查找到了外部程序(如:写字版)的RichTextBox控件的句柄(hwnd),现在想用我的程序向这个RichTextBox发送如下的两条信息,实现查找和替换的功能:

  SendMessage hwnd, EM_FINDTEXTEX, FR_DOWN, fText
  SendMessage hwnd, EM_REPLACESEL, 0, ByVal FindAndReplace.TextReplace.Text
(PS:上述语句在对自己程序内部的RichTextBox使用时,正常通过)

  可是每次实验都会发生Windows报错,然后自动关闭“写字版”(或VB),后来,我查了一下资料,这应该是XP和2000等系统对程序的一种保护措施,看了网上的资料,说是用“共享文件”来做,可是看了一下,我觉得“共享文件”好象是把自己程序的内存进行共享,然后供其它的程序去控制,而不是把已经运行的某一个程序进行共享,让自己控制(可能我的理解有误 ^-^ ) 。
  那么,能够通过API实现“把外部程序的RichTextBox控件,当做自己的内部控件一样的进行控制吗?”要如何做呢??
...全文
435 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
VampireB 2006-04-26
  • 打赏
  • 举报
回复
“进程注入”,要怎么作啊?!,小弟,刚学不久,很多都不懂啊!
迈克揉索芙特 2006-01-26
  • 打赏
  • 举报
回复
进程注入
kmlxk0 2006-01-23
  • 打赏
  • 举报
回复
爽,northwolves(狼行天下) 给的是不是无控件使用RichTextBox,收藏~
zyl910 2006-01-23
  • 打赏
  • 举报
回复
RichTextBox是Win32新控件,不是传统的Wiundows3.0控件,所以Windows系统不会自动为它处理跨进程请求

在Win9X下,可以使用文件映射来实现跨进程分配内存
在WinNT下,可以调用VirtualAllocEx跨进程分配内存
请参考:
http://www.hosp.ncku.edu.tw/~cww/html/q00549.html
dongle2001 2006-01-23
  • 打赏
  • 举报
回复
VC里有个Attach函数可以通过句柄得到对象指针,不知vb有没有类似的函数,如果有那就不用麻烦了
daisy8675 2005-12-28
  • 打赏
  • 举报
回复
2个字,很难

而且对方不一定是richtextbox控件

不要把一切理解成为控件,而是com
James0001 2005-12-28
  • 打赏
  • 举报
回复
绿豆好像有类似的代码
在 WinNT 里用 VirtualAllocEx 来在目标进程里分配内存,然后把地址传给控件。
在 Win9x 里可以用文件映射来获得共享内存。
蒋晟 2005-12-28
  • 打赏
  • 举报
回复
要注入代码到对方进程。你传递的本进程内的内存地址在对方进程内是无效地址。
rainstormmaster 2005-12-28
  • 打赏
  • 举报
回复
//在 WinNT 里用 VirtualAllocEx 来在目标进程里分配内存,然后把地址传给控件。
在 Win9x 里可以用文件映射来获得共享内存。

就是这个意思,在WinNT下要用WriteProcessMemory和ReadProcessMemory读写内存,而在Win9x则要用copymemory,总之很麻烦就是了

给你个模块,内存分配的:
Option Explicit
'=========Checking OS staff=============
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long

'========= Win95/98/ME Shared memory staff===============
Private Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, ByVal lpFileMappigAttributes As Long, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long
Private Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Private Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long
Const STANDARD_RIGHTS_REQUIRED = &HF0000
Const SECTION_QUERY = &H1
Const SECTION_MAP_WRITE = &H2
Const SECTION_MAP_READ = &H4
Const SECTION_MAP_EXECUTE = &H8
Const SECTION_EXTEND_SIZE = &H10
Const SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE
Const FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS

Private Const PAGE_NOACCESS = &H1&
Private Const PAGE_READONLY = &H2&
Private Const PAGE_READWRITE = &H4&
Private Const PAGE_WRITECOPY = &H8&
Private Const PAGE_EXECUTE = &H10&
Private Const PAGE_EXECUTE_READ = &H20&
Private Const PAGE_EXECUTE_READWRITE = &H40&
Private Const PAGE_EXECUTE_WRITECOPY = &H80&
Private Const PAGE_GUARD = &H100&
Private Const PAGE_NOCACHE = &H200&

'============NT Shared memory staff======================
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const PROCESS_VM_OPERATION = &H8
Const PROCESS_VM_READ = &H10
Const PROCESS_VM_WRITE = &H20
Const PROCESS_ALL_ACCESS = 0

Const MEM_COMMIT = &H1000
Const MEM_RESERVE = &H2000
Const MEM_DECOMMIT = &H4000
Const MEM_RELEASE = &H8000
Const MEM_FREE = &H10000
Const MEM_PRIVATE = &H20000
Const MEM_MAPPED = &H40000
Const MEM_TOP_DOWN = &H100000

Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Function GetMemShared95(ByVal memSize As Long, hFile As Long) As Long
hFile = CreateFileMapping(&HFFFFFFFF, 0, PAGE_READWRITE, 0, memSize, vbNullString)
GetMemShared95 = MapViewOfFile(hFile, FILE_MAP_ALL_ACCESS, 0, 0, 0)
End Function

Public Sub FreeMemShared95(ByVal hFile As Long, ByVal lpMem As Long)
UnmapViewOfFile lpMem
CloseHandle hFile
End Sub

Public Function GetMemSharedNT(ByVal pid As Long, ByVal memSize As Long, hProcess As Long) As Long
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, pid)
GetMemSharedNT = VirtualAllocEx(ByVal hProcess, ByVal 0&, ByVal memSize, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE)
End Function

Public Sub FreeMemSharedNT(ByVal hProcess As Long, ByVal MemAddress As Long, ByVal memSize As Long)
Call VirtualFreeEx(hProcess, ByVal MemAddress, memSize, MEM_RELEASE)
CloseHandle hProcess
End Sub

Public Function IsWindowsNT() As Boolean
Dim verinfo As OSVERSIONINFO
verinfo.dwOSVersionInfoSize = Len(verinfo)
If (GetVersionEx(verinfo)) = 0 Then Exit Function
If verinfo.dwPlatformId = 2 Then IsWindowsNT = True
End Function


northwolves 2005-12-28
  • 打赏
  • 举报
回复
看看有没有帮助:
http://www.vbaccelerator.com/home/VB/Utilities/ActiveX_Documenter/ActiveX_Documenter_Source_zip_VBRichEdit_ctl.asp

http://www.vbaccelerator.com/home/VB/Utilities/ActiveX_Documenter/ActiveX_Documenter_Source_zip_mRichEdit_bas.asp
内容概要:本文围绕“阶梯碳下考虑P2G-CCS与供需灵活响应的IES优化调度”展开,基于Matlab平台构建综合能源系统(IES)在阶梯式碳交易机制下的优化调度模型。研究深度融合电制气(P2G)与碳捕集、利用与封存(CCS)技术,结合需求侧灵活响应机制,旨在提升系统的低碳运行能力与经济性。通过建立多能流耦合的优化模型,协调电力、天然气、热力等多种能源形式的协同调度,有效降低系统碳排放强度,并借助YALIMIP工具包调用求解进行高效求解。文档提供了完整的代码实现、模型构建流程与结果析方法,涵盖从问题建模到仿真实现的全过程,具备较强的可复现性与科研参考价值。; 适合人群:具备电力系统、能源系统或优化建模相关背景的研究生、高校教师及工程技术人员,尤其适合从事综合能源系统、碳减排策略、P2G与CCS技术集成研究的专业人员,需熟练掌握Matlab编程与基本的数学规划知识。; 使用场景及目标:①用于研究阶梯式碳交易政策下综合能源系统的低碳经济调度策略;②支撑P2G-CCS技术与需求响应机制在IES中的仿真集成与性能评估;③作为撰写高水平学术论文(如EI/SCI收录)的技术基础与复现资源,推动碳中和背景下能源系统优化方向的创新研究。; 阅读建议:建议结合百度网盘提供的完整代码与资料包,按照模块逐步调试程序,重点理解目标函数的设计逻辑、碳交易成本的建模方式、约束条件的数学表达及求解器的配置方法,同时关注多能耦合设备的建模细节,配合公众号“荔枝科研社”获取持续的技术支持与案例拓展。
内容概要:本文系统研究了基于卷积神经网络(CNN)与支持向量机(SVM)融合的CNN-SVM混合模型在数据类预测中的应用,尤其聚焦于工业故障识别领域。通过Matlab平台实现,该方法首先利用CNN强大的多层次特征提取能力对原始输入数据进行深度特征学习,自动捕获关键局部模式与空间结构信息,随后将提取的高层特征作为输入传递至SVM类器,借助SVM在高维空间中小样本条件下卓越的类性能与泛化能力完成最终判别任务。文中详尽阐述了模型的整体架构设计、网络参数配置、训练优化流程及特征迁移机制,充结合了深度学习在特征表达上的优势与传统机器学习在类决策上的稳健性。实验部通过实际故障数据集验证了该混合模型相较于单一CNN或SVM模型在类准确率、鲁棒性和抗过拟合能力方面的显著提升,证明了其在复杂故障诊断任务中的有效性与先进性; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事故障诊断、模式识别、智能制造、电力系统监控或工业数据析等相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:① 应用于旋转机械、电力设备、航空航天等领域的多类别故障识别与状态监测;② 掌握深度特征提取与传统类器融合的技术路径,提升小样本、高噪声环境下数据类的精度与可靠性;③ 为撰写高水平学术论文、开展科研项目或工程实践提供可复现的算法框架与完整代码支持; 阅读建议:读者应深入理解CNN与SVM的协同工作机制,重点析特征提取层与类层之间的接口设计,建议动手运行并调试所提供的Matlab代码,尝试在不同数据集上进行迁移实验与参数调优,以全面掌握该混合模型的应用技巧与优化策略。

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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