Windows Explorer ContextMenu

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Wat ik mij altijd al heb afgevraagd, hoe voeg je menuitems toe aan het contextmenu van Windows Explorer?

Ik heb namelijk een idee voor een programma, en ik zou gebruik willen maken van het contextmenu van Windows, ik heb alleen geen idee hoe ik nou mn eigen menuitem(s) hieraan toevoeg en er een event aan vastkoppel.

Google leverde wel wat resultaten op maar geen van deze resultaten helpen mij met het bouwen van dit programma omdat ze simpelweg dingen net anders doen dan dat ik in gedachten had.

Wie heeft een idee?
 
Laatst bewerkt:
@huijb: Ah kijk, dat geeft me een idee waar ik ongeveer moet wezen, maar het is uiteraard niet de bedoeling dit allemaal handmatig in te stellen, ik zou dit graag via VB doen. Denk aan een button "Install contextmenuitem" en "Remove contextmenuitem" dat de contextmenuitem aan het contextmenu van Windows Explorer toevoegd en verwijderd.

@NPS25: Dat gaat over contextmenu's binnen Windows Forms zelf. Dat is niet wat ik zoek. Ik heb het over het contextmenu van Windows Explorer, dat menuutje dat je te zien krijgt wanneer je rechtsklikt op een bestand of map, dit dus:
explorer_contextmenu.gif


Daar wil ik dus een menuitem aan toevoegen, iets als "Install File(s)...". Dit menuitem moet alleen verschijnen op een bepaalde bestandstype (.bsp). De bedoeling is dat als je één of meerdere bestanden van het type bsp selecteerd en je kiest daarna dat menuitem in het contextmenu, moet er een windows form tevoorschijnkomen waarin ik bepaal wat er met de geselecteerde bestanden moet gebeuren. Dat is geen probleem, dat maak ik zo, het is puur dat Windows Explorer contextmenu gebeuren waar ik op vast zit.
 
Laatst bewerkt:
Hmmm die site ben ik al meerdere malen tegen gekomen tijdens mijn speurtocht naar voorbeelden en ik dacht altijd dat dat een los software pakket is om je contextmenu mee te configureren maar ik heb het eens wat beter bekeken en het is eigenlijk gewoon een .NET component dat je aan je Windows Forms project toevoegd. Klopt dat? In dat geval is dat misschien wel de oplossing!

Pffff, wat een hoop toeters en bellen. Ik was eigenlijk opzoek naar een freeware oplossing, ik ga echt geen 150 dollar neertellen om een simpel menuutje aan het contextmenu van Windows toe te voegen, dus ik weet nog niet zeker of dit wel is wat ik zoek...

Niet dat ik het niet waardeer, hoor CaptainBri, maar 150 dollar... wat denken ze wel.
 
Laatst bewerkt:
Oh rustig maar hoor. Ergens eronder staat hoe je je eigen applicatie kan toevoegen in het contextmenu van windows dmv het register. Laat .Net nou prima mogelijkheden hebben voor het register.. Het zou dan mogelijk moeten zijn om dmv een .Net programma een nieuw menu toe te voegen, te bewerken, of er juist een te verwijderen.

Ik zal proberen een voorbeeld te maken. Uitgaande van dat je .Net gebruikt, in welke taal zou je het graag willen hebben, C# of VB.NET? Oeps ik las over 'vb' heen, ik ga wat dingentjes proberen :)

Typed on ipod.
 
Laatst bewerkt:
Ja ik gebruik VB.NET, 2010. :)

Bedankt voor je hulp, maar ik dat ShellMenu component werkt niet, er gebeurt niks, ik krijg geen extra menuitems in mn contextmenu, terwijl ik toch de belangrijkste dingen heb overgenomen uit het VB.NET voorbeeld project. :/

Dit moet toch te doen zijn lijkt me, ook zonder dat component...
 
Dit moet toch te doen zijn lijkt me, ook zonder dat component...

Absoluut mee eens. Zie hier het programma:

tBqLi.png


Als ik een item toevoeg, moet ik de executable selecteren waarmee ik het wil openen, daarna zal hij een berichtje geven dat het gelukt is:
Sbdw3.png


In het register:
QHOpp.png


Hij staat nu in het context-menu van windows:
Xm914.png


Ik open nu het tekst-bestandje met mijn zelf-gemaakte opvanger (vangt argumenten):
QromP.png


Om het op te vangen in VB.NET, zoals ik al eerder heb geschreven:
PHP:
For Each s As String In Environment.GetCommandLineArgs()
        If s.EndsWith(".txt") Then richTextBox1.Text = System.IO.File.ReadAllText(s)
    Next

