如何在两个应用程序之间发送和相应自定义的消息?

xiaodong 2001-08-10 06:17:43
如何在两个应用程序之间发送和相应自定义的消息?请给个例子!谢谢!
...全文
326 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bysoftt 2001-08-13
  • 打赏
  • 举报
回复
阿华我说的是用DELPHI程序向QQ发送信息
例如:你好,然后自动送出
bysoftt 2001-08-12
  • 打赏
  • 举报
回复
请问怎样给你分
wuyh78 2001-08-12
  • 打赏
  • 举报
回复
bysoftt(白菜):sorry,我们学校把QQ给锁了,你要的,我现在给你发过去好了!注意查收!
上这里主要是互相促进,分不是很重要……OK
bysoftt 2001-08-12
  • 打赏
  • 举报
回复
阿华你有网址吗
xiaodong 2001-08-11
  • 打赏
  • 举报
回复
大家这么热心!太谢谢了!可惜分太少,请大家原谅!
summernightrain 2001-08-11
  • 打赏
  • 举报
回复
我的代码,包含通讯和收发消息的部分。
这是发送的部分:

主窗口上包含两个Button ,一个输入Edit1,一个提示Label.
procedure TfrmSendMsg.Button1Click(Sender: TObject);
var
Win:HWND;
Post:Pointer;
pStr:PShortString;
Str:String;
begin
Str:=Edit1.Text;
MapHandle:=CreateFileMapping(DWord(-1),nil,PAGE_READWRITE,0,250,'summer');
if (MapHandle>0) then
begin
Post:=MapViewOfFile(MapHandle,FILE_MAP_WRITE,0,0,0);
pStr:=Post;
pStr^:=Str; //写共享内存
end;
Win:=FindWindow('TfrmRecvMsg',nil);
If Win>0 then
Begin
PostMessage(Win,WM_USER+100,0,0); //发消息给接收程序的主窗口...
Edit1.SetFocus;
Label2.Caption:='发送完成!';
end
Else
Begin
Label2.Caption:='接收器没有运行!';
end;
end;

这是接收部分:
主窗口包含一个Memo1.

unit RecvMsg;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TfrmRecvMsg = class(TForm)
Memo1: TMemo;
Label1: TLabel;
private
procedure GetMsg(var Msg: TMessage);Message WM_USER+100; //在这里增加接收的过程
{ Private declarations }
public
{ Public declarations }
end;

var
frmRecvMsg: TfrmRecvMsg;

implementation

{$R *.DFM}

{ TfrmRecvMsg }

procedure TfrmRecvMsg.GetMsg(var Msg: TMessage);
var
MapHandle:THandle;
pStr:Pointer;
Str:String;
begin
MapHandle:=CreateFileMapping(DWord(-1),nil,PAGE_READWRITE,0,255,'summer');
if (MapHandle>0) then
begin
pStr:=MapViewOfFile(MapHandle,FILE_MAP_READ,0,0,10); //得到共享内存的指针
Memo1.Lines.Add('收到一条消息!!');
Memo1.Lines.Add(Pchar(pStr));
end;
CloseHandle(MapHandle);
end;

wuyh78 2001-08-11
  • 打赏
  • 举报
回复
两位的,我已经在发送了,是个简单的例子,有两个应用程序,你先将两个都运行,再点击project1上的button,look what will happen?^_^
好久没拿分,不知此次如何?呵呵
不妙……今天的263邮件好象有点问题,别着急……
bysoftt 2001-08-11
  • 打赏
  • 举报
回复
我的EMAIL:ma_ml@163.com
能否向QQ发送信息请指教
taxi 2001-08-11
  • 打赏
  • 举报
回复
wuyh78(阿华) :也来一份吧
ywbtaxi@yeah.net
wuyh78 2001-08-11
  • 打赏
  • 举报
回复
bysoftt(白菜) ;your email?????
xiaodong 2001-08-11
  • 打赏
  • 举报
回复
我的电子邮件是:
xdzhan@netease.com
谢谢阿华费心了!
Crob 2001-08-11
  • 打赏
  • 举报
回复
比较稳定的方法是重载目标程序窗体的WndProc消息处理过程。然后找到对方的窗体句柄后SendMessage到这个句柄上,在WndProc中根据不同的自定义消息及消息参数来处理

const
ABORTALL_OK = WM_USER + 8888;

TFormTest = class(TForm)
private
//.......
protected
//.........
public
constructor Create; override;
destructor Destroy; override;
published
procedure WndProc(var Message: TMessage); override;
end;

//..................


procedure TFormTest.WndProc(var Message: TMessage);
var h : integer;
begin
with Message do
case Msg of
ASKABORT_ALL :begin
//此处进行该消息的处理;
//............
//下面返回对方程序
h := findwindow('TForm1','xxx');
SendMessage(agent_Handle, ABORTALL_OK, 0,0);
end;
//*****************************************
end;
inherited WndProc(Message);
end;
bysoftt 2001-08-11
  • 打赏
  • 举报
回复
阿华请给我也发一份源码可以吗
谢谢了
wuyh78 2001-08-11
  • 打赏
  • 举报
回复
OK,注意查收,下午263邮箱恢复正常了……
wuyh78 2001-08-10
  • 打赏
  • 举报
回复
ok!关于两个应用程序间发送和响应消息我以前做过。
首先,为了保证消息的唯一性,要注册你自定义的消息Registerwindow(不准确);
其次是用sendmessage发送消息;
最后重载winpro过程,响应自己定义的消息。
要源码的话,我回头找找,your-Email:?
ddeng 2001-08-10
  • 打赏
  • 举报
回复
SendMessage
kryso 2001-08-10
  • 打赏
  • 举报
回复
wm_copydata

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