Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από skeftomilos » 11 Μαρ 2005 04:09

Πριν λίγες μέρες διάβασα ένα ενδιαφέρον άρθρο με τίτλο Μαζική μετονομασία αρχείων σε Greeklish που πρότεινε έναν έξυπνο και πρακτικό τρόπο χρήσης της JavaScript για την επίλυση ενός καθημερινού προβλήματος. Η ιδέα είναι εντυπωσιακά απλή. Γράφουμε ένα μικρό script, το τοποθετούμε στον ειδικό φάκελο SendTo των Windows XP, και αυτόματα το πρόγραμμα γίνεται διαθέσιμο όταν κάνουμε δεξί κλικ σε οποιοδήποτε αρχείο του δίσκου. Για να διερευνήσουμε τις δυνατότητες αυτής της τεχνικής θα φτιάξουμε ένα πολύ απλό αλλά λειτουργικό utility που θα εμφανίζει το μέγεθος ενός αρχείου σε bytes. Στην αρχή θα γράψουμε το πρόγραμμα. Η πρώτη και απλούστερη εκδοχή είναι η παρακάτω:

Κώδικας: Επιλογή όλων

var fso = WScript.CreateObject("Scripting.FileSystemObject")
if (WScript.Arguments.Length == 0) {
  WScript.Echo("Insufficient arguments")
  WScript.Quit()
}

var file_name = WScript.Arguments(0)
if (!fso.FileExists(file_name)) {
  WScript.Echo("File not found: " + file_name)
  WScript.Quit()
}

var file = fso.getFile(file_name)
WScript.Echo("FILE SIZE\r\n" + file.Name + " : " + file.Size + " bytes")
Οι αρχάριοι μάλλον θα έχετε ήδη τρομάξει με τη θέα του κώδικα! Δεν είναι το ευκολότερο πράγμα του κόσμου αλλά με λίγη προσπάθεια θα καταλάβετε τι κάνει.

Στην πρώτη γραμμή δημιουργούμε ένα αντικείμενο FileSystemObject. Θα το χρειαστούμε για να βεβαιωθούμε ότι το προς εξέταση αρχείο υπάρχει, καθώς και για να διαβάσουμε το μέγεθός του.

Στις τέσσερις γραμμές που ακολουθούν βεβαιωνόμαστε ότι έχουμε κάποιο αρχείο προς εξέταση. Όταν το πρόγραμμα τρέξει με τον ειδικό τρόπο που θα δούμε παρακάτω, η συλλογή WScript.Arguments θα περιέχει τουλάχιστον ένα όνομα αρχείου, του αρχείου του οποίου το μέγεθος ψάχνουμε. Επομένως η τιμή της ιδιότητας WScript.Arguments.Length θα είναι μεγαλύτερη του μηδενός και το πρόγραμμα θα συνεχιστεί ομαλά με τις επόμενες εντολές.

Στην επόμενη γραμμή μεταφέρουμε το πρώτο όνομα αρχείου από τη συλλογή WScript.Arguments σε μία μεταβλητή με όνομα file_name. Αυτό το κάνουμε για δική μας διευκόλυνση. Στο εξής αντί να γράφουμε WScript.Arguments(0) θα γράφουμε file_name. Η συλλογή WScript.Arguments αριθμεί τα στοιχεία της αρχίζοντας από το 0, επομένως το WScript.Arguments(0) είναι το πρώτο της στοιχείο.

Στις επόμενες τέσσερις γραμμές ελέγχουμε ότι το αρχείο υπάρχει πράγματι στο δίσκο. Ο έλεγχος γίνεται με τη μέθοδο FileExists του αντικειμένου FileSystemObject που δημιουργήσαμε στην πρώτη γραμμή. Ο έλεγχος δεν είναι περιττός όπως θα δούμε παρακάτω.

Στην προτελευταία γραμμή λαμβάνουμε ένα αντικείμενο File σχετικό με το πραγματικό προς εξέταση αρχείο. Το αντικείμενο αυτό μας δίνει πρόσβαση σε κάθε είδους πληροφορία που μπορεί να θέλουμε για το αρχείο. Για παράδειγμα στην παρακάτω γραμμή θα διαβάσουμε τις ιδιότητες Name και Size του αντικειμένου, που περιέχουν το σύντομο όνομα και το μέγεθος του αρχείου αντίστοιχα.

