调用dll给winform程序创建所有用户均可使用的快捷方式
2010-11-03 13:02
1386 查看
由于工作需要,在给公司做的一款小软件在启动后需要在所有客户机器上创建快捷方式
以便用户使用.由于公司内部机器的多样性,有台式机有笔记本,并且公司有域控,台式机大部分
加入到域中,但并不是所有台式机均加入到域.因此每台电脑的环境就有很大差距,权限也有很
大的不同.所以安装当前软件就需要为每台机器的所有用户创建快捷方式.
一般情况下为用户创建应用程序快捷方式使用的方式为
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()
即可获得路径.
以便用户使用.由于公司内部机器的多样性,有台式机有笔记本,并且公司有域控,台式机大部分
加入到域中,但并不是所有台式机均加入到域.因此每台电脑的环境就有很大差距,权限也有很
大的不同.所以安装当前软件就需要为每台机器的所有用户创建快捷方式.
一般情况下为用户创建应用程序快捷方式使用的方式为
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()
即可获得路径.
相关文章推荐
- 使用Python调用工作目录下所有快捷方式
- c# winform程序调用托管dll(c#的dll),使用"添加引用"和动态加载dll
- 使用组策略为用户创建快捷方式
- excel使用技巧,激活Administrator用户方法, 创建"以管理员身份打开"的命令行快捷方式
- Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序
- 用masm32创建快捷方式--使用com的演示程序
- winform中为安装程序添加卸载的快捷方式
- VC 为程序创建快捷方式的详细讲解
- 3.COM使用实例——快捷方式创建和解析
- Winform 创建桌面快捷方式并开机启动
- 在 Ubuntu 11.10中,在桌面上创建快捷方式以将程序作为 root 运行
- VS2017 Winform调用dll程序打包
- Android程序创建桌面快捷方式
- 【转】C#调用C++的DLL搜集整理的所有数据类型转换方式
- Enterprise Library3.1 使用数据访问模块时,调用Microsoft.Practices.EnterpriseLibrary.Data报出源文件与当前应用程序不一致和创建dataconfiguration的配置节处理程序出错
- 使用命令行WScript和vbs创建快捷方式
- dojo使用Programmatic(程序)方式创建form组件没有lable属性的解决
- java实现软件程序开机自动启动和创建程序的桌面快捷方式源代码
- 批处理实现c/s程序部署,以及创建桌面快捷方式