[CF.Skills]托管代码在SmartPhone上创建快捷方式

摘要   以前我们经常是同步后在PC机上Copy程序并选择”粘贴快捷方式”,在Smartphone上添加快捷菜单,本文介绍了另外一种通过编程在Smartphone上创建快捷方式的方案。
Keywords   Smartphone,Shortcut,windows mobile,.NET Compact Framework,C#

尽管可以在制作CAB安装文件的工程中,通过强大的VS,简单的点击两下鼠标就能给安装文件添加快捷方式,但是有时候我们也需要在自己程序中实现这个功能,比如我们希望我们的程序是不需安装但是又要有快捷方式以方便用户操作。
在Pocket PC上面要Copy一个快捷菜单是很easy的。只需再文件浏览器中选中你的文件并长按,菜单中选择Copy(复制):

然后到你要粘贴的文件夹,选择Paste Shortcut(粘贴快捷方式)即可:

但是Smartphones上却没有Paste Shortcut(粘贴快捷方式)这个选项。这时候创建快捷方式是有点麻烦的。用户通常只有同步到电脑之后,再在PC上对Smartohone上的文件进行相关的复制粘贴操作。

在C++中,我们可以使用

BOOL SHCreateShortcut (LPTSTR szShortcut, LPTSTR szTarget);

或者

DWORD SHCreateShortcutEx (LPTSTR lpszDir, LPTSTR lpszTarget, LPTSTR szShortcut, LPDWORD lpcbShortcut);

来实现这样的功能,当然,你完全可以在托管代码中通过p/invoke来调用这两个函数,例如:

SHCreateShortcut(@"\Windows\StartUp\" + 
Path.GetFileNameWithoutExtension(applicationPath) + ".lnk", "\"" + 
applicationPath + "\""); 
 
[DllImport("coredll.dll", EntryPoint="SHCreateShortcut") ] 
private static extern bool SHCreateShortcut(string shortcut, string target); 

但是我们希望完全以C#实现的方式来做得更优雅,同时可以省略掉P/invoke的开销。

事实上,在Windows CE和Windows Mobile中快捷方式文件本身是一个很简单的纯字符文本的文件。如果你用记事本打开那些CE-Based的系统中(如Smartphone)上的一个快捷方式(.ink文件),你看到的将是类似下面所示的文本内容:

26#"\Windows\BubbleBreaker.exe”

其基本结构如下:

{目标路径命令包含的字符数}#"{目标路径命令}".

Tips这里所说的目标路径命令包含的字符数不包括引号在内,尽管和Windows Shell类似,在路径不包括空格的时候可以省略引号,但是习惯上还是建议始终使用引号

注意这里的目标路径命令很可能是带参数的,你需要用空格把参数和路径隔开,如果有N个参数,那么这N和参数都应当是用空格隔开的,这也是习惯用引号把路径引起来的原因。比如:

61#"\Program Files\Windows Media Player\wmplayer.exe" \fullscreen

表示指向的路径是“\Program Files\Windows Media Player\wmplayer.exe”,传递了一个参数“\fullscreen”

有了上述对快捷方式文件结构的理解,我们可以轻松的创建自己的快捷方式了:

       StreamWriter sw;
        FileStream fs;
        /**//// <summary>
        /// 创建快捷方式
        /// </summary>
        /// <param name="destination">快捷方式的目标</param>
        /// <param name="shortCut">快捷方式的名字</param>
        /// <param name="parameters">快捷方式参数</param>
        /// <returns>创建成功返回true</returns>
        private bool CreateShortCut(string destination, string shortCut, string parameters)
        {
            try
            {
                bool isQuoted = false;
                //检查目标路径中是否含有空格    
                destination = destination.Trim();
                if (destination.IndexOf(' ') > -1)
                    isQuoted = true;
                string link = destination;
                int len = destination.Length;
                if (isQuoted)
                    link = "\"" + link + "\"";
                if (!String.IsNullOrEmpty(parameters))
                {
                    //有参数则加上参数长度和与路径间的空格
                    len += parameters.Length + 1;
                    link += " " + parameters;
                }


                //打开文件流写入上述信息
                 fs = new FileStream(shortCut,
                    FileMode.Create,
                            FileAccess.Write,
                            FileShare.ReadWrite);
                 sw = new StreamWriter(fs);
                sw.WriteLine(len.ToString() + "#" + link);
            }
            catch { }
            finally
            {
                //别忘了关闭资源
                sw.Close();
                fs.Close();
            }
            return true;
        }

现在我们用它在开始菜单创建一个快捷方式:

            CreateShortCut(@"\Storage Card\ShortCut_SP.exe", @"\Windows\Start Menu\MyApp.lnk", "");

PS:这里我事先已经将模拟器的储存卡目录配置为程序输出目录

程序运行效果如下:

点击"Creat",创建快捷方式

然后我们可以在开始菜单中找到它了:Start-->All programs-->More

