Avatar billede sph1nx Nybegynder
23. februar 2008 - 01:21 Der er 11 kommentarer og
1 løsning

Egen applikation i Windows Context

har lige skrivet mig en applikation i C#, det er en windows forms applikation, der automatiserer nogle rutiner jeg gjorde meget før.

men kunne godt tænke mig at denne kunne åbnes fra windows's context menu, altså den hvor f.eks winrar ligger sig og, og man kan trykke "extract here" osv. Men min applikation arbejder på mapper, så hvordan kan jeg få den til at tage sti ind i main metoden, som bare er standard :

[STAThread]
        static void Main(String[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Main());
        }

godt nok har Main formen to constructorer, en uden parameter og en der tager en sti ind.

men hvordan får jeg den til det, sådan rent programmerings mæssigt, ved godt hvordan jeg tilføjer "linket" i context menuen, det er at få applikationen til at åbne den rigtigt.
Avatar billede skov_p Praktikant
23. februar 2008 - 11:07 #1
Hvis du knytter feks. *.min til mitprogram.exe vil stien til filen fil.min blive givet med som parameter til din exe.
Avatar billede skov_p Praktikant
23. februar 2008 - 11:10 #2
Det er selvfølgelig ikke helt det du vil men dit program åbnes ved aktivering af filen. Hvis det er *.txt som normalt åbnes i notepad kan "Åben med..." måske bruges til din løsning
Avatar billede sph1nx Nybegynder
23. februar 2008 - 11:27 #3
hmm tror du misforstår mig!

altså det skal være sådan at jeg kan højre klikke på en mappe og så vælge :"Scan for avi" som menu entryen kommer til at hedde, den skal så åbne mit program og tage mappe stien med ind som paramater, hvor applikationen så scanner og gør ved.
Avatar billede tripwire Nybegynder
23. februar 2008 - 16:27 #4
Hej

Jeg tror det kunne være en shell extension du leder efter. Det kræver at du smider nogle ting ned i reg databasen på maskinen du kører din applikation fra (kræver sikkert også en genstart).

Her er et lille eksempel på hvordan man kan få en kommandoprompt frem i en mappe, ved at højreklikke på den.

http://www.commandline.co.uk/cmdhere/index.html
Avatar billede sph1nx Nybegynder
23. februar 2008 - 17:00 #5
tripwire -  det har jeg styr på hvordan man laver!

det jeg mangler er noget C# kode, til at få sti'en til den mappe man højre klikket på..

sagt på anden måde, hvordan skal c# koden se ud for at tage den parmater ind ?
Avatar billede a1a1 Novice
23. februar 2008 - 17:07 #6
C:\Documents and Settings\Administrator\SendTo

opret en genvej der så kan du vælge send to <ting> (ved at højre klikke)

;o)
Avatar billede sph1nx Nybegynder
23. februar 2008 - 17:11 #7
Ja!!
Men hvordan får jeg den til at sende mappe stien til applikationen, altså hvilken kode skal tilføjes i min applikation for at kunne modtage mappe stien som en parameter ?
Avatar billede tripwire Nybegynder
23. februar 2008 - 17:13 #8
Er der ikke noget med i args[] når du starter via shell? (skud i tågen)
Avatar billede sph1nx Nybegynder
23. februar 2008 - 17:45 #9
tripwire- smid et svar!

jo havde godt tænkt over det, og havde også godt prøvet det, men havde glemt at tilføje parameteret i mit metode kald

hvis der er nogle der er interesseret i koden så ser den sådan ud :

Main metoden :

namespace XBFNR
{
    static class Program
    {
        [STAThread]
        static void Main(String[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Main(args[0]));
        }
     
    }
}

Constructoren i Main formen :

public Main(String dir)
        {
            InitializeComponent();
            recurDirTrav(dir);
        }

og i regedit for at putte det i shellen :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Scan for avi]

[HKEY_CLASSES_ROOT\Directory\shell\Scan for avi\command]
@="D:\\XBFNR.exe \"%L\""
Avatar billede tripwire Nybegynder
23. februar 2008 - 17:53 #10
Super.. tror lige jeg bookmarker.. godt at vide for fremtiden :)
Avatar billede sph1nx Nybegynder
23. februar 2008 - 17:58 #11
Yes sir..

hvis der er brug for at applikationen skal kunne køre med en parameterløs constructor også, laver du selvfølgelig bare en ekstra parameterløs constructor i formen, og så kan du switche på args.Length, som vist nedeunder, for at finde ud af om programmet er kaldt fra shellen med en parameter, eller om "standard" constructoren skal kaldes.

static class Program
    {
        [STAThread]
        static void Main(String[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            switch (args.Length)
            {
                case 0:
                    Application.Run(new Main()); return;
                case 1:
                    Application.Run(new Main(args[0])); return;
            }
         
        }
     
    }
Avatar billede askalot Mester
25. februar 2009 - 14:18 #12
Bookmarked =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester