Chủ Nhật, 24 tháng 1, 2010

// // Leave a Comment

Tạo shortcut C#

Việc tạo shortcut trong C# có vẻ khá phức tạp vì không được cung cấp sẵn trong các namespace cơ bản của .Net. Thay vào đó, bạn phải sử dụng một thành phần COM có tên là Windows Script Host Object bằng cách cho dự án của bạn tham chiếu đến tập tin wshom.ocx nằm trong thư mục system32 của Windows.

Để bắt đầu, trong Visual C# bạn hãy mở hộp thoại Add Reference…, chuyển sang thẻ COM, chọn dòng Windows Script Host và nhấn OK. Tiếp đến hãy thêm namespace này vào lớp chứa hàm tạo shortcut.


using IWshRuntimeLibrary;


Bây giờ chúng ta sẽ sử dụng các lớp trong namespace này để viết một hàm có chức năng tạo ra shortcut có các thuộc tính như: đường dẫn tập tin, mô tả, phím nóng, thư mục làm việc…


///
/// Tạo shortcut
///

/// Tập tin bạn muốn tạo shortcut
/// Đường dẫn đến tập tin shortcut bao gồm cả phần đuôi (.lnk)
/// Chuỗi mô tả shortcut
/// Tham số dòng lệnh
/// Chuỗi phím tắt cho shortcut, ví dụ "Ctrl+Alt+A"
/// Tham số phần "Start in" của shortcut
/// Đường dẫn đến icon cần gán cho shortcut
public static void CreateShortcut(string targetPath, string shortcutFile, string description,
string arguments, string hotKey, string workingDirectory, string iconLocation)
{
// Kiểm tra 2 tham số cần thiết của hàm
if (String.IsNullOrEmpty(targetPath))
throw new ArgumentNullException("targetPath");
if (String.IsNullOrEmpty(shortcutFile))
throw new ArgumentNullException("shortcutFile");

// Tạo một thể hiện của lớp WshShellClass
WshShellClass wshShell = new WshShellClass();

// Tạo đối tượng shortcut
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(shortcutFile);

// Gán các thuộc tính cho shortcut
shortcut.TargetPath = targetPath;
shortcut.Description = description;

if (!String.IsNullOrEmpty(arguments))
shortcut.Arguments = arguments;
if (!String.IsNullOrEmpty(hotKey))
shortcut.Hotkey = hotKey;
if (!String.IsNullOrEmpty(workingDirectory))
shortcut.WorkingDirectory = workingDirectory;
if (!String.IsNullOrEmpty(iconLocation))
shortcut.IconLocation = iconLocation;

// Lưu shortcut
shortcut.Save();
}

Trong đoạn mã trên, một thể hiện của lớp WshShellClass sẽ gọi phương thức CreateShortcut(string PathLink), tham số PathLink là chuỗi chứa đường dẫn tập tin shortcut cần tạo. Phương thức này sau khi thực thi sẽ trả về một đối tượng kiểu object, ta cần ép kiểu nó sang IWshShortcut sau đó gán các thuộc tính cho shortcut vừa tạo như đoạn mã trên.


shortcut.TargetPath = targetPath;
shortcut.Description = description;

if (!String.IsNullOrEmpty(arguments))
shortcut.Arguments = arguments;
if (!String.IsNullOrEmpty(hotKey))
shortcut.Hotkey = hotKey;
if (!String.IsNullOrEmpty(workingDirectory))
shortcut.WorkingDirectory = workingDirectory;
if (!String.IsNullOrEmpty(iconLocation))
shortcut.IconLocation = iconLocation;

Nếu thuộc tính iconLocation không được gán cho shortcut thì biểu tượng của shortcut sẽ là biểu tượng của tập tin nguồn.

Ta đã hoàn thành hàm để tạo ra một shortcut với các thuộc tính căn bản. Để sử dụng nó trong chương trình, bạn có thể làm như ví dụ sau. Nhớ rằng hàm của chúng ta có ném ra một vài ngoại lệ nên hãy cẩn thận dùng khối try catch để bao lại. Ở ví dụ này ta sẽ tạo một shortcut ngoài Desktop có tên là Foxit Reader:


try
{
CreateShortcut(@"C:\Foxit Reader.exe", Environment.GetFolderPath(Environment.SpecialFolder.Desktop
) + "\\Foxit Reader.lnk",
"Foxit Reader", null, "Ctrl+Shift+F", @"C:\","D:\\favorite.ico");
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
}


Bạn có thể dùng hàm này để tạo shortcut cho ứng dụng của mình trên Desktop hoặc Startmenu.
Chúc thành công!

0 comments: