利用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