我怎么向另一应用程序发消息,另一程序是VC做的 我要向另一用VC做的应用程序发送消息,再在目标程序里处理此消息,该怎么做?主要是Delphi这边怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 转载我收集的一段代码,也许对你有帮助unit memfileu;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; RPtValue =record// x,y:double; Pt_id:integer; pt_value:single; pt_state:integer;// pt_unit:string[10]; end;var Form1: TForm1;implementation{$R *.DFM}//读memfileprocedure TForm1.Button1Click(Sender: TObject);var hMap:THandle; data,d:^RPtValue; i:integer;begin hMap:=CreateFileMapping(-1,nil,PAGE_READONLY,0,1024,'JZS_SHARE_MEMORY'); if hMap=NULL then exit; data:=Mapviewoffile(hMap,FILE_MAP_READ,0,0,0); d:=data; for i:=0 to 25 do begin memo1.Lines.Add(inttostr(d^.Pt_id)+':'+floattostr(d^.pt_value)+':'+inttostr(d^.pt_state)); inc(d); end;end;//创建/写memfileprocedure TForm1.Button2Click(Sender: TObject);var hFile:THandle; hMapping:THandle; data,d:^integer; i:integer;begin hMapping:=CreateFileMapping($ffffffff,nil,PAGE_READWRITE ,0,1024,pchar('JZS_SHARE_MEMORY')); data:=MapViewOfFile(hMapping,FILE_MAP_WRITE,0,0,0); d:=data; for i:=0 to 25 do begin d^:=ord('a')+i; inc(d); end;end;procedure TForm1.Button3Click(Sender: TObject);var r: RPtValue;begin showmessage(inttostr(sizeof(r)));end;end. sunjian1213(sunny) :具体怎么写,能给个简单的代码吗? ljmanage(过客) :是自定义消息,而且我怎么找到目标程序的主窗口再发送? 我怎么找到目标程序的主窗口再发送?用findwindow啊,只要知道它的窗口标题就可以了 很多种方式啊。对你这个问题,直接采用消息发送WM_CopyData最好。SendMessage(hWnd,WM_CopyData,Handle, pcds)。 是啊,先用findWindow函数找到句柄,再用sendMessage函数发送就行了 能告诉我你怎么解决的吗?能不能看看你的代码?DELPHI和VC中涉及到内存共享的部分?谢谢! 其实很简单,我把我的程序贴出来以供参考 在Delphi程序中定义一自定义消息 const WM_INITCOMM=WM_USER+102;下面是发送消息: var handle : HWND;begin handle:=FindWindow(nil,'目标窗口的标题'); try PostMessage(handle,WM_INITCOMM,0,0); except end;end; VC程序中: 也自定义一消息,消息ID与上面一样 头文件中加入 #define WM_INITCOMM (WM_USER+102) 映射列表中加入 afx_msg LRESULT MyMessage(); CPP文件中加入在//}}AFX_MSG_MAP后END_MESSAGE_MAP()前加入 ON_MESSAGE(WM_INITCOMM,MyMessage) 加入 LRESULT CMainFrame::MyMessage() { //消息处理 } 设置了很多断点,那个快捷键是 清楚所有断点的 如何在Delphi里写Sin(x)这个函数阿 鼠標移動問題 跪求!为什么ftp可以上传但在中断过程中不可以中断,一中断就出现错误? 12000左右的笔记本电脑哪一种比较好? 如何在运行中删除动态创建的 POPUPMENU 的某个菜单项呢? 请问Delphi7的dotNet功能是怎么一回事?跟Delphi.Net是一回事吗?工具栏按钮文本如何能放置在图标右侧? 请教了,一定给分 Istrings 的问题 我想找份工作,希望大家能帮帮我。 delphi 7 和 delphi.net 是不是一个东西?有什么区别? 怎么生成动态数组?
unit memfileu;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
RPtValue =record
// x,y:double;
Pt_id:integer;
pt_value:single;
pt_state:integer;
// pt_unit:string[10];
end;var
Form1: TForm1;implementation{$R *.DFM}//读memfile
procedure TForm1.Button1Click(Sender: TObject);
var
hMap:THandle;
data,d:^RPtValue;
i:integer;
begin
hMap:=CreateFileMapping(-1,nil,PAGE_READONLY,0,1024,'JZS_SHARE_MEMORY');
if hMap=NULL then exit;
data:=Mapviewoffile(hMap,FILE_MAP_READ,0,0,0);
d:=data;
for i:=0 to 25 do
begin
memo1.Lines.Add(inttostr(d^.Pt_id)+':'+floattostr(d^.pt_value)+':'+inttostr(d^.pt_state));
inc(d);
end;
end;//创建/写memfile
procedure TForm1.Button2Click(Sender: TObject);
var
hFile:THandle;
hMapping:THandle;
data,d:^integer;
i:integer;
begin
hMapping:=CreateFileMapping($ffffffff,nil,PAGE_READWRITE ,0,1024,pchar('JZS_SHARE_MEMORY'));
data:=MapViewOfFile(hMapping,FILE_MAP_WRITE,0,0,0); d:=data;
for i:=0 to 25 do
begin
d^:=ord('a')+i;
inc(d);
end;end;procedure TForm1.Button3Click(Sender: TObject);
var
r: RPtValue;
begin
showmessage(inttostr(sizeof(r)));
end;end.
sunjian1213(sunny) :具体怎么写,能给个简单的代码吗?
ljmanage(过客) :是自定义消息,而且我怎么找到目标程序的主窗口再发送?
用findwindow啊,只要知道它的窗口标题就可以了
SendMessage(hWnd,WM_CopyData,Handle, pcds)。
能不能看看你的代码?DELPHI和VC中涉及到内存共享的部分?
谢谢!
其实很简单,我把我的程序贴出来以供参考 在Delphi程序中定义一自定义消息
const WM_INITCOMM=WM_USER+102;
下面是发送消息:
var
handle : HWND;
begin
handle:=FindWindow(nil,'目标窗口的标题');
try
PostMessage(handle,WM_INITCOMM,0,0);
except
end;
end;
VC程序中:
也自定义一消息,消息ID与上面一样
头文件中加入
#define WM_INITCOMM (WM_USER+102)
映射列表中加入
afx_msg LRESULT MyMessage(); CPP文件中加入在//}}AFX_MSG_MAP后END_MESSAGE_MAP()前加入
ON_MESSAGE(WM_INITCOMM,MyMessage) 加入 LRESULT CMainFrame::MyMessage()
{
//消息处理
}