效果达到了,没有安装包,没有P/invoke,同样能在Smartphone上面创建自己的快捷方式
完整的代码在此处下载

Enjoy!

©Freesc Huang
  黄季冬<fox23>@HUST
   2008/4/15

[CF.Skills]托管代码在Smartphone上创建快捷方式相关推荐

  1. linux如何创建快捷,如何在Linux的桌面上创建快捷方式或启动器

    如果在Linux桌面系统中你经常使用一个程序,你可能想去创建一个"桌面快捷方式",以便于你在桌面只要点击一下快捷方式就可以启动它.虽然不少带有图形界面的程序会在安装时自动在桌面上创 ...

  2. 如何在Linux桌面上创建快捷方式?

    以下内容源于网络资源的学习与整理,如有侵权请告知删除. 一般而言,Linux环境下在命令行上通过软件包管理工具安装软件,或者从网站直接下载已经编译好的二进制软件包,软件安装好之后不会在桌面上创建快捷方 ...

  3. .NET CF WM上创建快捷方式

    WM设备上本身就支持创建快捷方式,在菜单上选择"复制",然后其他地方选择"粘贴快捷方式"皆可. 可有时我们需要为用户提供一种功能,让用户可以自己选择是否在开机时 ...

  4. 用批处理在桌面上创建快捷方式

    echo. 正在创建快捷方式... set desktop= :: 桌面路径 call :__CreateDesktopPath:: 快捷方式一 call :__StringCat %desktop% ...

  5. android 屏幕快捷键是什么,Android在主屏幕上创建快捷方式

    wzbozon.. 8 我在上面改进了一点解决方案.现在,它会保存首选项是否已添加快捷方式,如果用户将其删除,则不会在应用程序的新启动中添加快捷方式.这也节省了一点时间,因为添加现有快捷方式的代码不再 ...

  6. linux桌面创建快捷方式

    1使用命令行创建桌面快捷方式 要为特定程序或命令创建桌面快捷方式,你可以使用任意文本编辑器创建一个.desktop文件,然后把它放到/usr/share/applications或者~/.local/ ...

  7. [No000004]在WIN7/8任务栏创建快捷方式

    在XP时代,有一个快速启动栏,创建快捷方式只需要把快捷方式放在"%AppData%\Roaming\Microsoft\Internet Explorer\Quick Launch" ...

  8. 如何在桌面或者开始菜单中创建快捷方式

    //在桌面或者开始菜单中创建快捷方式 //pazSrcPath:源文件路径 //bDesktop:标志位,用来判断是否在桌面上创建快捷方式,真,在桌面上创建,否则在开始菜单中创建 bool creat ...

  9. 如何获取在桌面创建快捷方式的权限

    要在桌面上创建快捷方式,您需要有系统管理员的权限.如果您是系统管理员,则可以直接在桌面上创建快捷方式.如果您不是系统管理员,则需要向系统管理员索取权限. 您也可以尝试使用第三方应用程序来创建桌面快捷方 ...

最新文章

  1. python打开文件_python如何学习
  2. python笔记:Gurobipy
  3. centenos安装mysql,Cento7 安装mycat和mycat-eye
  4. ubuntu14.04 设置静态ip
  5. 【Python】@staticmethod和@classmethod的作用与区别
  6. uva 11916 Emoogle Grid (BSGS)
  7. CF621E Wet Shark and Blocks
  8. FreeBSD使用网易镜像来安装软件
  9. 英雄联盟服务器维修中启动游戏失败,电脑登录英雄联盟失败的八种解决方法
  10. R语言 Kmeans聚类、PAM聚类、层次聚类、EM聚类
  11. 写给大一充实,大二不顺,大三迷茫的同学
  12. codeforces 869E The Untended Antiquity
  13. 中文文本纠错算法走到多远了?
  14. extjs的简单使用
  15. 解决 Idea 下 Tomcat 乱码(淇℃伅璀﹀憡)问题
  16. 新型AI助理BAYOU或将成为无代码编程的救星
  17. 终端EMC测试以及测试标准
  18. TVS管和ESD管的技术指标和选型指南-嘉立创推荐
  19. Zotero 6插件兼容设置 Quicklook插件安装
  20. 救命!李宁也要进军地产

热门文章

  1. 魔术的魅力就在于神秘,不要探求,甚至不要思考怎么回事,你会失去乐趣!
  2. 富世华推出基于人工智能的全轮驱动机器人割草机
  3. ArcGIS 区域统计分析(一)
  4. 丑拒or真香?iPhone 11终于发布了!一文看懂苹果发布会
  5. Linux设备驱动和设备匹配过程
  6. Windows io完成端口
  7. Access基础教程--第八章 使用VBA编程
  8. 3P决定三流,三流归一是库存
  9. Magisk全自动修补一键ROOT 刷入面具 LSP
  10. 微信小程序自定义导航栏机型适配--底部Tabbar--view高度--底部按钮适配