• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

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

xiaodong 2001-08-10 06:17:43
如何在两个应用程序之间发送和相应自定义的消息?请给个例子!谢谢!
...全文
223 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4876

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2001-08-10 06:17
社区公告
暂无公告