Στην τελευταία γραμμή κάνουμε δύο πράγματα ταυτόχρονα. Κατ'αρχήν συνθέτουμε το μήνυμα με την πληροφορία που θα εμφανίσουμε στο χρήστη (εμάς δηλαδή!) και δεύτερον εμφανίζουμε το μήνυμα με τη μέθοδο WScript.Echo. Οι περίεργοι χαρακτήρες \r\n ενδιάμεσα στο μήνυμα έχουν σκοπό να σπάσουν το μήνυμα σε δύο γραμμές.

Λοιπόν, τώρα είναι η ώρα να τοποθετήσουμε το πρόγραμμά μας στο φάκελο SendTo. Κατ'αρχήν πρέπει να εντοπίσουμε αυτό το φάκελο. Αν το όνομα χρήστη είναι Teo, τότε η διεύθυνση του φακέλου είναι η C:\Documents and Settings\Teo\SendTo. Αντιμετωπίζουμε ένα πρόβλημα καθώς ο φάκελος SendTo είναι κρυφός. Μία λύση είναι να εμφανίσουμε τους κρυφούς φακέλους με Tools - Folder Options - View - Show hidden files and folders. Μία άλλη είναι απλά να γράψουμε τη διεύθυνση στην Address Bar. Μόλις μπούμε στον φάκελο δημιουργούμε ένα αρχείο με το πρόγραμμά μας. Το αρχείο πρέπει να έχει κατάληξη .js, ας το ονομάσουμε FileSize.js. Ο απλούστερος τρόπος είναι να δημιουργήσουμε αρχικά ένα αρχείο κειμένου (.txt) το οποίο μετά να αλλάξουμε σε .js. Στο παρακάτω screenshot βλέπετε το αποτέλεσμα μέχρι στιγμής:

Εικόνα

Η σκληρή δουλειά τελείωσε και είναι ώρα να απολαύσουμε τους καρπούς των προσπαθειών μας! Φεύγουμε από το φάκελο SendTo και πηγαίνουμε στα αρχεία που θέλουμε να εξετάσουμε. Κάνουμε δεξί κλικ σε ένα από αυτά και δείχνουμε στην επιλογή Send To. Θα πρέπει να μπορούμε να δούμε το πρόγραμμά μας ανάμεσα στις επιλογές:

Εικόνα

Μόλις κάνουμε κλικ στο FileSize.js θα δούμε να εμφανίζεται ένα μήνυμα σαν το παρακάτω:

Εικόνα

Θρίαμβος! Εντάξει, ας είμαστε συγκρατημένοι. Θα μπορούσαμε να δούμε το μέγεθος πολύ ευκολότερα κοιτάζοντας τα properties του αρχείου, αλλά ο σκοπός αυτού του παραδείγματος είναι απλά να δούμε ότι η μέθοδος πράγματι λειτουργεί. Από κει και πέρα οι δυνατότητες που ανοίγονται είναι απεριόριστες. Αλλά πριν πάρουν τα μυαλά μας αέρα ας δοκιμάσουμε λίγο καλύτερα το πρόγραμμά μας. Ας επιλέξουμε δύο ή περισσότερα αρχεία και ας κάνουμε πάλι δεξί κλικ - Send To - FileSize.js. Απογοήτευση. Θα θέλαμε να δούμε τα μεγέθη όλων των επιλεγμένων αρχείων αλλά αντίθετα βλέπουμε μόνο ενός απ' αυτά και μάλιστα τυχαίο. Για να αποκτήσει το πρόγραμμά μας αυτή τη δυνατότητα θα πρέπει να κάνουμε ορισμένες βελτιώσεις. Πηγαίνουμε πάλι στο φάκελο SendTo, ανοίγουμε το αρχείο FileSize.js για διόρθωση (με δεξί κλικ - Edit) και αντικαθιστούμε τον κώδικα με τον παρακάτω:

Κώδικας: Επιλογή όλων

var fso = WScript.CreateObject("Scripting.FileSystemObject")
if (WScript.Arguments.Length == 0) {
  WScript.Echo("Insufficient arguments")
  WScript.Quit()
}

