random Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Εφτιαξα ενα προγραμματάκι (console) που κάνει μια επεξεργασία σε αρχεία συγκεκριμένου τύπου. δουλευει κανονικά με είσοδο 1 αρχείο, (πχ myapp.exe file1.ext ) εβαλα και μια εγγραφή στη registry, για την κατάληξη αρχείων που με ενδιαφέρει ωστε με δεξί κλικ σε αρχείο τύπου .EXT , να τα επεξεργάζεται το πρόγραμμα. πχ. HKEY_CLASSES_ROOT\mytype1\Shell\MyApp\command = C:\myfolder\myapp.exe "%1" μεχρι εδώ καλά. τροποποίησα το myapp.exe να δέχεται περισσότερα απο 1 αρχεία, τα επεξεργάζεται σε μια λούπα, και δουλευει πάλι, οταν το εκτελώ απο γραμμή εντολών (πχ myapp.exe file1.ext file2.ext file3.ext file4.ext ) (δεν με ενδιαφέρει να δουλέψει με παρα πολλά αρχεία, ας παιξει και με 9-10 και ειμαι οκ). Ομως, οταν επιλέγω στον file manager περισότερα απο ένα αρχεία τύπου ext, αντι να εκτελεστεί μία φορά το "myapp.exe file1.ext file2.ext file3.ext file4.ext", εκτελούνται πολλά instances, με ενα αρχειο το καθένα: myapp.exe file1.ext myapp.exe file2.ext myapp.exe file3.ext myapp.exe file4.ext ... δοκίμασα να τροποποιήσω την εγγραφή στη registry σε command = C:\myfolder\myapp.exe "%*" command = C:\myfolder\myapp.exe %* command = C:\myfolder\myapp.exe "%1" "%2" "%3" αλλα χωρις επιτυχία. καμια ιδέα, πώς θα γίνει να επιλέξω 2+ αρχεία, και με δεξι κλικ να τα στείλω στο πρόγραμμα, και να τα επεξεργαστεί, όλα μαζί σε 1 instance ?
Moderators Praetorian Δημοσ. 23 Ιουνίου 2009 Moderators Δημοσ. 23 Ιουνίου 2009 Δε θα σε βόλευε να φτιάξεις ένα υπομενού στο context menu του Windows Explorer όπως πχ έχει το 7-zip (Add to archive...) ή όπως είναι η επιλογή enqueue in winamp ;
teo64x Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Αν καταλαβαίνω καλά το πρόβλημά σου, μπορώ να φανταστώ το εξής: Στο πρώτο άνοιγμα, το πρόγραμμα θα αφήνει κάπου ένα "μήνυμα" (π.χ. ένα αρχείο σε κάποια θέση) ότι είναι ήδη ανοιχτό και τα υπόλοιπα instances (όταν το βλέπουν) απλά θα του μεταφέρουν τα επιπλέον ονόματα αρχείων (μέσω του ενδιάμεσου αρχείου πιθανόν) και θα κλείνουν. Το πρώτο instance θα ελέγχει τακτικά "το αρχείο" και θα βλέπει αν έχει "προστεθεί" παραπάνω δουλειά (λίγο-πολύ όπως το "add to playlist"). Βέβαια δεν είναι ακριβώς η λύση που ζητάς, είναι workaround.
parsifal Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Με δημιουργία Send To menuitem δοκίμασες; Νομίζω πως παίζει όπως θέλεις (αποστολή ως args όλων των filenames με τη μία)...
random Δημοσ. 23 Ιουνίου 2009 Μέλος Δημοσ. 23 Ιουνίου 2009 νομιζω γινεται με το Send to... αλλα προσθετει μια καθυστέρηση στη διαδικασια , τα επιπλεον κλικ, για το υπομενου. δεν μ' αρέσει Για την ώρα έλυσα το πρόβλημα με το FileMenu Tools 5.6 απο http://www.lopesoft.com/ προσθεσα μια νέα εγγραφή,μονο για τα δικα μου file extensions, και καθόρισα "arguments=all filenames", "several instances = no" πολυ καλό προγραμματάκι, και δωρεάν. αλλα θα προτιμούσα να ξερω πώς γίνεται, και χωρίς εξτρα utilities
fromaz Δημοσ. 23 Ιουνίου 2009 Δημοσ. 23 Ιουνίου 2009 Αυτό είναι το default behavior με τον τρόπο που το έχεις φτιάξει, και είναι άσχετο με το command line που θα δηλώσεις. Αντιθέτως, το default behavior των "SendTo" links είναι αυτό που ζητάς. Φτιάξε απλά ένα shortcut στο φάκελο SendTo (χωρίς arguments place holders) και ο Explorer θα σου στείλει το selection. Αν το πρόγραμμα προορίζεται και για άλλους και η λύση αυτή δεν σε καλύπτει, τότε θα πρέπει να φτιάξεις κανονικό shell context menu handler, που σημαίνει COM. Η συνάρτηση που θέλεις είναι η DragQueryFile (παρά το misleading όνομα) και καλείται μέσα από την IShellExtInit::Initialize. Αυτό που δεν θυμάμαι αν δουλεύει, και μπορείς να δοκιμάσεις, είναι να χρησιμοποιήσεις αυτή τη συνάρτηση στο πρόγραμμά σου ως έχει (χωρίς τα Hooks του shell extension). Είναι plain API. Edit: Sorry, μόλις είδα τις απαντήσεις που προηγήθηκαν, όσο έγραφα τη δική μου...
random Δημοσ. 23 Ιουνίου 2009 Μέλος Δημοσ. 23 Ιουνίου 2009 OK, ευχαριστώ. δε νομιζω οτι αξίζει κι αλλο ψάξιμο για ενα προγραμματάκι που χρησιμοποιώ μόνο εγώ...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.