怎样改变一个名为FORM1中的EDIT1的TEXT的内容(101分)

  • 主题发起人 主题发起人 leakboy
  • 开始时间 开始时间
L

leakboy

Unregistered / Unconfirmed
GUEST, unregistred user!
写一个程序,去改变另一个程序的TEXT的内容,如何写?
 
菜鸟就是菜鸟,说得你们都看不懂。。。。
 
可以通过很多种方式,比方说,你可以使用DDE
 
首先使用findwindow获取相关窗口句柄,然后枚举得到TEXT控件的句柄
然后使用setWindowText将字符串传送过去。
 
能写个简单的例子吗?谢谢了!我刚学。
 
在找到Form的句柄后也可以根据Edit所在的位置用WindowFromPoint(),ChildWindowFromPoint()
来找Edit的句柄。
 
感觉有点门,能写下源码吗?谢谢了。这个问题我纳闷了好久了,此论坛有很多相似问题,
虽然提出问题的人最终明白,但我却摸不着头脑,希望有人能帮我一下,给个简单的源码,
谢谢。[^]
 
好吧,我下去写一个,一会贴上。
 
打开Windows的《记事本》空白窗口(标题为'无标题 - 记事本'的状态),运行下列程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Hnd:HWND;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
Pt:TPoint;
begin
Hnd:=findwindow(Nil,'无标题 - 记事本');
//找到记事本窗口句柄
if Hnd=0 then
begin
showmessage('找不到记事本程序窗口,请确认已打开记事本!');
exit;
end;

Pt.x:=50;
Pt.y:=50;//一个包含在Edit里的点
Hnd:=ChildWindowFromPoint(Hnd,Pt);//找到记事本里的Edit的句柄
if Hnd=0 then
begin
showmessage('请不要将记事本最小化!');
exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Hnd,WM_SETTEXT,0,integer(Pointer(Edit1.Text)));
//改变记事本的内容
end;

end.
 
请浏览
http://v01.net/leakboy/q.gif
该怎么做呢?我真的好笨。
 
procedure TForm1.FormCreate(Sender: TObject);
var
Pt:TPoint;
begin
Hnd:=findwindow(Nil,'Form1');
//按窗口标题找到Form1窗口句柄
if Hnd=0 then
begin
showmessage('找不到Form1窗口,请确认已打开!');
exit;
end;

Pt.x:=[red]XXX[/red];
Pt.y:=[red]YYY;//一个包含在Edit里的点[/red]
Hnd:=ChildWindowFromPoint(Hnd,Pt);//按Edit1的位置找到Edit1句柄
if Hnd=0 then
begin
showmessage('请不要将Form1最小化!');
exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Hnd,WM_SETTEXT,0,integer(Pointer(Edit1.Text)));
//改变Edit1的内容
end;

end.

只有把红色的部分变成包含在Edit1中的一个点的坐标(在Form1中的坐标)即可!
自己试试吧!!
 
我写了一个完整的例程,代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TFrmMain = class(TForm)
BtSend: TButton;
Label1: TLabel;
EdtCaption: TEdit;
Label2: TLabel;
EdtX: TEdit;
Label3: TLabel;
EdtY: TEdit;
EdtMsg: TEdit;
Label4: TLabel;
procedure BtSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmMain: TFrmMain;
implementation
{$R *.dfm}
procedure TFrmMain.BtSendClick(Sender: TObject);
var
fHd,Hd:HWND;
Pt:Tpoint;
R:Integer;
begin
fHd:=0;
Hd:=0;
fHd:=FindWindow(nil,Pchar(EdtCaption.text));//按标题找父窗口的句柄
if fHd=0 then
begin
ShowMessage('找不到标题为'+EdtCaption.Text+'的窗口!');
Exit;
end;

Pt.X:=StrToInt(EdtX.Text);
Pt.Y:=StrToInt(EdtY.Text);
Hd:=ChildWindowFromPoint(fHd,Pt);//按Pt指定的位置找目标Edit的句柄
if (Hd=0) or (Hd=fHd) then
begin
ShowMessage('在指定位置('+EdtX.Text+','+EdtY.Text+')找不到目标Edit!');
Exit;
end;

R:=SendMessage(Hd,WM_SETTEXT,0,Integer(Pointer(EdtMsg.Text)));
//改变目标Edit的内容
If Boolean(R)=true then
ShowMessage('发送成功!!')
else
ShowMessage('发送失败!');
end;
//Procedure
end.

如果还有问题,请跟贴!
 
后退
顶部