关于如何创建快捷方式,很多资料都已经说明了。可是快捷方式不仅仅只有文件快捷方式这一种,还有很多其他种类。
如果我们在网络和拨号连接中创建了一个拨号连接,按下右键,选择创建快捷方式,如果在桌面的这个快捷方式上按下右键,此时出现的菜单明显和普通的不一样,并且它的属性也是不一样的。
如果在程序中创建这种快捷方式呢?网上的资料很少,经过搜索,在微软的站点
http://support.microsoft.com/default.aspx?scid=KB;en-us;q153750上找到了一个例子DialUp.exe,大家可以下载看看。
以下我说说我在实现中的一些经验体会。(WIN2000下调试)
mk:@MSITStore:H:msdnMSDNShellcc.chm::/inet401/help/itt/Shell/Shortcut.htm
必须获得该对象的IDL,然后调用IShellLink::SetIDList后完成。
2.自己创建的拨号连接,我们没有办法直接获得它的IDL,必须先打开拨号和网络连接,然后枚举里面的连接,当比较连接的名称一致的时候,我们再获得该连接的IDL。代码中的GetDialUpItem 函数就是实现这个功能。然后再SetIDList正常的创建快捷方式就可以了。
3.GetDialUpItem 函数中调用了一个GetDialUpNetworkingPidl函数,该函数用来获得“网络和拨号连接”的IDL,在这里“网络和拨号连接”是通过一串GUID数字表示的的,代码里面是WIN98的GUID,WIN2000下大家可以通过点击开始按钮-附件-通讯-网络和拨号连接,然后按下右键查看属性就可以看到目标对应的一串数字了,用这串数字替代原有的才能正常访问WIN2000下的拨号连接。
4.作为COM编程,应该调用CoInitialize(NULL);函数进行初始化,而代码中放在了调用GetDialUpItem 函数之后,结果会导致程序失败,应该将其放在GetDialUpItem函数之前。
5.调用代码中的函数完成创建快捷方式后,会发生程序无法正常退出的情况,这时对话框已经关闭了,但是在任务管理器中仍然可以看到该进程。需要在程序最后调用CoUninitialize函数关闭COM接口以及释放加载的DLL。
以上是本人在WIN2000下调试这个示例程序一些经验体会,请大家参考。