截获wm_rasdialevent三种方法的三种错误求解 (100分)

  • 主题发起人 主题发起人 Luckm
  • 开始时间 开始时间
L

Luckm

Unregistered / Unconfirmed
GUEST, unregistred user!
RAS拨号时, 系统会发送wm_rasdialevent给应用程序,从而可获知拨号的进度与错误信息。获取wm_rasdialevent有三种方法,一一试过,却出现三种错误,求解:

一、定义消息ID
const wm_rasdialevent=$0cccd;

二、方法一:使用回调函数
在rasdial的参数中可以调入回调函数的地址,在拨号时会系统在状态变化时调用该函数
1、定义回调函数
procedure rasdialfunc(umsg:cardinal;rasstatue:word;dwerror:dword);stdcall;
begin
case rasstatue of
RASCS_CONNECTED:form1.label1.caption:='连接成功';
RASC_DISCONNECTED:form1.label1.caption:='连接失败';
{ other statues }
end;
end;
2、调用rasdial:
rasdail(nil,nil,@rasdialparams,0,DWORD(@rasdialfunc),rcon);
3、出现错误:
在回调函数对form1.label1.caption赋值时发生冲突

三、方法二:使用消息函数
1、定义消息获取函数:
procedure formonrasevent(var msg:tmessage);message wm_rasdialevent;
procedure formonrasevent(var msg:tmessage);
begin
case msg.wparam of
RASCS_CONNECTED:form1.label1.caption:='连接成功';
RASC_DISCONNECTED:form1.label1.caption:='连接失败';
{ other statues }
end;
end;
2、连接
rasdail(nil,nil,@rasdialparams,$FFFFFFFF,handle,rcon);
3、出现错误:
在编译时出现illegal message method index错误,在帮助中,
delphi表示windows消息ID不能超过$BFFF。但wm_rasdialevent却是$cccd?

四、方法三:使用消息截取函数:
1、定义消息处理函数:
procedure appmessage(var msg:tmsg;var handle:boolean);
begin
if msg.message=wm_rasdialevent then
begin
case msg.wparam of
RASCS_CONNECTED:form1.label1.caption:='连接成功';
RASC_DISCONNECTED:form1.label1.caption:='连接失败';
{ other statues }
end;
handle:=true;
end;
end;
2、在form.oncreate中替换应用程序消息处理函数:
application.onmessage:=appmessage;
3、连接
rasdail(nil,nil,@rasdialparams,$FFFFFFFF,handle,rcon);
4、出现错误:
截取不到RAS事件。

以上三种错误能予解决者均有分加!
 
那个消息是要用RegisterMessage来注册获得的
你的用法不对, 我有例子, tseug@263.net
 
谢谢tseug,

但onmessage 还是不行
 
现在不愿意写代码, 如果愿意你把你的代码发给我, 我给你修改一下...
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部