怎么编程启动WIN98自己带的拨号服务器???(200分)

  • 主题发起人 主题发起人 ppppgp
  • 开始时间 开始时间
P

ppppgp

Unregistered / Unconfirmed
GUEST, unregistred user!
因为我编的程序需要简单而且需要自动化
程度比较高的,客户拨号都好解决,就是
WIN98的拨号服务器的自动启动没有办
法找到相关的资料的 所以希望能够得到高
手的指点,即 怎么来通过编程启动
WIN98自己带的拨号服务器呢?谢谢!!!
 
在去年计算机世界上有一篇文章介绍,正巧用的是戴妃,我忘了是那一期了。
找找看
 
我发一个源代码给你,不是我写的,我忘了那位大虾给我的了
 
我对老兄的问题有点模糊,但我也遇到过类似的问题,提供解决方案供你参考
使用DELPHI5+WIN98+IE5/IE4。
在FORM内放一个WebBrowser控件,在程序中只需执行WebBrowser1.Navigate(your URL),然后在WIN98拨号网络中建立所需的拨号连接并设为默认。然后将IE属性中连接一项改为“始终拨打默认连接“。
然后再执行这个FORM,在执行到这一条时,如果系统当前没有连接,就开始调用WIN98的拨号服务器
 
SORRY 我的要求是启动WIN98 自己带的拨号服务器---
即在拨号网络里-连接菜单-下面的拨号网络服务器 而不是
简单的客户端拨号程序 即拨号网络里的所谓连接(拨号网
络服务器是在WIN98的通讯部分里单独安装的)请先实验一

谢谢!!!
 
好象没有人愿意回答了???
 
在DELPHI程序中拨号上网

  用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中启动拨号
连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,
运行拨号网络),提高我们的软件的友好性从而提高软件的竞争力.
  在WIN9X下,如果安装了拨号网络,则在WINDOWS系统的系统目录System下将有两个拨号网络管理
程序库RasApi32.DLL和RasApi16.DLL,我们可利用其中的函数来创建、修改拨号连接,并利用指定的
拨号连接进行拨号上网。

一、新建拨号连接
  当WIN9X系统中已经建立了拨号连接,则可利用现成的拨号连接。如果没有拨号连接,则需要新建
一个拨号连接。RasAPI中提供了相应的函数,其函数名为RasCreatePhonebookEntryA,函数原型为:
function RasCreatePhonebookEntryA( hwnd : THandle;lpszPhonebook: pchar ) : DWORD;
stdcall; { 位于interface部分 }
function RasCreatePhonebookEntryA ; external 'Rasapi32.dll';{ 位于implementation部分 }
  参数:
    hwnd(THandle):新建拨号连接窗口的父窗口的句柄,可以为TForm的Handle,为NIL表示
Windows桌面(DeskTop)
    lpszPhonebook(pchar):电话本名称,在Win9X下无作用,可设为空字符串
  函数返回值:
    0表示执行成功;否则为错误.

    下面是一个新建拨号连接的例子.
{ 新建拨号连接 }
procedure TForm1.Button1Click(Sender: TObject);
var
dwResult : DWORD;
begin
//在当前窗口中新建拨号连接
dwResult := RasCreatePhonebookEntryA( handle, '' );
if dwResult = 0 then
memo1.lines.add('新建拨号连接成功!')
else
memo1.lines.add('新建拨号连接失败!')
end;

二、修改指定拨号连接的属性
  如果用户需要修改拨号连接的属性如电话号码、国家及区号、连接方式、服务器类型
等,可以用RasAPI函数来实现,其函数名为RasEditPhonebookEntryA,函数原型为:
function RasEditPhonebookEntryA( hwnd : THandle; lpszPhonebook: pchar;
lpszEntryName: pchar ) : DWORD;stdcall; { 位于interface部分 }
function RasEditPhonebookEntryA; external 'Rasapi32.dll';{ 位于implementation部分 }
  参数:
    hwnd(THandle):新建拨号连接窗口的父窗口的句柄,可以为TForm的Handle,为NIL表示
Windows桌面(DeskTop)
    lpszPhonebook(pchar):电话本名称,在Win9X下无作用,可设为空字符串
lpszEntryName:( pchar):要修改的拨号连接的名称,如'163'、'169'等
  函数返回值:
    0表示执行成功;否则为错误.

    下面是一个修改指定拨号连接属性的例子.
{ 修改指定拨号连接属性 }
procedure TForm1.Button2Click(Sender: TObject);
var
dwResult : DWORD;
strDialName : string;
begin
strDialName := '163';//拨号连接的名称设为163
//在当前窗口中指定修改拨号连接的属性
dwResult := RasEditPhonebookEntryA( handle, '', PChar( strDialName ) );
if dwResult = 0 then
memo1.lines.add('修改拨号连接' + strDialName + '成功!')
else
memo1.lines.add('修改拨号连接' + strDialName + '失败!')
end;