var msg = "FILE SIZE"
for &#40;var i = 0; i < WScript.Arguments.length; i++&#41; &#123;
  var file_name = WScript.Arguments&#40;i&#41;
  if &#40;!fso.FileExists&#40;file_name&#41;&#41; &#123;
    WScript.Echo&#40;"File not found&#58; " + file_name&#41;
    WScript.Quit&#40;&#41;
  &#125;
  var file = fso.getFile&#40;file_name&#41;
  msg += "\r\n" + file.Name + " &#58; " + file.Size + " bytes"
&#125;

WScript.Echo&#40;msg&#41;
Η βασική διαφορά είναι ότι έχουμε προσθέσει έναν επαναλαμβανόμενο βρόγχο for() που εξετάζει με τη σειρά όλα τα στοιχεία της συλλογής WScript.Arguments. Υπάρχει επίσης μία νέα μεταβλητή με όνομα msg που περιέχει το τελικό μήνυμα που θα δει ο χρήστης. Η μεταβλητή αυτή χτίζεται γραμμή-γραμμή καθώς η ροή του προγράμματος διατρέχει ξανά και ξανά το βρόγχο.

Σώζουμε το αρχείο του προγράμματος και είμαστε έτοιμοι για νέες δοκιμές. Πηγαίνουμε στα αρχεία μας, επιλέγουμε μερικά, κάνουμε δεξί κλικ - Send To - FileSize.js, και βλέπουμε κάτι σαν το παρακάτω.

Εικόνα

Καλό? Καλύτερο, αλλά όχι ακόμα τέλειο. Θα το αντιληφθούμε αν δοκιμάσουμε το ίδιο με ένα φάκελο αντί για αρχείο, οπότε θα πάρουμε το παρακάτω μήνυμα:

Εικόνα

Η μέθοδος FileExists του αντικειμένου FileSystemObject επιστρέφει άρνηση για ονόματα φακέλων, και έτσι το πρόγραμμά μας τερματίζει άδοξα. Άρα πρέπει να κάνουμε περαιτέρω βελτιώσεις:

Κώδικας: Επιλογή όλων

var fso = WScript.CreateObject&#40;"Scripting.FileSystemObject"&#41;
if &#40;WScript.Arguments.Length == 0&#41; &#123;
  WScript.Echo&#40;"Insufficient arguments"&#41;
  WScript.Quit&#40;&#41;
&#125;

var msg = "FILE SIZE"
for &#40;var i = 0; i < WScript.Arguments.length; i++&#41; &#123;
  var file_name = WScript.Arguments&#40;i&#41;
  if &#40;fso.FileExists&#40;file_name&#41;&#41; &#123;
    var file = fso.getFile&#40;file_name&#41;
    msg += "\r\n" + file.Name + " &#58; " + file.Size + " bytes"
  &#125; else if &#40;fso.FolderExists&#40;file_name&#41;&#41; &#123;
    var folder = fso.getFolder&#40;file_name&#41;
    msg += "\r\n" + folder.Name + " &#40;Folder&#41; &#58; " + folder.Size + " bytes"
  &#125; else &#123;
    WScript.Echo&#40;"File not found&#58; " + file_name&#41;
    WScript.Quit&#40;&#41;
  &#125;
&#125;

WScript.Echo&#40;msg&#41;
Τώρα ελέγχουμε και την περίπτωση Folder εκτός από την περίπτωση File. Μία δοκιμαστική εκτέλεση εμφάνισε το εξής μήνυμα:

Εικόνα

Το πρόγραμμά μας έχει φτάσει στο επίπεδο της πλήρους λειτουργικότητας, και το μόνο που μπορούμε να προσθέσουμε είναι αισθητικής φύσεως βελτιώσεις. Για παράδειγμα θα θέλαμε καλύτερη μορφοποίηση των αριθμητικών τιμών, χωρισμό χιλιάδων και αλλαγή κλίμακας σε KB και MB. Για την ώρα θα το αφήσουμε ως έχει, καθώς έχουμε σημαντικότερα πράγματα να κάνουμε.

Ο σκοπός αυτής της τεχνικής όπως τον αντιλαμβάνομαι εγώ δεν είναι η παραγωγή προγραμμάτων γενικής χρήσης. Όμορφα, εύχρηστα, πολλών δυνατοτήτων προγράμματα φτιάχνονται από επαγγελματίες με πιο κατάλληλες γλώσσες από τη JavaScript. Αυτό που μπορεί να προσφέρει αυτή η τεχνική είναι εκείνο το μικρό, απλό, εύχρηστο και ίσως λίγο άκομψο πρόγραμμα που εξυπηρετεί μία δική μας εντελώς προσωπική ανάγκη, μας λύνει τα χέρια, και δεν υπάρχει έτοιμο. Μερικές χρήσεις που μπορώ να σκεφτώ είναι οι παρακάτω. Παρακαλώ προσθέστε και δικές σας ιδέες αν έχετε έμπνευση.