Dat werkt in Windows Forms apps!

Maargoed, nu ben ik dat stukje tekst in m'n context-menu zat, en besluit ik 'm te verwijderen, zie hier:
XDlkC.png


Een refresh in het register (F5), en hij is weer weg!
u4LiX.png


Laat het programma lopen als administrator, want hij heeft toegang nodig tot register-sleutels die niet door de normale gebruiker bewerkt/toegevoegd kunnen worden.
P.S. ik heb de settings al veranderd in het xml UAC bestand van de applicatie:

PmeI5.png


Code & Programma:
http://www.mediafire.com/?q62h68lda5sdzpz

Veel plezier ermee, mogen er mooie dingen uitkomen :thumb:
 
Laatst bewerkt:
Helemaal te gek, CaptainBri, maar het is nog niet helemaal zoals ik zou willen.

Ik gaf al aan dat dit menuitem alleen moet verschijnen op bestanden van het type bsp (*.bsp).
Ik dacht, dat is op te lossen door
"\*\shell"
aan te passen naar
"\.bsp\shell"
maar dat kan die niet hebben blijkbaar want dan mekkert tie dat de objectverwijzing niet op een exemplaar van een object is ingesteld. Ik begrijp dat niet.

Daarnaast zijn bsp bestanden geen tekstbestanden, dus het daadwerkelijke inlezen van de geselecteerde bsp's is niet nodig. In plaats daarvan is het de bedoeling dat meerdere bestanden geselecteerd kunnen worden en zodra er dan op dat contextmenuitem wordt geklikt, moet er een form tevoorschijnkomen waarin ik verder bepaal wat er met de bestanden moet gebeuren. Denk aan actie als kopieren naar een andere locatie. Dat heb ik al vaker gedaan en dat kan ik zo doen.

Waar het nu omgaat op een rijtje:

1. ContextMenuItem alleen zichtbaar wanneer je rechtsklikt op bsp bestanden.
2. Wanneer de ContextMenuItem aangeklikt wordt, moet er een form tevoorschijnkomen met, ik dacht aan listbox met daarin de volledige paden naar de geselecteerde bsp's.
3. Inderdaad, dit moet ook werken als je meerdere bsp's hebt geselecteerd.

Ik waardeer je voorbeeld programma, maar het is nog niet 100 % zoals ik het voor ogen had, maar we komen er wel uit! :)

Als je wil, kun je me toevoegen aan MSN (of moet ik WLM zeggen?), op die manier kunnen we wat makkelijk communiceren en debuggen. :)
warriorofnod [AT] themightyatom [DOT] [ENNEL]

EDIT:

We zijn nu zover dat we een menuitem aan het contextmenu van Windows kunnen toevoegen, en dat we door middel van een parameter (%1) het pad van geselecteerde bsp kunnen verkrijgen. Het probleem is dat dit alleen werkt zolang je maar 1 bsp bestand selecteerd, meerdere bestanden wilt tie niet pakken, dan pakt tie altijd de eerste.

CaprainBri en ik snappen er echt de ballen van.
 
Laatst bewerkt:
Hmmm. Volgens mij staat in de ComputerTotaal (4e uitgave van 2011) een uitgebreid artikel dat hier op in gaat.
 
Dat moet ik dan maar eens bekijken. Hopelijk word er een beetje uitgelegd hoe ik onder andere argumenten kan opvangen, want daar zit ik op vast.
 
Het aanmaken van het menu is al gelukt, het is puur het verkrijgen van de paths van de geselecteerde bestanden dat niet wil lukken, en met die link kom helaas ook niet verder, het is allemaal C++.
 
Maar ik heb 'Make single instance application' aangezet dus er worden geen meerdere instances gestart. Het is me ook niet geheel duidelijk hoe ik die code nou moet gebruiken.

Ik denk dat ik dit hele gedoe maar links laat liggen, dit gaat me allemaal te ver boven m'n pet.

Toch bedankt, in ieder geval. :)
 
Dat is'm nou net. Je start MAX in instance op. Via context menu worden alle individuele bestanden naar een uniek instance gestuurd.
Je zou meerdere instance toe moeten staan en vervolgens in je applicatie op zoek moeten gaan naar de reeds draaiende instance en daar de gegevens naartoe sturen.
Dit is gewoon een tekortkoming van de Context menu in Windows. Vandaar dat ik in de andere post de SendTo heb gebruikt.
 
Om eerlijk te zijn snap ik er geen fluit meer van. Ik laat het maar zo.
Bedankt in ieder geval. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan