消息传递中的奇怪问题急急急!!!
我想用消息的方式,来实现对其他程序运行过程的监视。
写了两个测试程序来演示,结果发现消息不能正常处理。不知道是什么原因:
消息处理端源码如下:
const
MONITOR_MESSAGE = WM_USER + 1;
type
TfrmMain = class(TForm)
memoPlain: TMemo;
memoHex: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure MonitorInfo(var Message: TMessage); message MONITOR_MESSAGE;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
//**:***************************************************************************
//**:功能:状态监控控制
//**:***************************************************************************
procedure TfrmMain.MonitorInfo(var Message: TMessage);
var
L_Param:string;
begin
L_Param := string(Pointer(Message.LParam));
MemoHex.Text := MemoHex.Text + L_Param;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
f:TextFile;
begin
AssignFile(f, 'C:\MHandle.dat');
try
try
rewrite(f);
writeln(f,IntToStr(frmMain.Handle)); //将监控
except
ShowMessage('启动失败');
end;
finally
closefile(f);
end;
end;
消息发送端源码如下:
const
MONITOR_MESSAGE = WM_USER + 1;
type
TfrmMain = class(TForm)
btnSend1: TButton;
txtMsg1: TEdit;
procedure FormCreate(Sender: TObject);
procedure btnSend1Click(Sender: TObject);
private
{ Private declarations }
SvrHWD:integer;
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
var
f:TextFile;
fn, tmp:string;
begin
fn := 'C:\MHandle.dat';
if not FileExists(fn) then
begin
showmessage('启动失败');
exit;
end;
AssignFile(f, 'C:\MHandle.dat');
try
try
reset(f);
readln(f,tmp);
SvrHWD := StrToInt(tmp);
except
end;
finally
closefile(f);
end;
end;
procedure TfrmMain.btnSend1Click(Sender: TObject);
var
L_Param:string;
begin
L_Param := ' '+txtMsg1.Text;
postMessage(SvrHWD,MONITOR_MESSAGE,1,LongInt(Pointer(L_Param)));
end;
消息处理端,消息发送端,是两个独立的执行文件。
可是在调试的时候,发现MonitorInfo方法中总是会报内存只读错误,无法正常收到Lparam的内容。
请问高手,这是为什么,怎么解决?