Làm cách nào tôi có thể tạo một mục trình đơn ngữ cảnh shell có nhiều tệp làm đối số?


10

Tạo một mục menu ngữ cảnh Windows Shell lấy một tệp làm đối số là dễ dàng. Xem câu hỏi này cho một ví dụ.

Tuy nhiên, làm thế nào để bạn tạo một mục menu ngữ cảnh lấy nhiều tệp làm đối số? Nói, đối với một công cụ hợp nhất khác (trong trường hợp của tôi là P4Merge), mặc dù kỹ thuật tương tự cũng không nghi ngờ gì sẽ được áp dụng cho các ứng dụng khác.

Tôi đã cài đặt P4Merge nhưng nó không tự động thêm một mục vào menu ngữ cảnh nên tôi sẽ phải thực hiện thủ công.

Khi tôi thử sử dụng:

"C:\Program Files\Perforce\p4merge.exe" %1 %2

như dòng lệnh tôi gặp lỗi:

Lỗi: Ít nhất hai tệp là cần thiết. Không thể chỉ mở một tệp. P4Merge cần 0, 2 hoặc 3 tệp.

Khi tôi thử sử dụng:

"C:\Program Files\Perforce\p4merge.exe" %0 %1

là dòng lệnh, nó đã mở hai phiên bản của P4Merge, một phiên bản cho mỗi tệp.

Có vẻ như tên tệp chính xác đang được chuyển qua% 0 và% 1 nhưng một phiên bản khác của ứng dụng P4Merge đang được thực thi cho mỗi cái.

Tôi hiện có công cụ DiffMerge của SourceGear có một mục trên menu ngữ cảnh Shell và hoạt động rất đẹp, vì tôi có thể chọn hai tệp và sử dụng mục menu ngữ cảnh để chạy khác biệt trên chúng. Tôi đã thử tìm kiếm sổ đăng ký để xem DiffMerge sử dụng đối số nào nhưng tôi không thể tìm thấy dòng lệnh DiffMerge bao gồm các đối số.


2
Như bạn đã tìm ra, không có cách nào để làm những gì bạn muốn với một bản hack registry đơn giản. Chỉ có% 1 vì tiện ích mở rộng chỉ áp dụng cho một đối tượng và được thực thi riêng cho nhiều đối tượng. Nó yêu cầu lập trình một phần mở rộng shell đầy đủ. Tuy nhiên, có một số chương trình / tiện ích mở rộng cho phép bạn thực hiện một số công cụ trình đơn ngữ cảnh nâng cao hơn so với việc hack registry sẽ cho phép. (Điều duy nhất tôi có thể nhớ là MMM .) Thật không may, tôi nghĩ rằng chúng có xu hướng bị giới hạn trong việc cho phép bạn tạo các menu con thay vì cho phép bỏ nhiều đối tượng.
Synetech

Câu trả lời:


19

Bạn cũng có thể thử thêm chương trình vào menu SendTo.


Yup, hoạt động độc đáo.
Synetech

1
Làm việc hoàn hảo. Dưới đây là hướng dẫn cách thêm ứng dụng vào menu SendTo trong Windows 7. Không cần thêm bất kỳ tham số dòng lệnh nào, chỉ cần bỏ phím tắt ứng dụng vào thư mục% APPDATA% \ Microsoft \ Windows \ SendTo. Quay lại Windows Explorer, chọn hai tệp sau đó nhấp chuột phải và chọn Gửi đến> P4Merge đã thực hiện một khác biệt trên các tệp đã chọn.
SimonTewsi

3

Duyệt tìm câu trả lời có vẻ như không có sửa chữa đơn giản và cần có một phần mở rộng shell. Nhìn lại các mục đăng ký cho DiffMerge, có vẻ như sử dụng tiện ích mở rộng shell: DiffMergeShellExtension64.dll. Nếu P4Merge không có phần mở rộng shell như vậy thì có vẻ như cách duy nhất tôi có thể khiến nó hoạt động chính xác trong menu ngữ cảnh Windows Explorer sẽ là tự viết một cái.

Loạt bài Hướng dẫn hoàn chỉnh về cách viết phần mở rộng Shell trong Dự án mã là một hướng dẫn hữu ích để viết phần mở rộng trình bao. Phần II của loạt bài nói về việc viết một phần mở rộng xử lý nhiều tệp cùng một lúc (chính xác là những gì tôi cần).

Cảnh báo: Hướng dẫn hoàn chỉnh của Idiot về phần mở rộng Shell sử dụng C và COM, ATL (Thư viện mẫu hoạt động) và MFC (Microsoft Foundation Classes). Vì vậy, viết một phần mở rộng shell, nếu bạn không quen thuộc với các công nghệ đó, sẽ là một quá trình lâu dài và có khả năng khó khăn; nó chắc chắn không phải là thứ bạn có thể làm trong một giờ.


2

Bạn có thể làm điều đó với trình khởi chạy trình đơn ngữ cảnh chương trình của tôi (trình đơn) :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge]
"MultiSelectModel"="Player"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command]
@="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"

Vui lòng không liên kết trực tiếp đến .execác tệp trong câu trả lời của bạn mà không làm rõ rằng quá trình tải xuống tự động sẽ bắt đầu.
DavidPostill

Hoạt động như một lá bùa, cảm ơn. Có cách nào để liên kết ứng dụng đơn với bất kỳ loại tệp nào mà không cần thêm nó vào các liên kết tệp cho từng loại tệp riêng lẻ không? Ví dụ: tôi hiện đang sử dụng DiffMerge để so sánh những thứ như tệp XML, tập lệnh SQL, tệp cấu hình, tệp * .cs, tệp .gitignore, cộng với các tệp khác.
SimonTewsi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.