三、获取当前系统中可用的拨号连接名称
  为了让用户选择使用拨号连接进行拨号,我们需要获取系统中已建立的拨号连接的名称。在建立了
拨号连接后,WIN9X将拨号连接的名称和属性写在了注册表中,我们可以从注册表中获取当前系统中可
用的拨号连接名称及在Internet Explorer中设置的默认连接名称。
  在注册表的HKEY_USERS/.Default/RemoteAccess/Addresses下,列出了已经在拨号网络中建立了的
拨号连接的名称及其属性设置,其中各项目的名称即为可用的拨号连接的名称;各项目的值即为各拨号
连接的属性设置.我们只要读出各项目的名称即可获取当前系统中可用的拨号连接名称.
  如果在Internet Explorer中设置了默认连接名称(查看=》Internet选项=》连接=》连接=》
设置=》使用以下拨号网络连接),则在注册表的HKEY_USERS/.Default/RemoteAccess下,有一个字符
串类型的键值,键值名InternetProfile,其值即为Internet Explorer中设置的默认连接名称。

    下面是一个获取当前系统中可用的拨号连接名称的例子.
{ 注意在Uses中增加Registry单元,用于操作注册表 }
{ 获取当前系统中可用的拨号连接名称 }
procedure TForm1.Button3Click(Sender: TObject);
var
registryTemp : TRegistry;
stringsTemp : TStringlist;
intIndex : integer;
begin
registryTemp := TRegistry.Create;
stringsTemp := TStringlist.Create;
with registryTemp do
begin
RootKey := HKEY_USERS;//根键设置为HKEY_USERS
//如果存在子键.Default/RemoteAccess/Addresses
if OpenKey('.Default/RemoteAccess/Addresses',false) then
GetValueNames( stringsTemp );//读出各项目的名称,即拨号连接名称
CloseKey;
end;
//当前系统中可用的拨号连接
memo1.lines.add( '******************当前系统中有'+ IntToStr( stringsTemp.count )
+'个可用的拨号连接如下****************');
for intIndex := 0 to stringsTemp.count - 1 do
memo1.lines.add( stringsTemp.strings[ intIndex ] );

//列出Internet Explorer中设置的默认连接名称
if registryTemp.OpenKey('.Default/RemoteAccess',false) then
memo1.lines.add( 'Internet Explorer中设置的默认连接名称为' +
registryTemp.ReadString('InternetProfile') );

//释放内存
registryTemp.free;
stringsTemp.free;
end;

四、用指定的拨号连接拨号
  以上的三个工作的目的就是为了拨号上网,现在就来看看如果用指定的拨号连接拨号上网。
最好的方法就是调用WIN9X的拨号网络服务了,就是运行WIN9X下的现成程序。
  在Delphi程序中可以用如下代码实现拨号上网:
  winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
  其中字符串中的最后一个参数“163”为拨号连接的名称。

  下面是一个用指定的拨号连接拨号上网的例子.
{ 用指定的拨号连接拨号上网 }
procedure TForm1.Button4Click(Sender: TObject);
var
strDialName : string;
begin
strDialName := '163';//拨号连接的名称设为163
memo1.lines.add( '******************用拨号连接'+ strDialName
+'实现拨号上网****************');
winexec( PChar('rundll32.exe rnaui.dll,RnaDial ' + strDialName),SW_SHOWNORMAL);
end;

以上程序在PWIN98+Delphi3.0下调试通过。
引用王发军先生之作,给分吧。
 
挂断是如何呢?/自言自语
 
调用拨号网络里的拨号程序来连接:其中'连接Internet'为你创建的拨号程序名称
winexec('rundll32.exe rnaui.dll,RnaDial '+'连接Internet',9);
 
TO yh:
对不起了,请你看前面我的注释,我的要求是启动 WIN98
自己带的可以让别人拨号进来的拨号网络服务器的,而不是自
自己拨号到别处的拨号客户程式,所以恐怕不能够给分吧??

TO ALL:
应该说是因为我没有把问题清楚地说明,非常抱歉,不是我
故意不给分的啊!我的问题可能比较麻烦,好象也没有什么用处
但是因为我编的程式就必须用到它的,所以才会向各位大侠请求
指点的。
谢谢各位!!!
 
哎呀,一刀就解决的问题,可惜大家都砍错了地方 :-)

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/RemoteAccess/CallAccess
修改enabled 的第一个值--01表示允许拨入

