2009-12-20 34 views
5

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!).

Trả lời

4

Raymond Chen đã làm một bài viết toàn về chủ đề này rất trên blog của mình kiểm tra dragging a virtual file

+0

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

1

Tôi đã trả lời một loại câu hỏi tương tự như thế này trên chuỗi trước. Đây có thể là điểm khởi đầu cho bạn.

Drag and Drop link

+0

Cảm ơn, nhưng sẽ không có được để xử lý các phần thả và tạo ra một shortcut từ đó? Tôi đang tìm phần khác. Kiểu 'IWshShortcut' không được chấp nhận bởi Explorer, có vẻ như vậy, vì vậy tôi thậm chí không thể lưu shortcut của tôi dưới một tên tạm thời và chuyển nó sang phương thức' DoDragDrop() ', nhưng có lẽ tôi đang thiếu cái gì đó? – RedGlyph