利用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..255of 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

posted @   shaoyun  阅读(394)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示