WM设备上本身就支持创建快捷方式,在菜单上选择“复制”,然后其他地方选择“粘贴快捷方式”皆可。 可有时我们需要为用户提供一种功能,让用户可以自己选择是否在开机时启动,这是就需要我们开发人员为其提供操作了。
当然,在.NET CF 上为WM创建快捷方式是件很容易的事情。这里提供两种方式:
方法一: 通过P/Inovke调用系统API - SHCreateShortcut或SHCreateShortcutEx
Code
DWORD WINAPI SHCreateShortcut(
LPTSTR szShortcut, // 快捷方式路径,非空
LPTSTR szTarget // 需要被创建快捷方式的路径,可以包括路径和参数
);
和
DWORD WINAPI SHCreateShortcutEx(
LPTSTR lpszDir, // 快捷方式路径,非空
LPTSTR lpszTarget, // 需要被创建快捷方式的路径,可以包括路径和参数
LPTSTR szShortcut, // 返回唯一快捷方式名, 如果不想返回设置为NULL
LPDWORD lpcbShortcut // 快捷方式允许的最大长度。如果快捷方式名小于该长度,则返回正确长度。如果不想返回则设置为NULL
);
BOOL SHCreateShortcutExample()
{
// Create a shortcut called myAppShortcut.lnk,
// that links to the target file in \Windows\Program Files, named myApp.exe.
// Place the shortcut in the folder \Windows.
return SHCreateShortcut(TEXT("\\Windows\\myAppShortcut.lnk"), TEXT("\\Windows\\Program Files\\myApp.exe"));
}
BOOL SHCreateShortcutExExample()
{
// Create a shortcut to the file \Windows\Program Files\myApp.exe
// in \Windows\myPath, with a maximum allowable shortcut name length of 64.
// If successful, myAppShortcut will contain the name of the shortcut.
DWORD maxLen = 64;
LPTSTR myAppShortcut = new TCHAR[maxLen + 1];
return SHCreateShortcutEx(TEXT("\\Windows\\MyPath"),
TEXT("\\Windows\\Program Files\\myApp.exe"),
myAppShortcut,
&maxLen);
}
.NET CF c#
调用
[DllImport("coredll.dll", EntryPoint = "SHCreateShortcut")]
private static extern bool SHCreateShortcut(string shortcut, string target);
private void Btn_CreateShortCut_Click(object sender, EventArgs e)
{
SHCreateShortcut(@"\Windows\StartUp\" + GetApplicationName() + ".lnk",
"\"" + GetApplicationFullName() + "\"");
}
方法二:
打开一个WM上的后缀名为.lnk的文件,查看其中的格式,如下:
{目标路径包含字符数}#"{目标路径和命令}"
48#"\Program Files\CreateShortCut\CreateShortCut.exe"
说明: 如果目标路径包含空格,则要用2个引号把路径包起来,当然推荐是在任何时候都是用2个引号把路径包含进来。您可以去掉引号试试!
我们可以按照该格式来定义自己的快捷方式函数:
Code
/// <summary>
/// 创建进程快捷方式
/// 说明: 需要注意该函数和系统提供API在target参数输入的不同。如果target中含有空格符,
/// 那么需要在路径外使用2个引号""将整个路径个包含。
/// </summary>
/// <param name="shortcut">快捷方式路径</param>
/// <param name="arguments">参数</param>
/// <param name="target">需要被创建快捷方式的文件</param>
/// <returns>true or false</returns>
public bool myCreateShortCut(string shortcut, string arguments, string target)
{
FileStream fs = null;
try
{
bool bQuoted = false;
target = target.Trim();
// 检查字符串中是否还有空格
if (target.IndexOf(' ') > -1)
bQuoted = true;
int len = target.Length;
string link = "";
// 有空格,则在路径前后添加引号
if (bQuoted)
link = "\"" + target + "\"";
// 判断参数是否为空
if (!string.IsNullOrEmpty(arguments))
{
link += (" " + arguments);
// 记得要加上路径和参数中间的空格
len += (arguments.Length + 1);
}
// 写入信息
fs = new FileStream(shortcut, FileMode.Create, FileAccess.Write,FileShare.ReadWrite);
if (File.Exists(shortcut))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(len.ToString() + "#" + link);
sw.Close();
fs.Close();
return true;
}
}
fs.Close();
return false;
}
catch
{
fs.Close();
return false;
}
}
// 调用,注意与方法一的不同
private void Btn_MyCreateShortCut_Click(object sender, EventArgs e)
{
myCreateShortCut(@"\Windows\StartUp\" + GetApplicationName() + ".lnk",
"",
GetApplicationFullName());
}
好了,所有工作完成!
如下截图
--------------------
例子下载:
--------------------------------------------------
李森 – listen
E-mail: lisencool@gmail.com
|
声明:
这里集中了在WinCE和Windows Mobile开发中的一些基本常识。我很乐意和大家分享,也希望大家提出意见,并给我投稿,我会第一时间替您发表并署上您的大名!
Announce:
Here collects general knowledge on WinCE and Windows mobile. I 'm very glad to share them with all friends, and also hope you can share your problems and opinions and contribute articles to me to share with others. I'll publish your articles and sign your name at the first time.
|