Birden çok dosyayı bağımsız değişken olarak alan bir kabuk bağlamı menü öğesini nasıl oluşturabilirim?


11

Tek bir dosyayı bağımsız değişken olarak alan bir Windows Kabuğu bağlam menüsü öğesi oluşturmak kolaydır. Bir örnek için bu soruya bakın .

Ancak, birden çok dosyayı bağımsız değişken olarak alan bir bağlam menüsü öğesini nasıl oluşturursunuz? Diyelim ki, bir birleştirme aracı için (benim durumumda P4Merge), aynı teknik şüphesiz diğer uygulamalar için de geçerli olacaktır.

Ben P4Merge yükledim ama otomatik olarak bağlam menüsüne bir öğe eklemez, bu yüzden elle yapmak zorunda kalacak.

Kullanmayı denediğimde:

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

komut satırı olarak bir hata aldım:

Hatalar: En az iki dosya gereklidir. Yalnızca bir dosya açılamıyor. P4Merge için 0, 2 veya 3 dosya gerekir.

Kullanmayı denediğimde:

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

komut satırı olarak her dosya için bir tane olmak üzere iki P4Merge örneği açtı.

Doğru dosya adlarının% 0 ve% 1'e geçirildiği anlaşılıyor, ancak her biri için farklı bir P4Merge uygulaması örneği yürütülüyor.

Şu anda iki dosya seçmek ve onlara bir fark çalıştırmak için bağlam menü öğesini kullanabildiğim gibi Shell bağlam menüsünde bir öğe olan ve güzel çalışan SourceGear'ın DiffMerge aracı var. DiffMerge hangi argümanları kullanır görmek için kayıt defterini aramaya çalışıyorum ama argümanlar içeren bir DiffMerge komut satırı bulamadık.


3
Bildiğiniz gibi, basit bir kayıt defteri kesmek ile istediğinizi yapmanın bir yolu yoktur. Yalnızca% 1 var çünkü uzantı yalnızca bir nesneye uygulanır ve birden çok nesne için ayrı olarak yürütülür. Tam bir kabuk uzantısının programlanmasını gerektirir. Ancak bazı programlar / kabuk uzantıları bir kayıt defteri kesmek izin vereceğinden daha gelişmiş bağlam-menü şeyler yapmanızı sağlar. (Hatırlayabildiğim tek şey MMM .) Ne yazık ki, birden fazla nesnenin bırakılmasına izin vermek yerine alt menüler oluşturmanıza izin verme eğiliminde olduklarını düşünüyorum.
Temmuz'da Synetech

Yanıtlar:


20

Programı SendTo menüsüne eklemeyi de deneyebilirsiniz.


Evet, güzel çalışıyor.
Temmuz'da Synetech

1
Mükemmel çalıştı. Windows 7'de SendTo menüsüne nasıl uygulama ekleyeceğinizle ilgili talimatlar aşağıdadır. Herhangi bir komut satırı parametresi eklemeye gerek yoktu, sadece uygulama kısayolunu% APPDATA% \ Microsoft \ Windows \ SendTo klasörüne bıraktınız. Windows Gezgini'nde, iki dosya seçip sağ tıklayıp Gönder> P4Merge'i seçerek seçili dosyalar üzerinde fark oluştu.
SimonTewsi

4

Cevaba göz atarken, basit bir düzeltme olmadığı ve bir kabuk uzantısının gerekli olduğu anlaşılıyor. DiffMerge için kayıt defteri girdilerine yeniden bakıldığında, bir kabuk uzantısı kullanıyor gibi görünüyor: DiffMergeShellExtension64.dll. P4Merge böyle bir kabuk uzantısına sahip değilse, Windows Gezgini bağlam menüsünde düzgün çalışmasını sağlayabilmemin tek yolu kendim yazmak olacaktır.

Komple Idiot'un Code Project'te Kabuk Uzantıları Yazma Kılavuzu serisi, kabuk uzantıları yazmak için yararlı bir kılavuzdur. Serinin ikinci bölümü, aynı anda birden fazla dosyayı işleyen bir uzantı yazmakla ilgilidir (tam olarak ihtiyacım olan şey).

Uyarı: Tam Idiot'un Kabuk Uzantıları Yazma Kılavuzu'nda C ve COM, ATL (Etkin Şablon Kütüphanesi) ve MFC (Microsoft Foundation Classes) kullanılmaktadır. Yani bir kabuk uzantısı yazmak, eğer bu teknolojilere aşina değilseniz, uzun ve potansiyel olarak zor bir süreç olacaktır; kesinlikle bir saat içinde yapabileceğiniz bir şey değil.


2

Bunu program bağlam-menü-başlatıcı (singleinstance) ile yapabilirsiniz :

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"

Lütfen .exeotomatik indirme işleminin başlayacağından emin olmadan doğrudan yanıtlarınızdaki dosyalara bağlantı vermeyin .
DavidPostill

Bir cazibe gibi çalışır, teşekkürler. Singleinstance uygulamasını, her dosya türü için dosya ilişkilendirmelerine tek tek eklemeden, herhangi bir dosya türüyle ilişkilendirmenin bir yolu var mı? Örneğin, şu anda XML dosyaları, SQL komut dosyaları, yapılandırma dosyaları, * .cs dosyaları, .gitignore dosyaları ve diğerleri gibi şeyleri karşılaştırmak için DiffMerge kullanıyorum.
SimonTewsi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.