- Μέτρηση των γραμμών ενός/πολλών αρχείων κειμένου.
- Ανάλυση συχνότητας γραμμάτων ενός/πολλών αρχείων κειμένου.
- Αναζήτηση μίας λέξης σε ένα/πολλά αρχεία κειμένου. Να επιστρέφει και τον αριθμό εμφανίσεων της ζητούμενης λέξης.
- Άθροισμα αρχείων ανά τύπο: πόσα αρχεία txt, πόσα αρχεία gif κ.λπ. Να εξετάζει ένα φάκελο σε όλο του το βάθος.
- Ανάγνωση ενός μικρού και συγκεκριμένου τμήματος ενός μεγάλου αρχείου κειμένου. Π.χ. το tag <meta name="generator"> ενός αρχείου HTML.
- Αναζήτηση αρχείων που δεν περιέχουν μία λέξη. Π.χ. αρχεία HTML χωρίς tag <title>.

Όλα αυτά αφορούν την άκακη συλλογή πληροφοριών από τα αρχεία στόχος. Αν συνυπολογίσουμε τη δυνατότητα δημιουργίας, αλλαγής, μετακίνησης και διαγραφής αρχείων οι δυνατότητες πολλαπλασιάζονται - το ίδιο και οι κίνδυνοι! Καλό είναι τα σχετικά σκριπτάκια να είναι πολύ καλά ελεγμένα και να διαθέτουν δικλείδες ασφαλείας. Προσοχή! Ένα κακογραμμένο script που χρησιμοποιεί αναδρομή θα μπορούσε να σας διαγράψει το μισό δίσκο σε χρόνο ρεκόρ! Η τεχνικές scripting είναι πολύ βολικές αλλά κάθε άλλο παρά ανίσχυρες. Προσέξτε να μη γίνετε θύματα των δυσάρεστων πτυχών της δύναμής τους.

- Μαζικές μετονομασίες αρχείων.
- Μαζικές αλλαγές αρχείων με αντικατάσταση λέξεων.
- Δημιουργία αντιγράφων αρχείων με κριτήρια όπως ημερομηνία δημιουργίας, τύπος αρχείου, περιεχόμενο αρχείου, ύπαρξη του αρχείου στο φάκελο στόχο.
- Μαζικές διαγραφές παλαιών αρχείων.
- Δημιουργία νέων αρχείων από μία συλλογή προτύπων.

Μία καλή δικλείδα ασφαλείας είναι η εμφάνιση των αρχείων που πρόκειται να υποστούν αλλαγές, σε συνδυασμό με επιλογή Ok/Cancel για τη συνέχιση ή ακύρωση της διαδικασίας.

Πρέπει τώρα να εξετάσουμε και το ζήτημα του debugging. Καθώς φτιάχνεται τα προγράμματα θα θέλατε να τα δοκιμάζετε κάπου-κάπου για να βλέπετε αν προοδεύουν προς τη σωστή κατεύθυνση. Ο ευκολότερος τρόπος να τρέξετε ένα script είναι να κάνετε διπλό κλικ επάνω του ή να πατήσετε enter, και όχι βέβαια να το ψάχνεται μέσω του SendTo από ένα άλλο αρχείο. Αν όμως τρέξετε άμεσα το script πατώντας enter, η συλλογή WScript.Arguments θα είναι άδεια και επομένως δε θα πάρετε ενδιαφέροντα αποτελέσματα. Επίσης είναι πιθανό να προτιμάτε να κάνετε την ανάπτυξη του προγράμματός σας σε έναν άλλο φάκελο και όχι κατευθείαν στο SendTo. Θα προτείνω μία λύση που δοκίμασα και λειτουργεί αρκετά καλά, χωρίς να αποκλείω την ύπαρξη κάποιας καλύτερης. Φτιάχνετε ένα αρχείο batch (.bat) που καλεί το πρόγραμμά σας μαζί με το/τα προς εξέταση αρχεία με τη μορφή arguments:

Κώδικας: Επιλογή όλων

@cd "D&#58;\JavaScript"
@wscript FileSize.js Vandi.txt Kalomoira.txt
Σώζετε το αρχείο αυτό με ένα κατάλληλο όνομα. Νομίζω ότι το FileSize.bat είναι πολύ κατάλληλο. Ο φάκελος ανάπτυξης με το πρόγραμμα και τα δοκιμαστικά αρχεία/φακέλους θα έχει τώρα την παρακάτω μορφή:

Εικόνα

Τώρα αν τρέξετε το αρχείο FileSize.bat θα προκαλέσετε αυτό που θα συνέβαινε αν επιλέγατε τα δύο δοκιμαστικά αρχεία και κάνατε δεξί κλικ - Send To - FileSize.js, με την επιπλέον προϋπόθεση ότι θα είχατε μεταφέρει το πρόγραμμα στο φάκελο SendTo. Δηλαδή Θα δείτε κάτι τέτοιο:

Εικόνα

Το μαύρο παράθυρο που φαίνεται από πίσω είναι το ένα μειονέκτημα αυτής της τεχνικής. Νομίζω πως δεν ενοχλεί ιδιαίτερα. Το άλλο είναι η απροθυμία των αρχείων .bat να λειτουργήσουν με ελληνικούς χαρακτήρες. Το αντιμετώπισα αλλάζοντας τα ονόματα των δοκιμαστικών αρχείων σε greeklish.

Όλα όσα είπαμε μέχρι τώρα ήταν - νομίζω - πολύ ωραία, αλλά δεν πρόκειται να σας ωφελήσουν και πολύ αν δεν ξέρετε JavaScript. Στο θέμα γλώσσα έχετε πάντως αρκετές επιλογές. Ο υπολογιστής σας διαθέτει ήδη και τη VBScript, και μπορείτε να κατεβάσετε αν θέλετε και πιο εξωτικές γλώσσες όπως PerlScript και Python. Τους λόγους που με κάνουν να προτιμώ τη JavaScript μπορείτε να τους διαβάσετε στο άρθρο μου Η JavaScript ως γλώσσα προγραμματισμού για αρχάριους. Στο ίδιο άρθρο θα βρείτε πολλές πηγές για να μάθετε τη γλώσσα. Ως εργαλείο ανάπτυξης προτιμήστε στην αρχή το Notepad. Η ανάγκη για έναν πιο εξυπηρετικό editor δεν πρόκειται να υπάρξει πριν τα προγράμματά σας ξεπεράσουν τις 40-50 γραμμές σε μήκος. Σε κάθε περίπτωση δεν είμαι ο κατάλληλος για να σας απαριθμήσω τους διαθέσιμους editors και τα συγκριτικά τους πλεονεκτήματα. Πέρα από τις γνώσεις σας θα χρειαστείτε και κάποιο reference κατά την ώρα της συγγραφής του κώδικα. Δεν είναι δυνατόν να θυμάστε απ'έξω τα ονόματα όλων των ιδιοτήτων και μεθόδων των διαφόρων αντικειμένων. Νομίζετε ότι έγραψα τα παραπάνω scripts με μόνο βοηθό τη μνήμη μου? Όχι βέβαια! Λοιπόν ο απολύτως απαραίτητος βοηθός σας είναι το documentation της Microsoft για τις scripting τεχνολογίες. Είναι ένα αρχείο .chm, πλήρες και αρκετά εύχρηστο. Αν πάντως ξέρετε κάτι καλύτερο, παρακαλώ ενημερώστε με και μένα να ξέρω!
:D
Τελευταία επεξεργασία από το μέλος skeftomilos την 13 Μαρ 2005 02:25, έχει επεξεργασθεί 1 φορά συνολικά.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
geraki
Honorary Member
Δημοσιεύσεις: 1404
Εγγραφή: 26 Ιαν 2004 20:10
Τοποθεσία: Θεσσαλονίκη
Επικοινωνία:

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από geraki » 11 Μαρ 2005 14:51

:clap: :clap: :clap: :clap: :clap:
Εικόνα &#8592; Αυτό το έκλεψα απ'τον Eneme.

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από cordis » 11 Μαρ 2005 18:31

Πολύ έξυπνο ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από LightForce » 11 Μαρ 2005 20:04

το διάβασα με προσοχή, πολύ ωραίο skeftomilos :)

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από dimsis » 24 Μαρ 2005 10:00

Έξυπνο... το ίδιο σαφώς μπορεί να γίνει και με vbscript.

Επί της ευκαιρίας...
Πρόσφατα έψαχνα να βρω ένα προγραμματάκι που να κάνεις δεξί κλικ σε μια εικόνα και να σου δημιουργεί ένα thumbnail χωρίς να σου βγάζει την πίστη σε ερωτήσεις για μέγεθος ποιότητες κλπ... και επειδή δεν έβρισκα τίποτα έφτιαξα ένα δικό μου σε vb που δουλεύει είτε με την Send To αλλά το βασικότερο και αυτό που τελικά ήθελε περισσότερο ψάξιμο ήταν να βρω με ποιο τρόπο όταν κάνω δεξί κλικ σε μια ΕΙΚΟΝΑ του Internet Explorer (γιατί αυτό που έκανα μόνο σε αυτόν δουλεύει) να βγάζει μια επιλογή και να εκτελείται στην ουσία η εφαρμογή μου λαμβάνοντας ως παράμετρο την θέση της εικόνας από το διαδίκτυο, να την κατεβάζει και να δημιουργεί το thumbnail... τελικά τα κατάφερα ψάχνοντας τον τρόπο με τον οποίο δουλεύουν τα download managers...
Το τελικό αποτέλεσμα (μήπως και το χρειαστεί κανείς ιδιαίτερα όσοι έχουν sites που βάζουν και εικόνες μαζί με τα post τους) είναι διαθέσιμο για download από εδώ:
http://www.code.gr/fir (το κατεβάζετε και το αποσυμπιέζετε στο c:\fir)
Μετρατρέπει μόνο gif και jpg εικόνες σε thumbnails μεγέθους που ορίζετε μέσα στο αρχείο settings.txt...

(βασικά το έφτιαξα για το www.log.gr όπου μαζί με τις ειδήσεις που δημοσιεύονται υπάρχει και μια εικόνα συνήθως πλάτους 100 pixels που την παίρνουμε από το source site, για να γλιτώσουμε την διαδικασία: αποθήκευση εικόνας από το site στον δίσκο, άνοιγμα εικόνας με πρόγραμμα επεξεργασίας εικόνας, αλλαγή μεγέθους εικόνας, αποθήκευση εικόνας με κάποιο όνομα στο δίσκο..)

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από skeftomilos » 26 Μαρ 2005 22:12

Υποθέτω dimsis ότι το πρόγραμμά σου κατεβάζει εκ νέου την εικόνα από το server. Πάντως μπράβο σου που κατάφερες κάτι τέτοιο. Μοιάζει αρκετά δύσκολο.

Είχα αληθινή απορία για το άν ο alkisg που έγραψε το αρχικό άρθρο είναι ο αυθεντικός εμπνευστής της τεχνικής SendTo, και γι αυτό επικοινώνησα μαζί του για να μου λύσει την απορία. Τελικά δεν πήρα σαφή απάντηση, αλλά αντ'αυτού είχε την καλοσύνη να μου δώσει ένα ακόμα script που δουλεύει με αυτή την τεχνική. Το script αυτό μπορεί να λύσει τα χέρια όσων είστε φανατικοί οπαδοί του πληκτρολογίου, αλλά αν είστε fun του ποντικιού μάλλον δε θα σας χρησιμεύσει πολύ. Όσοι λοιπόν είστε ορκισμένοι εχθροί του εξαρτήματος που κάνει κλικ και λάτρεις των keyboard shortcuts θα ξέρετε ήδη ότι ο συνδυασμός Win-R εμφανίζει το παράθυρο Run των Wimdows:

Εικόνα

Εικόνα

Αν γράψετε το όνομα ενός προγράμματος και πατήσετε Enter, το πρόγραμμα θα ξεκινήσει. Εκτός από το WINWORD μπορείτε να τρέξετε έτσι και τα EXCEL, MSACCESS, FRONTPG, EXPLORER, CMD (κονσόλα DOS), MSPAINT, SOL (solitaire), WINMINE (Minesweeper), ACRORD32 (Acrobat Reader) και άλλα προγράμματα, κυρίως των Windows, αλλά όχι όλα. Τα Windows δεν ψάχνουν όλο το δίσκο σας για να βρουν το πρόγραμμα που ζητάτε αλλά μόνο ένα προκαθορισμένο αριθμό φακέλων, το λεγόμενο path. Έτσι αν έχετε π.χ. ένα αγαπημένο πρόγραμμα Alma.exe στο φάκελο D:\Alma και προσπαθήσετε να το τρέξετε έτσι, θα δοκιμάσετε την πικρή γεύση της αποτυχίας:

