两个EXE文件相互访问??? ( 积分: 50 )

  • 主题发起人 主题发起人 qegdgh49410436
  • 开始时间 开始时间
Q

qegdgh49410436

Unregistered / Unconfirmed
GUEST, unregistred user!
两个EXE文件除通过socket方式访问;还能通过什么方式来访问;比单我在一个EXE文件单击一个按钮让另一个EXE的按钮单击;有人说消息能实现;请问怎实现呢;(能给出点事例代码吗)
 
单击一个程序的按纽时给另一个程序发个消息不就行了,另一个程序里写上消息的响应处理。
 
嗯,窗体消息.....[8D]
 
SendMessage(目的窗口的Handle,XXXX)
 
请问另外一窗口的句柄怎取到呢;findwindow吗;
 
如果两个程序都是自己写的,可以考虑使用TEvent,方便省事
 
这方面我不太行;能给不点实例吗;谢谢了
 
sorry,TEvent好想不能直接用,得开线程;用Message吧,句柄可以findwindow也可以写入内存影射中
 
请问:我第一个EXE这样写的:
const wm_myname=wm_user+$1000;
procedure restorerequest(var msg:Tmessage);message wm_myname;
procedure TForm1.restorerequest(var msg: Tmessage);
var hand:hwnd;
pstr: Pstring;
begin
pstr := Pstring(pointer(Msg.wParam));
if pstr^<>'' then memo1.Lines.Add(pstr^);
end;

第二个这样的:const wm_myname=wm_user+$1000;
procedure TForm1.Button1Click(Sender: TObject);
var hand:hwnd;
var
str:string;
begin
str:='ok';
sendmessage(handle,wm_myname,integer(@str),1);
end;
这里的句柄是这个窗口的句柄,当在同一个窗口执行的时候能够实现;不过两个EXE我就不会了;还请高手指点;
 
现在就是有个程序要达到的目的就是;一个程序进行一系列的判断之后如果为TRUE就要单击另一个程序里面的一个按钮.因为两个程序都在本机;所以想到了消息之类的,还请高手们指点一下;
 
COPY这几个函数到你的单元中
function WriteShareData(ShareName: pchar; Data: pointer; DataSize: Cardinal): THandle;
var
tmpData: pointer;
begin
result := CreateFileMapping(DWord($FFFFFFFF), nil, PAGE_READWRITE, 0,
DataSize, ShareName);
tmpData := MapViewofFile(result, FILE_MAP_WRITE, 0, 0, 0);
move(Data^, tmpData^, DataSize);
UnMapViewofFile(tmpData);
end;
procedure ReadShareData(ShareName: pchar; Data: pointer; DataSize: Cardinal);
var
hMap: THandle;
tmpData: pointer;
begin
hMap := CreateFileMapping(DWord($FFFFFFFF), nil, PAGE_READWRITE,
0, DataSize, ShareName);
try
tmpData := MapViewofFile(hMap, FILE_MAP_READ, 0, 0, 0);
move(tmpData^, Data^, DataSize);
UnMapViewofFile(tmpData);
finally
CloseHandle(hMap);
end;
end;
function ReadShareInteger(ShareName: pchar): integer;
begin
ReadShareData(ShareName, @result, sizeof(integer));
end;
function WriteShareInteger(ShareName: pchar; h: integer): THandle;
begin
result := WriteShareData(ShareName, @h, sizeof(integer));
end;

在接受消息的窗口初始化时加入

WriteShareInteger('你自己取名字', Hanlde);

发送消息时
h := ReadShareInteger('你自己取名字');
sendmessage(h,wm_myname,integer(@str),1);
 
wisenow,没有实现其效果呢;根本没有任何反应;
 
他要找到窗口上的按钮,只能是EnumWindows和EnumChildWindows了。
不过不考虑效率的话,可以自定义一个广播消息,让按钮响应此消息。
 
呵呵;有没有这方面的DEMO;以前没弄过这些;真不知道怎入门;访照网的代码写了几个都没成功;哪位如有DEMO请Q我;244272480;交朋友的也可以加;呵呵;
 
多人接受答案了。
 
后退
顶部