ฉันจะสร้างรายการเมนูบริบทของเชลล์ที่ใช้หลายไฟล์เป็นอาร์กิวเมนต์ได้อย่างไร


11

การสร้างรายการเมนูบริบทของ Windows Shell ที่ใช้ไฟล์เดียวเนื่องจากอาร์กิวเมนต์เป็นเรื่องง่าย ดูคำถามนี้สำหรับตัวอย่าง

อย่างไรก็ตามคุณจะสร้างรายการเมนูบริบทที่ใช้หลายไฟล์เป็นอาร์กิวเมนต์ได้อย่างไร พูดสำหรับเครื่องมือ diff-merge (ในกรณีของฉัน P4Merge) ถึงแม้ว่าเทคนิคเดียวกันจะไม่มีข้อสงสัยสำหรับแอปพลิเคชันอื่นเช่นกัน

ฉันได้ติดตั้ง P4Merge แล้ว แต่ไม่ได้เพิ่มรายการใด ๆ ในเมนูบริบทโดยอัตโนมัติดังนั้นฉันจะต้องทำด้วยตนเอง

เมื่อฉันลองใช้:

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

เป็นบรรทัดคำสั่งฉันได้รับข้อผิดพลาด:

ข้อผิดพลาด: ต้องมีไฟล์อย่างน้อยสองไฟล์ ไม่สามารถเปิดไฟล์เดียวได้ P4Merge ต้องการไฟล์ 0, 2 หรือ 3

เมื่อฉันลองใช้:

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

เป็นบรรทัดคำสั่งมันเปิดสองอินสแตนซ์ของ P4Merge หนึ่งสำหรับแต่ละไฟล์

ดูเหมือนว่าชื่อไฟล์ที่ถูกต้องจะถูกส่งผ่านไปยัง% 0 และ% 1 แต่อินสแตนซ์ที่แตกต่างกันของแอปพลิเคชัน P4Merge จะถูกดำเนินการสำหรับแต่ละไฟล์

ขณะนี้ฉันมีเครื่องมือ DiffMerge ของ SourceGear ซึ่งมีรายการอยู่ในเมนูบริบทของ Shell และทำงานได้อย่างสวยงามเนื่องจากฉันสามารถเลือกสองไฟล์และใช้รายการเมนูบริบทเพื่อเรียกใช้ไฟล์เหล่านั้น ฉันพยายามค้นหารีจิสตรีเพื่อดูว่าข้อขัดแย้งใดที่ DiffMerge ใช้ แต่ฉันไม่พบ Commandline DiffMerge ที่มีการขัดแย้ง


3
ตามที่คุณค้นพบไม่มีวิธีที่จะทำสิ่งที่คุณต้องการด้วยแฮ็ครีจิสทรีแบบง่าย มีเพียง% 1 เนื่องจากส่วนขยายจะใช้กับวัตถุเดียวเท่านั้นและดำเนินการแยกต่างหากสำหรับวัตถุหลายรายการ มันต้องมีการเขียนโปรแกรมเปลือกเต็มนามสกุล อย่างไรก็ตามมีบางโปรแกรม / ส่วนขยายของเชลล์ที่ให้คุณทำเนื้อหาเมนูบริบทขั้นสูงมากกว่าที่แฮ็ครีจิสทรีจะอนุญาต (อันเดียวที่ฉันจำได้คือMMM ) น่าเสียดายที่ฉันคิดว่าพวกเขามีแนวโน้มที่จะ จำกัด ให้คุณสร้างเมนูย่อยแทนที่จะปล่อยให้วัตถุหลายชิ้นถูกทิ้ง
Synetech

คำตอบ:


20

คุณสามารถลองเพิ่มโปรแกรมลงในเมนู SendTo


ใช่นั่นใช้งานได้ดี
Synetech

1
ทำงานได้อย่างสมบูรณ์แบบ นี่คือคำแนะนำสำหรับวิธีเพิ่มแอปพลิเคชันไปยังเมนู SendTo ใน Windows 7 ไม่จำเป็นต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งใด ๆ เพียงแค่วางทางลัดแอปพลิเคชันลงในโฟลเดอร์% APPDATA% \ Microsoft \ Windows \ SendTo กลับไปที่ Windows Explorer เลือกไฟล์สองไฟล์จากนั้นคลิกขวาและเลือกส่งไปที่> P4Merge ทำไฟล์ต่าง ๆ ที่เลือกไว้
SimonTewsi

4

การสืบค้นคำตอบดูเหมือนว่าไม่มีวิธีแก้ไขที่ง่ายและจำเป็นต้องมีส่วนขยายของเชลล์ ดูอีกครั้งที่รายการรีจิสทรีสำหรับ DiffMerge ดูเหมือนว่าจะใช้ส่วนขยายของเชลล์: DiffMergeShellExtension64.dll หาก P4Merge ไม่มีส่วนขยายของเชลล์เช่นนั้นดูเหมือนว่าวิธีเดียวที่ฉันจะทำให้มันทำงานอย่างถูกต้องในเมนูบริบทของ Windows Explorer คือการเขียนด้วยตนเอง

คู่มือที่สมบูรณ์ของคนโง่เกี่ยวกับการเขียนชุดส่วนขยายของเชลล์ในรหัสโครงการเป็นคู่มือที่มีประโยชน์ในการเขียนส่วนขยายของเชลล์ ส่วนที่สองของซีรีส์เกี่ยวกับการเขียนส่วนขยายที่จัดการไฟล์หลายไฟล์พร้อมกัน (สิ่งที่ฉันต้องการ)

คำเตือน: คู่มือที่สมบูรณ์ของคนโง่เกี่ยวกับการเขียนส่วนขยายของเชลล์ใช้ C และ COM, ATL (ไลบรารีแม่แบบที่ใช้งานอยู่) และ MFC (Microsoft Foundation Classes) ดังนั้นการเขียนส่วนขยายของเชลล์ถ้าคุณไม่คุ้นเคยกับเทคโนโลยีเหล่านั้นจะเป็นกระบวนการที่ยาวและยาก ไม่ใช่สิ่งที่คุณสามารถทำได้ในหนึ่งชั่วโมง


2

คุณสามารถทำได้ด้วยโปรแกรมcontext-menu-launcher (singleinstance) ของฉัน :

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"

โปรดอย่าลิงก์โดยตรงไปยัง.exeไฟล์ในคำตอบของคุณโดยไม่ทำให้ชัดเจนว่าการดาวน์โหลดอัตโนมัติจะเริ่มขึ้น
DavidPostill

ทำงานเหมือนจับใจขอบคุณ มีวิธีใดที่จะเชื่อมโยงแอปพลิเคชัน singleinstance กับไฟล์ประเภทใด ๆ โดยไม่ต้องเพิ่มลงในการเชื่อมโยงไฟล์สำหรับแต่ละประเภทไฟล์? ตัวอย่างเช่นขณะนี้ฉันใช้ DiffMerge เพื่อเปรียบเทียบสิ่งต่างๆเช่นไฟล์ XML, สคริปต์ SQL, ไฟล์กำหนดค่า, ไฟล์ * .cs, ไฟล์. gitignore และอื่น ๆ
SimonTewsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.