但是程序编制可有点麻烦,因为还涉及其他选项,即使用哪个modem,在hosts子键中有一个
子键是当前用户RAS使用的系统modem的名字,你要是能"智能"识别就可以了,
同样,其enabled 第一个值 -- 01表示允许拨入.

另外,在HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Run
中增加Remote Access="rnaapp.exe",则系统会自动启动拨号服务器,否则修改了上述
两项后用程序运行rnaapp.exe就可以了.还有,你应该保证系统安装了拨号服务器!

修改了这三项,就"万事大吉"了(其实还有一点问题,阴险的笑了笑)
 
to 温柔一刀:
我明白你的意思的 你是指 当用手工->拨号网络->连接菜单
->拨号网络服务器,启动服务器以后没有停止 然后重新开
机它会自动启动 你说的注册表的改变就在这里可以找到了
事实上为了解决这个问题 我使用了 REGSNAP 去跟踪启动
服务器前后注册表的差别 发现了上述你说的内容的 但是我
实验了的 手工改变是没有效果的 同时我还使用了 REGMON
去跟踪WIN98的启动过程的 发现 RNAAPP。EXE 会自动判断
是否是手工改变的 因为跟踪的信息太多了 而且比较多都是
涉及到 服务器自己的专用的操作的 所以我没有办法弄清楚
的 我想问题的关键在于 rnaapp.exe 在上述的没有停用的
情况下关机重启动时 它向注册表以及 rnaapp.pwl 写入了
什么 因为regmon.exe 没有办法跟踪关机的信息 即没有办
法保存 或许还应该有其它的办法可以搞清楚这个过程的

真诚希望得到 高手的指点

谢谢!!!
 
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈!!!!!!!!!!!!!!!!!!!!!!!!!
哎!惺惺惜惺惺啊!交个朋友吧!

你的经历和我几乎完全一样,只可惜你少了一点耐心和灵性!(恕我自夸)
我甚至也怀疑到"RNAAPP.EXE 会自动判断是否是手工改变的",
也怀疑到.pwl文件,但左思右想,这种想法实在太过分了.

这就是我在"阴险的笑了笑"之后没说的那一部分!
拨号程序&拨号服务器 在结束时留下了一个进程在内存里,这个进程(仍然是rnaapp)
在正常结束时(当然包括关机),会把当前的状态回写到registry(我的发现就在这里),
因此所谓"手工修改没有了用处".所以在手工修改之前,需要寻找这个残余进程,

找到后kill掉......啊!世界清静了!

既然如此,我为什么不一次说完,只说"还有一点问题"呢?
是因为如果一台机器刚刚启动,没有自动启动拨号服务器,用户也刚好没有拨号上过网,
则rnaapp没有运行过,便不存在这些问题.我想万一你以前不知道这些,
试验时可能情况恰好如此,成功后闷着头给用户一装,也就行了,(而只要成功一次就可以了).
因此为了避免画蛇添足,就省略了后面这一段.谁知....

另:寻找进程并kill掉的办法遍地都是,想必你也是高手,我就不多说了吧!
如果想知道我发现这里面关键问题的"心之旅程",再贴个帖子吧!(装出一付很"自慢"的样子)


 
to 温柔一刀:
非常惭愧啊 我竟然功亏一篑 因为没有想到查看进程 非常谢谢
非常愿意和你交朋友 !!!
我的运气是差了点 要不分就我自己得了 呵呵 开玩笑的

不过开始因为是我没有把问题说清楚 所以也不能够让人劳而无获
吧???所以我决定分配分如下,不足之处还请多多包涵:

lhxu 30分
FOOL 10分
yh 30分
xzg163 10分

温柔一刀 120分

TO ALL:
再次表示我的谢意 因为我的问题对我非常重要的 谢谢 以上各位

 
多人接受答案了。
 
这不公平,呜呜呜....(悲痛欲绝状)

你的问题一开始就很清楚,只是这些大虾小虾门都想挣点闲钱,
不看题就乱砍,根本应该扣他们的分数给我,现在本末倒置了,哈哈哈!!!!

顺便问一下,你好像为了这个问题才来这里,还是注册了新帐号?
因为看你的"经历",也应当出手不凡呀! :-)
 
to 温柔一刀:
我只能够对你说 对不起了 我没有办法 应该说都有责任的 所以SORRY
我是才出道的菜手啊 是从别的途径得到这里的消息的 应该说为了问题
和想当富翁吧 可惜现在我能力还不够 呵呵

出手不凡 是不敢当的 谢谢你了
希望以后还有机会哈 因为可能没有那么多的MONEY来泡网 毕竟才出道啊
MY EMAILS:topgpto@263.net 有空给我来信吧
 
后退
顶部