Εικόνα

Εικόνα

Εικόνα

Εδώ έρχεται σε βοήθεια το script Add-to-path.js του alkisg. Ο κώδικας είναι ο εξής:

Κώδικας: Επιλογή όλων

if &#40;WScript.Arguments.Length == 0&#41; &#123;
  WScript.Echo&#40;"Insufficient arguments"&#41;
  WScript.Quit&#40;&#41;
&#125;

var sh = WScript.CreateObject&#40;"Wscript.Shell"&#41;
var fso = WScript.CreateObject&#40;"Scripting.FileSystemObject"&#41;
var registry_key = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\"
var msg = "FILES REGISTERED" 

for &#40;var i = 0; i < WScript.Arguments.length; i++&#41; &#123;
  var file_name = WScript.Arguments&#40;i&#41;
  if &#40;fso.FileExists&#40;file_name&#41;&#41; &#123;
    var file = fso.getFile&#40;file_name&#41;
    sh.RegWrite&#40;registry_key + file.Name + "\\", file.Path, "REG_EXPAND_SZ"&#41;
    msg += "\r\n" + file.Name
  &#125;
&#125;

WScript.Echo&#40;msg&#41;
Αυτό που κάνει είναι να προσθέσει τα επιλεγμένα αρχεία στο path, εισάγοντας μία εγγραφή για το καθένα στο κατάλληλο key του registry. Σώστε το αρχείο στο φάκελο SendTo, με όνομα Add-to-path.js ή όποιο άλλο σας αρέσει. Τώρα θα χρησιμοποιήσετε την τεχνική SendTo για να βάλετε το πρόγραμμα Alma.exe στο path με τον πιο ξεκούραστο τρόπο.

Εικόνα

Εικόνα

Αν τώρα δοκιμάσετε πάλι να τρέξετε το Alma.exe με τη μέθοδο Run, θα διαπιστώσετε με ικανοποίηση ότι η μέθοδος δουλεύει! Αφιερώστε λίγο χρόνο για να βάλετε στο path όλα τα προγράμματα που χρησιμοποιείται συχνά και βάλτε το ποντικάκι στο συρτάρι. Μόνο αφήστε το συρτάρι λίγο ανοιχτό για να μπορεί να αναπνέει. Για το τέλος ας ρίξουμε μια ματιά στο Registry για να δούμε την εγγραφή που προστέθηκε για το πρόγραμμα Alma.exe.

Εικόνα
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 30 Μαρ 2005 21:14

sostotatos!!!

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 06 Απρ 2005 17:06

exw 1 prob Sto arthro poy edwses sxetika me thn metrhsh toy megethoys arxeiwn . To eixa ftiaksei kai malista me megali epitixia.Par'ola ayta, prosfata egkatestisa ton Dreamwaver ths macromedia o opoios diavaze ta .js arxei me apotelesma thn mh epitiximenh leitoyrgia toys!Afoy to apegkatestisa epsaksa gia kati poy na diavazei ayta ta arxeia.Vrika ston fakelo windows (exw XP prof) enan fakelo stoy opoioy ton ypofakelo ektos twn allwn perieixe to Wscript.exe.Enw loipon ta alla .js arxeia leitoyrgoysan kanonika anoigmena me ayto (parolo poy ta eikonidia allaksan) , ayto to arxeio Dilwne synexeia Insufficient Arguments eite topothetoysa arxeia eite oxi!

Den mporesa na vrw thn allagh.So an theleis mporeis na me voithiseis sxetika me ayto.
:D

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από skeftomilos » 06 Απρ 2005 18:31

Για να τρέχουν τα Javascript(JScript) προγράμματα στο Send To πρέπει το default πρόγραμμα ανοίγματος των .js αρχείων να είναι το C:\WINDOWS\system32\wscript.exe (Windows Script Host). Δηλαδή όταν κάνεις διπλό κλικ στο αρχείο .js θα πρέπει να εκτελείται ο κώδικας, και όχι να ανοίγει το αρχείο για editing με το Dreamweaver ή το Notepad.

