社区
网络编程
帖子详情
如何在程序中调用拨号连接的快捷方式?用ShellExecute函数不行啊
unicode
2004-07-05 02:22:42
rt
...全文
279
5
打赏
收藏
如何在程序中调用拨号连接的快捷方式?用ShellExecute函数不行啊
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bohut
2004-07-05
打赏
举报
回复
也许你是想要调用拨号程序的exe吧,你可以找一下exe,而不是快捷方式,下面是一篇用程序实现拨号的文章,你可以看看:
VC++实现拨号上网程序
大家知道,在Netants、DownLoad Expert等软件中都带有定时拨号上网下载软件的功能。而一般用户的拨号上网,利用的是Windows的Remote Access Service(RAS,远程访问服务)。下面介绍一下其在Visual C++下的实现。
Visual C++为我们提供了包含RAS API声明的“ras.h″头文件。要在程序中实现拨号上网功能,其大致过程如下:
1. 利用Modem拨号进行连接,应使用RasDial函数。
其声明如下:
DWORD Ras Dial(LPRASDIALEXTENSIONS lpRas DialExtensions,LPCTSTR lpszPhonebook,LPRASDIALPARAMS lp Ras DialParams,DWORD dw Notifier Type,LPVOID lpv Notifier,
LPHRASCONN lph Ras Conn )
参数说明:
lpRasDialExtensions和lpszPhonebook:仅在Windows NT下有效,在Windows 95下,这两个参数被忽略。
lpRasDialParams:这个参数很重要,它指向一个RASDIALPARAMS结构,该结构包含以下几个成员:
dwSize:应设定为sizeof(RASDIALPARAMS);
szEntryName和szPhoneNumber:这两个参数有联系,szEntryName可以指定要建立的连接,比方说“我的连接”等等,这是处理用户已经在“拨号网络”里建立的连接的。这时,Modem将拨打你在“我的连接”中设定的ISP号码,此时szPhoneNumber成员设为空字符串“”即可;如果你要在程序中自行指定要拨打的ISP号码的话,szEntryName可以设定为空字符串“”,此时应设置szPhoneNumber为你的ISP号码(169,663等),特别的,对于用201电话卡来上网的情况,可以设为“201,,,账号,密码#,,ISP号码#”(其中“,”表示停顿一段时间(以等待确认账号,密码等),你可以根据自己所在位置的线路状况自行调节。
SzCallBackNumber,szDomain:设为空串“”即可。
SzUserName,szPassword:登录用户名和密码。如169公用账号guest,guest。
其他成员不必设置。
DwNotifierType:指定是由窗口还是由回调函数来处理确认消息。通过确认消息我们可以得到RasDial过程的当前状态。如“正在打开段口”,“正在验证用户名和密码”等。也可设为NULL。
dwNotifier:指定处理确认消息的窗口或回调函数。也可设为NULL。
LphRasConn:指向一个类型为HRASCONN的变量。在调用RasDial前必须指定为NULL,RasDial若成功返回,则将RAS连接的句柄存放于它所指向的变量中。我们也可以通过此句柄来断开连接。
只要在程序中适当位置调用RasDial函数即可建立连接。
2. 理确认消息以得到拨号过程的当前状态。
我们以指定窗口来处理确认消息为例说明如何得到拨号过程的当前状态。
在处理确认消息的对话框类(或视图类等)的实现代码中加入:
const UINT WM_RASEVENT = ::RegisterWindowMessageA(RASDIALEVENT);
在Message Map中手工加入消息映射:(****是你定义的对话框类名称)
BEGIN_MESSAGE_MAP(****, CDialog)
//AFX_MSG_MAP(****)
……
ON_REGISTERED_MESSAGE(WM_RASEVENT, OnRasDialEvent)(<-加入此句)
//AFX_MSG_MAP
END_MESSAGE_MAP()
加入成员函数处理消息:
LRESULT CDialInfo::OnRasDialEvent(WPARAM wp, LPARAM lp)
{
RASCONNSTATE rasstate= (RASCONNSTATE)wp;
CListBox *info =(CListBox *)GetDlgItem(IDC_INFOLIST);
//用ListBox 控件(ID为IDC-INFOLIST)来显示状态)
switch(rasstate)
{
case RASCS_OpenPort:
info→AddString(_T(″打开端口……″));
break;
case RASCS_PortOpened:
info→AddString(_T(″端口已打开.″));
break;
case RASCS_ConnectDevice:
info→AddString(_T(″连接设备……″));
break;
case RASCS_DeviceConnected:
info→AddString(_T(″设备已连接.″));
break;
case RASCS_Authenticate:
info→AddString(_T(″验证用户及密码″));
break;
case RASCS_Authenticated:
info→AddString(_T(″通过″));
break;
case RASCS_Connected:
info->AddString(_T(″已连接″));
reak;
case RASCS_Disconnected:
info->AddString(_T(″连接已断开″));
m_hRasConn=NULL;
//可定义类型为HRASCONN的成员变量m_hRasConn来保存RAS连接的句柄。
//在调用RasDial时用指向m_hRasConn的指针作为lphRasConn参数。
//既然用m_hRasConn来保存连接句柄,连接断开后应重置为NULL.
break;
default:
return (LRESULT)0;
}
return (LRESULT)0;
}
3. 断开连接:
if (m_hRasConn != NULL)
{
RasHangUp(m_hRasConn);
m_hRasConn = NULL;
m_OnDial=TRUE;
:Sleep(2000);
}
注意 :
你也许注意到了以上代码中的Sleep函数,这里是必需的。需要一定时间来断开连接。如果不等待一段时间,计算机有可能无法正常关闭端口。导致下一次无法拨号,只有重新启动Windows才能解决。要预防此问题也可以调用RasGetConnectStatus函数,方法如下:
RASCONNSTATUS rStatus;
while(RasGetConnectStatus(m_hRasConn,&rStatus)!=ERROR_INVALID_HANDLE)
{
::Sleep(0);
}
4.在以下情况下:
① 浏览网页时有时会出现停止响应,重启explorer后任务栏上的连接状态图标也许会消失。
② 希望在连接成功后,退出程序,再次执行此程序可选择断开连接。
可以调用RasEnumConnection函数来得到当前连接的句柄。
举例如下:
HRASCONN hRasConnect;DWORD dwBuffferSize, dwNumofConnections;//缓冲区大小,连接数
LPRASCONN lpRasConn;
lpRasConn = new RASCONN[3】;//最多可得到3个连接句柄,客户端程序其实不必设为3,因连接数有限,大部分仅一个连接。
lpRasConn[0】.dwSize = sizeof(RASCONN);
dwBuffferSize = 32* sizeof(RASCONN);//求出由3个RASCONN结构构成的缓冲区大小
RasEnumConnections(lpRas Conn, &dw Buffer Size, &dw Numof Connections);//此函数若成功则返回零。
for(DWORD i=0; i {
hRasConnect = lpRasConn[i】.hrasconn;//RASCONN结构的hrasconn成员为RAS连接句柄
RasHangUp(hRasConnect);
::Sleep(2000);
}
delete []lpRasConn;
在Windows 98,Visual C++ 6.0下调试通过。
这样,一个实现基本拨号上网功能的程序就完成了。如果你要了解更多有关情况或服务器端程序设计,可以参考MSDN→Platform SDK→Networking and Distributed Services→Remote Access Service的有关内容
unicode
2004-07-05
打赏
举报
回复
因为拨号连接的默认操作是“连接”,而ShellExecute里面没有这个命令参数,所以~~~~~~
zoid
2004-07-05
打赏
举报
回复
用com接口IShellLink可以得到快捷方式的真正指向,
不过不知道还有更简单的办法没有???
unicode
2004-07-05
打赏
举报
回复
楼上的,我不是这个意思啊
gracezhu
2004-07-05
打赏
举报
回复
get phone entry book,call RasDial,RasPhonebookDlg,Ras API
MyFll Microsoft Visual FoxPro设计的扩展库
CreateShortcut 创建
快捷方式
GetIcon 释放exe或dll
中
的图标 其它: SetVFPEvents 设置MYFLL内部
函数
回调功能 SetDateTime 设置Windows系统时间 ChangEres 更改屏幕的分辨率 idleLoad 开始加载空闲检测 ...
VFP
调用
WIN32API之路,让你的软件更强大
猫猫用WSOCK32.DLL实现了MQTT协议的发送,其实在TCP/IP上面的所有协议都有完整的文档,你都可以去实现了。到了无人区,很多地方都... 要达到这样的目的, 需要使用包含在Windows
中
的一个 DLL, 也就是所谓的 WSOCK3...
转 Windows API
函数
在VFP
中
的运用
VFP
中
常用WIN32API
函数
调用
事例 我们在VFP编程时,为了弥补VFP本身功能的不足,常常会用到WIN32API
函数
来对VFP的功能行扩展,例如取得系统信息、对注册表进行操作等,但是由于 WIN32API
函数
是C++的...
通过
调用
rundll32.exe来打开一些系统特定文件
顾名思义,rundll32就是"执行32位的dll文件",也就是执行dll文件
中
的内部
函数
,可以以命令行的形式
调用
windows32位的动态链接库。 同理,rundll.exe就是"执行16位的dll文件",
调用
的是16位的动态链接库。我们通过...
打开方式对话框 及 RUNDLL32(RUNDLL)的使用
在VC
中
调用
“打开方式...”(OPEN WITH...)...如果执行
Shell
Execute
函数
打开文件时,文件没有指定相应的打开方式,则可以使用如下
函数
调用
“打开方式...”对话框。 其
中
strName是文件名,pszFolder是路径. i
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章