Rechtsklick bei einer Datei



  • Also ich weiß nicht genau wie ich das beschreiben soll aber ich will, dass meine Windows-Forms Anwendung beim Rechtsklicken auf eine Datei in der Liste dort angezeigt wird (z.b. wie bei Winrar - Hier entpacken) nur ,dass da dann halt z.b. mein Programm icon ist und daneben halt irgendetwas steht was es machen soll.
    Wäre euch dankbar wenn ihr mir ein bisschen helfen könntet.

    MfG Varus94



  • Ich kann mich irren aber das müsste Betriebssystemabhängig geregelt werden, also in die Registry oder ein bestimmten Ordner.
    Da kommen dann Einträge rein die musst du dann mit deinem Programm koppeln, beispielweise über Startparameter je nach Methode.





  • mogel schrieb:

    http://blog.dream-coder.de/2009/10/windows-svn-verzeichnisse-rekursiv-loeschen/
    das sollte helfen

    Ja danke sowas hab ich gesucht 🙂 probiers nacher gleich mal aus.



  • Also hat doch schon ganz gut geklappt jetzt hab ich aber noch ein Problem 😉 wenn ich Rechtsklick auf die Datei mach und auf meinen Eintrag im Contextmenü geh wie bekomm ich dann den Path von der Datei / Ordner?



  • Wenn Du sowas in der Registry stehen hast...

    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
    @="Mein Programm im Kontextmenü"
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
    @="c:\meintolles\programm.exe \"%1\""
    

    ...wird dein Programm beim Rechtsklick auf einen Ordner quasi so aufgerufen:

    c:\meintolles\programm.exe c:\der\ordner\der\markiert\war
    

    An die "Commandline args" kommst du in deiner Anwendung z.B. damit:
    Environment.GetCommandLineArgs()

    Du kannst die auch direkt über Main() bekommen:
    Main() und Befehlszeilenargumente

    Es empfiehlt sich das %1 selbst in Anführungszeichen zu setzen, also:

    c:\meintolles\programm.exe "%1"
    

    Dann werden Pfade die Leerzeichen enthalten nicht in mehrere Argumente aufgeteilt...



  • Also für ganz dumme pls nochmal hab hier:

    .
    .
    .
                string MenuName = "Folder\\shell\\IrgendWas";
                string Command = "Folder\\shell\\IrgendWas\\command";
    
                RegistryKey regmenu = null;
                RegistryKey regcmd = null;
    
                try
                {
                    regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
                    if (regmenu != null)
                    {
                        regmenu.SetValue("", "Mein Programm");
                    }
    
                    regcmd = Registry.ClassesRoot.CreateSubKey(Command);
    
                    if (regcmd != null)
                    {
                        regcmd.SetValue("", Application.ExecutablePath);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.ToString());
                }
                finally
                {
                    if (regmenu != null)
                        regmenu.Close();
                    if (regcmd != null)
                        regcmd.Close();
                }   
    
    .
    .
    .
    

    und dann beim laden von Form1 :

    .
    .
    .
                for (int i = 0; i < Environment.GetCommandLineArgs().Length; i++)
                {
                    textBox1.Text += Environment.GetCommandLineArgs()[i];
                }
    .
    .
    .
    

    Wenn ich nun aber wauf i-nen Ordner z.b. aufm Desktop Rechtsklicke und mein Programm aufrufe kommt da immer nur der Path zu meiner .exe und ned zum Ordner

    PS: sry bin noch Anfänger ^^



  • du hast das %1 nicht gesetzt
    regcmd.SetValue("", Application.ExecutablePath + " \"%1\"");



  • Oh blöder Fehler von mir 😉

    Danke für eure Hilfe 🙂 wenn ich nochmal was brauch kann ich mich ja nochmal melden 😃



  • Nochma ne frage xD

    Wie kann ich ein icon vor das Contextmenü setzen? Also wie z.b. des Winrar icon.
    Habs nur bei Dateiendungen hinbekommen.

    Danke schonmal



  • schau mal in der MSDN nach


Anmelden zum Antworten