Μερικά προγράμματα αλλάζουν κατά την εγκατάστασή τους τα file associations, δηλαδή το ποια προγράμματα ανοίγουν ποια αρχεία. Το Dreamweaver θεωρεί μάλλον τον εαυτό του κατάλληλο πρόγραμμα για editing Javascript κώδικα, αν και πολλοί θα διαφωνούσαν με αυτό. Σε κάθε περίπτωση δεν είναι λογική επιλογή ως default. Για να κάνεις πάλι default το wscript.exe, ο ευκολότερος τρόπος είναι ο εξής:

- Βρες ένα οποιοδήποτε (αλλά ακίνδυνο) αρχείο .js
- Δεξί κλικ -> Open With... -> Choose Program...
- Επέλεξε το wscript.exe από τη λίστα (Microsoft (r) Windows Based Script Host).
- Τσέκαρε την επιλογή Always use the selected program to open this kind of file
- Πάτα Ok, και το script θα εκτελεστεί. Τώρα η εκτέλεση είναι το default.

Εικόνα

Όταν θέλεις να ανοίξεις ένα αρχείο .js για editing, μπορείς να κάνεις δεξί κλικ, Open With... και να επιλέγεις το κατάλληλο πρόγραμμα (συνήθως Notepad).
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 06 Απρ 2005 18:59

Akrivws ayto ekana alla yparxei pali ayto to provlima poy soy eipa me to sigekrimeno .js arxeio!

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από skeftomilos » 07 Απρ 2005 05:24

Νομίζω ότι κατάλαβα τι φταίει Cmg__. Οι ρυθμίσεις για το άνοιγμα των αρχείων .js μάλλον έχουν χαλάσει. Οι συγκεκριμένες ρυθμίσεις είναι κάπως κρυμμένες, γι αυτό θέλω λίγο την προσοχή σου.

- Από τον Windows Explorer πήγαινε στο μενού Tools -> Folder Options
- Πήγαινε στο tab File Types
- Βρες τον τύπο αρχείου JS - JScript Script File από τη λίστα. Αν δυσκολευτείς πάτα διαδοχικά τα πλήκτρα J και S.
- Πάτησε το κουμπί Advanced
- Από τις διαθέσιμες Actions επέλεξε την Open.
- Πάτησε το κουμπί Edit
- Στο πεδίο Application used to perform action θα πρέπει να γράφει το παρακάτω:

Κώδικας: Επιλογή όλων

C&#58;\WINDOWS\System32\WScript.exe "%1" %*
Αν λείπουν οι τελευταίοι δύο χαρακτήρες τότε το πέρασμα των arguments δε γίνεται και το πρόγραμμα FileSize.js εμφανίζει "Insufficient arguments". Διόρθωσέ το. Παρακάτω είναι τα παράθυρα που θα περάσεις σ'αυτή τη μικρή οδύσσεια:
:)

Εικόνα

Εικόνα

Εικόνα
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 07 Απρ 2005 15:06

Meta apo pampolles prospatheies etyxe na dw se allo arthro soy to link gia ton windows scripter. Ton katevasa kai EPITELOYS leitoyrgise!
1000 eyxaristw!
Τελευταία επεξεργασία από το μέλος Cmg__ την 08 Απρ 2005 00:27, έχει επεξεργασθεί 1 φορά συνολικά.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από ThyClub » 07 Απρ 2005 17:59

Μπορεί να μου εξηγήσει κάποιος τι δικαιώματα έχει ενα javascript?

Δηλαδή τί μπορεί να κάνει χωρίς user confirmation κτλ :question:

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 07 Απρ 2005 20:16

ok
Τελευταία επεξεργασία από το μέλος Cmg__ την 08 Απρ 2005 00:34, έχει επεξεργασθεί 1 φορά συνολικά.

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

Φτιάξτε μόνοι σας χρήσιμα utilities με JavaScript

Δημοσίευση από Cmg__ » 07 Απρ 2005 20:18

ok
Τελευταία επεξεργασία από το μέλος Cmg__ την 08 Απρ 2005 00:34, έχει επεξεργασθεί 1 φορά συνολικά.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες