Microsoft  CSIP   WindowsMobile   MEDC   合作伙伴   体验中心 设为首页 加到收藏夹

 
登录       点击换一张     注册新用户 找回密码

.Net CF实现托管代码在SP上创建快捷方式
2008年10月13日10:00   编辑:黄季冬 来源: 浏览: 143

摘要  
  以前我们经常是同步后在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
            {
                //别忘了关

12末页下一页

发表评论
评论标题 :
评论内容 :

    查看评论

请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。 本站拥有管理笔名和留言的一切权利。
相关文章推荐
· Windows Mobile程序员玩转Android开发 2008-10-13  马宁
· Compact Framework 2008-7-21  Chris Tacke
· .Net CF中电话状态的捕获(Part 1) 2008-5-6  黄季冬
· 在.NET Compact Framework中获取来电号码和屏蔽来电 2008-5-6  黄季东
· Windows Mobile如何编程实现免提功能 2008-5-6  黄季东

  

论坛推荐  
热点活动
更多»

© CSIP 信息产业部软件与集成电路促进中心 All Rights Reserved 版权所有 京ICP备06020771号
联系电话:010-63951881-8003 王先生        邮件:wangj@csip.org.cn