调用dll给winform程序创建所有用户均可使用的快捷方式

由于工作需要,在给公司做的一款小软件在启动后需要在所有客户机器上创建快捷方式

以便用户使用.由于公司内部机器的多样性,有台式机有笔记本,并且公司有域控,台式机大部分

加入到域中,但并不是所有台式机均加入到域.因此每台电脑的环境就有很大差距,权限也有很

大的不同.所以安装当前软件就需要为每台机器的所有用户创建快捷方式.

一般情况下为用户创建应用程序快捷方式使用的方式为

System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory)

此种方式返回当前用户的桌面路径.经过几番查找并未发现.net平台提供获取本机All User用户桌面路径

的方法.因此没有办法只能借助与一些windows自带的dll来进行操作.

在此我使用的是shfolder.dll   此dll在百度百科中的解释是"shfolder.dll是Windows特殊文件夹相关服

务模块,例如我的文档。属于: Microsoft Windows "

代码如下:

 

        #region  说明
        
// CSIDL_COMMON_DESKTOPDIRECTORY、CSIDL_COMMON_STARTMENU、CSIDL_COMMON_STARTUP
        
// CSIDL_DESKTOPDIRECTORY、CSIDL_STARTMENU、CSIDL_STARTUP
        
// 上面分别为公共用户和当前用户的桌面、开始菜单、启动菜单的目录
        
// SHGetFolderPath方法根据参数"nFolder"不同值获取机器相应文件夹路径,值返回到参数"lpszPath"
         #endregion         

        [DllImport(
" shfolder.dll " , CharSet  =  CharSet.Auto)]
        
private   static   extern   int  SHGetFolderPath(IntPtr hwndOwner,  int  nFolder, IntPtr hToken,  int  dwFlags, StringBuilder lpszPath);
        
private   const   int  MAX_PATH  =   260 ;
        
private   const   int  CSIDL_COMMON_DESKTOPDIRECTORY  =   0x0019 ;
        
private   const   int  CSIDL_COMMON_STARTMENU  =   0x0017 ;

        

        
///   <summary>
        
///  获取本机All User桌面路径(C:\Documents and Settings\All Users\桌面)
        
///   </summary>
        
///   <returns></returns>
         public   static   string  GetAllUsersDesktopFolderPath()
        {
            StringBuilder sbPath 
=   new  StringBuilder(MAX_PATH);
            SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 
0 , sbPath);
            
return  sbPath.ToString();
        }

        
///   <summary>
        
///  获取本机All User开始程序路径(C:\Documents and Settings\All Users\「开始」菜单\程序)
        
///   </summary>
        
///   <returns></returns>
         public   static   string  GetAllUsersStartMenuPath()
        {
            StringBuilder sbPath 
=   new  StringBuilder(MAX_PATH);
            SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_STARTMENU, IntPtr.Zero, 
0 , sbPath);
            
return  sbPath.ToString();
        }


使用时直接调用相应方法GetAllUsersDesktopFolderPath()或 GetAllUsersStartMenuPath()

即可获得路径.

 

 

 

转载于:https://www.cnblogs.com/hanye/archive/2010/11/03/1867956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值