Tôi có ứng dụng C# tạo lối tắt để khởi chạy các chương trình khác với các đối số và thư mục ban đầu cụ thể. Tôi muốn người dùng có thể kéo một phím tắt từ biểu mẫu Windows và thả nó ở bất kỳ đâu có liên quan như màn hình, menu bắt đầu, v.v .. nhưng tôi thực sự không biết cách xử lý điều đó, bất cứ ai có thể chỉ cho tôi trong đúng hướng?Kéo và thả phím tắt được tạo động
Tôi đã thấy một vài mẫu sử dụng PInvoke và IShellLink như this one hoặc đọc câu trả lời trên SO như here, đã giúp tạo phím tắt và lưu chúng trong tệp .lnk. Tôi giả sử tôi phải bàn giao dữ liệu trong một cuộc gọi DoDragDrop()
khi người dùng bắt đầu một thao tác kéo, ví dụ bằng cách xử lý tín hiệu MouseDown
. Đó là như xa như tôi đã nhận, tôi cho rằng tôi cần phải biết chính xác loại mục tiêu mong đợi để chấp nhận thả, và làm thế nào để serialize các phím tắt, nhưng không thể tìm thấy bất kỳ thông tin về phần đó.
Có lẽ một tùy chọn khác là lấy vị trí thả và quản lý từ ứng dụng của tôi, nhưng lại có một chút không biết gì về cách thực hiện điều đó.
Phiên bản khung hiện tại là 3.5 và tôi chỉ xem xét các nền tảng Windows.
Cảm ơn trước sự giúp đỡ của bạn!
Cập nhật/Giải pháp:
Sử dụng ShellLink code nêu trên để tạo ra một tập tin shortcut tạm thời, tôi chỉ đơn giản là sử dụng DataObject
cho kéo và thả, như trong ví dụ sau:
private void picShortcut_MouseDown(object sender, MouseEventArgs e)
{
ShellLink link = new ShellLink();
// Creates the shortcut:
link.Target = txtTarget.Text;
link.Arguments = txtArguments.Text;
link.Description = txtDescription.Text;
link.IconPath = txtIconFile.Text;
link.IconIndex = (txtIconIndex.Text.Length > 0 ?
System.Int32.Parse(txtIconIndex.Text) : 0);
link.Save("tmp.lnk");
// Starts the drag-and-drop operation:
DataObject shortcut = new DataObject();
StringCollection files = new StringCollection();
files.Add(Path.GetFullPath("tmp.lnk"));
shortcut.SetFileDropList(files);
picShortcut.DoDragDrop(shortcut, DragDropEffects.Copy);
}
Khá phức tạp nếu bạn xem xét mã PInvoke (không được hiển thị ở đây), và tôi vẫn cần phải tạo tệp tạm thời này với tên mục tiêu. Nếu có ai biết ... erm, phím tắt, nó được chào đón! Có lẽ bằng cách chuyển mã mà John Knoeller đã cung cấp liên kết (cảm ơn!).
Bài viết thú vị. Nó đề cập đến giao diện IDataObject, sau khi tự tìm kiếm một chút, tôi đã tìm cách kéo và thả phím tắt từ một tệp tạm thời, mà tôi phải tạo ra. – RedGlyph