利用API的消息发送程序原理
利用API的消息发送程序原理 By Shaoyun 2010-03-20
很简单,最基本的几个API函数的应用,我写的这段代码也是最简单实现方法,当然高阶点的通过Hook方式来实现
原理:
通过窗体类名利用FindWindow来获取窗口句柄,再而用FindWindowEx获取编辑框的窗体句柄
借助SendMessage函数发送WM_GETTEXT消息获取编辑框的文本,然后加入自己的消息,发送WM_SETTEXT消息来设置目标程序相应子窗体的内容
这里我给出一段例子代码,点击按钮向记事本追加一段文字。实际应用中还需要设置一个定时器,循环检测目标程序来发送消息。

1 procedure TForm1.btn1Click(Sender: TObject);
2 var
3 sTarget,sMsg:string;
4 hTargetWnd,hEdit:THandle;
5 szBuff:array[0..255] of Char;
6 begin
7 sTarget:='notepad';
8 hTargetWnd:=FindWindow(PWideChar(sTarget),nil);
9 if hTargetWnd<>0 then
10 begin
11 SetForegroundWindow(hTargetWnd);
12 hEdit:=FindWindowEx(hTargetWnd,0,PWideChar('Edit'),nil);
13 if hEdit<>0 then
14 begin
15 SendMessage(hEdit,WM_GETTEXT,SizeOf(szBuff),Integer(@szBuff));
16 sMsg:= szBuff + '追加的信息!';
17 SendMessage(hEdit,WM_SETTEXT,0,Integer(PWideChar(sMsg)));
18 end;
19 end;
20 end;
2 var
3 sTarget,sMsg:string;
4 hTargetWnd,hEdit:THandle;
5 szBuff:array[0..255] of Char;
6 begin
7 sTarget:='notepad';
8 hTargetWnd:=FindWindow(PWideChar(sTarget),nil);
9 if hTargetWnd<>0 then
10 begin
11 SetForegroundWindow(hTargetWnd);
12 hEdit:=FindWindowEx(hTargetWnd,0,PWideChar('Edit'),nil);
13 if hEdit<>0 then
14 begin
15 SendMessage(hEdit,WM_GETTEXT,SizeOf(szBuff),Integer(@szBuff));
16 sMsg:= szBuff + '追加的信息!';
17 SendMessage(hEdit,WM_SETTEXT,0,Integer(PWideChar(sMsg)));
18 end;
19 end;
20 end;
代码测试环境:Windows XP SP3 + Delphi 2010
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端