看看能实现吗?高手请进!(100分)

  • 主题发起人 主题发起人 anni9977
  • 开始时间 开始时间
A

anni9977

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有个想法但不知能不能实现,请高手帮忙分析一下,如能实现说个思路再加分.现在的情况:有两台服务器A、B上边分别有应用程序,其中A上的程序可以从数据库中提取,而B上的程序操作时需要输入的数据(有输入框)是可以通过A上程序获取的。
现在我想在A上通过程序获取数据时,自动把数据填到B上程序相应的框内。B上的程序是不能改动的。如实在不能实现也可能通过复制、粘贴来实现。
哪位高手能帮忙,解决了问题可以再加分的!
 
将A提取的数据放在一个共享文件里,让B可以看到的。
B机那边做一个通过句柄自动填数据的程序,找这个共享文件里数据填上去就是了。
 
基本上可以,如果都是文本框倒是有类似代码,不过因为是不同的机器,所以你需要有两个程序,一个是服务器端,一个是客户端,前者监控,后者接收,至于是直接写入还是复制粘贴,你决定,因为直接写入我还没有做过,做好了麻烦你指教一下我:
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
 
可以实现,参照java的观察者模式.
a中修改了,就通过scoket把数据发送给b,b得到数据就可以进行填充了。
 
to dey-999:我没看了哪儿是客户端那边往输入框送数据啊?我难的就是不知道那儿怎么弄啊?谢谢,告诉一下吧.
 
对不起,第一点我写错了,笔误!其实是服务器端监控时写在主程序中的响应线程消息的代码:1是主程序代码;2是线程代码;3可以是公共函数,用于获取其他程序的控件信息
客户端和服务器端通讯的代码我没有写,这里只是服务器端监控的方法,通讯使用winsock就可以了
客户端可以直接写,第四点提供了一个连接;也可以显示在文本框中再Copy
 
先这样吧,到真正做时,再继续请教.
 
后退
顶部