基本上可以,如果都是文本框倒是有类似代码,不过因为是不同的机器,所以你需要有两个程序,一个是服务器端,一个是客户端,前者监控,后者接收,至于是直接写入还是复制粘贴,你决定,因为直接写入我还没有做过,做好了麻烦你指教一下我:
1.使用消息得到当前值,你可以在这里给客户端发送消息:
//定义消息标识符WM_DEFMSG和WM_MYMSG
WM_DEFMSG=WM_USER + 158;
WM_MYMSG=WM_USER + 168;
protected
//此处声明自定义消息的处理方法
procedure WMDefMsg(var Msg:TMessage);Message WM_DEFMSG;
procedure TForm4.WMDefMsg(var Msg:TMessage);
var pt: TPoint;
begin
//触发
if Msg.wparam=1 then
...
end;
2.线程监控部分代码,随时监控应用程序:
D1:=PerformTextInfoSingle;//监控结果
wParam:=(50 shl 16)+100;//把16位的nLeft和nTop处理为32位的wParam
lParam:=(80 shl 16)+200;//把16位的nRight和nButtom处理为32位的lParam
if 和上次不一样 then
begin
//通过SendMessage()函数发送WM_MYMSG消息,并取得返回值
PostMessage(fHandle,Cardinal(WM_DEFMSG),1,3);
end else
begin
PostMessage(fHandle,Cardinal(WM_DEFMSG),0,3);
end;
3.读文本框内容(PerformTextInfoSingle相关代码):
function GetLocalTextInfo(var ReturnEditHandle:Integer):String;
var AHandle, BHandle: Integer;
R:Boolean;
mbuffer: array[0..255] of Char;
ss:string;
function GetComponentHandle(hwnd: Integer;
lparam: Longint):Boolean;
stdcall;
var s,sssss:string;
i,j:integer;
buffer: array[0..255] of Char;
begin
j:=0;i:=2;
if DebugState then
sssss:='TEDIT'//Delphi程序
else
sssss:='.EDIT.';//VC程序
Result := True;
//得到目标窗口的控件
j:=GetClassName(hwnd, buffer, 256);
//找到目标窗口的TButton类目标控件
s:=StrPas(Buffer);
if Pos(sssss,uppercase(s))>0 then
begin
PInteger(lparam)^ := hwnd;
//得到目标控件的Hwnd(句柄)
Result:=False;
//终止循环
end;
end;
begin
//取句柄
AHandle := FindWindow(nil, 被监控应用程序窗体Caption);
//就是窗口的Caption
if AHandle<>0 then
begin
//在这里循环取到想要的句柄为止
R:=EnumChildWindows(AHandle, @GetComponentHandle, Integer(@BHandle));
if not R then
begin
ReturnEditHandle:=BHandle;
SendMessage(BHandle,WM_GETTEXT,254,Integer(@mbuffer));
//GetWindowText(BHandle, mbuffer, 100);
ss:=StrPas(mBuffer);
Result:=ss;
end;
//此时,BHandle就是你要的句柄
//PostMessage(BHandle, BM_Click, 0, 0);
//向这个按钮发一个点击消息
end;
end;
4.另外也可以参考:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=7146