Actualité informatique
Test comparatif matériel informatique
Jeux vidéo
Astuces informatique
Vidéo
Télécharger
Services en ligne
Forum informatique
01Business



|||-  

Création gadget Windows 7

 

» INTERNET ET RÉSEAUX : bernard53 » WINDOWS : michel69
Ajouter une réponse
 

 
Page photos
 
     
Vider la liste des messages à citer
 
 Page :
1
Auteur
 Sujet :

Création gadget Windows 7

RÉSOLU
Prévenir les modérateurs en cas d'abus 
sayasam
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 15/10/2015 à 20:46:54  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Salutations collègues programmeurs !

Je me suis récemment lancé dans la grande aventure de créer un gadget pour mon petit Windows chéri ! Gadget qui m'indiquerait textuellement la taille de certains dossiers.

(Oui je sais que les gadgets sont dangereux car on peut en installer un faux avec un vrai certificat. Mais ca ne m'intéresse pas et de toute façon j'ai bloqué sidebar.exe dans mon pare-feu)

J'ai donc demandé conseil au grand et magnifique catalogue MSDN qui, comme à son habitude, et plutôt bien foutu.

J'ai créé via Notepad++ mon fichier gadget.xml et Shell.html.

Mais dans ledit fichier html je souhaiterais inclure du code plus... sophistiqué, que j'ai pondu en C# sur Visual Studio.

Ca donne ça :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1.  <head>
  2.    <meta http-equiv="Content-Type" content="text/html; charset=Unicode" />
  3.    <title>Taille dossiers</title>
  4.    <style type=text/css>
  5.      body{
  6.        margin: 0;
  7.        width: 130px;
  8.        height: 75px;
  9.        font-family: segoe ui;
  10.        font-size: 15px;
  11.      }
  12.      #gadgetContent{
  13.        margin-top: 20px;
  14.        width: 130px;
  15.        vertical-align: middle;
  16.        text-align: left;
  17.        overflow: hidden;
  18.      }
  19.    </style>
  20.    <script type="text/C#" language="C#">
  21.      public static long FolderSize(string path){
  22.        long size = 0;
  23.        DirectoryInfo directoryInfo = new DirectoryInfo(path);
  24.        try{
  25.          IEnumerable<FileInfo> files = directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories);
  26.          foreach (FileInfo file in files){
  27.            size += file.Length;
  28.          }
  29.        }
  30.        catch(UnauthorizedAccessException){}
  31.        return size;
  32.      }
  33. // Main
  34.      double taille_films = 0, taille_series = 0, taille_musique = 0;
  35.      string taille_musique_aff="", taille_series_aff="", taille_films_aff="";
  36.      string chemin = "";
  37. // Films
  38.      chemin="D://";
  39.      taille_films+=FolderSize(chemin);
  40.      chemin="E://Films DVDRIP";
  41.      taille_films+=FolderSize(chemin);
  42. // Séries
  43.      chemin="E://Séries";
  44.      taille_series+=FolderSize(chemin);
  45. // Musique
  46.      chemin = "C://Users//Sayasam//Music";
  47.      taille_musique += FolderSize(chemin);
  48.      chemin = "C://Users//Sayasam//Music//iTunes";
  49.      taille_musique -= FolderSize(chemin);
  50. // Affichage
  51.      if (taille_films > 1000000000000){
  52.        taille_films_aff = (taille_films / 1000000000000).ToString()+" To";
  53.      }
  54.      else if (taille_films > 1000000000){
  55.        taille_films_aff = (taille_films / 1000000000).ToString()+" Go";
  56.      }
  57.      else if (taille_films > 1000000){
  58.        taille_films_aff = (taille_films / 1000000).ToString()+" Mo";
  59.      }
  60.      else if (taille_films > 1000){
  61.       taille_films_aff = (taille_films / 1000).ToString()+" Ko";
  62.      }
  63.      else{
  64.        taille_films_aff=taille_films.ToString()+" octets";
  65.      };
  66.      if (taille_musique > 1000000000000){
  67.        taille_musique_aff = (taille_musique / 1000000000000).ToString()+" To";
  68.      }
  69.      else if (taille_musique > 1000000000){
  70.        taille_musique_aff = (taille_musique / 1000000000).ToString()+" Go";
  71.      }
  72.      else if (taille_musique > 1000000){
  73.        taille_musique_aff = (taille_musique / 1000000).ToString()+" Mo";
  74.      }
  75.      else if (taille_musique > 1000){
  76.        taille_musique_aff = (taille_musique / 1000).ToString()+" Ko";
  77.      }
  78.      else{
  79.        taille_musique_aff=taille_musique.ToString()+" octets";
  80.      };
  81.      if (taille_series > 1000000000000){
  82.        taille_series_aff = (taille_series / 1000000000000).ToString()+" To";
  83.      }
  84.      else if (taille_series > 1000000000){
  85.        taille_series_aff = (taille_series / 1000000000).ToString()+" Go";
  86.      }
  87.      else if (taille_series > 1000000){
  88.        taille_series_aff = (taille_series / 1000000).ToString()+" Mo";
  89.      }
  90.      else if (taille_series > 1000){
  91.        taille_series_aff = (taille_series / 1000).ToString()+" Ko";
  92.      }
  93.      else{
  94.        taille_series_aff=taille_series.ToString()+" octets";
  95.      };
  96.    </script>
  97.  </head>
  98.  <body>
  99.    <div id="gadgetContent">
  100.      Films = taille_films_aff // Non ?
  101.    </div>
  102.  </body>
  103. </html>

En gros, je vais calculer la taille de certains dossiers, la mettre en forme pour l'affichage puis l'afficher.

Premièrement, est-ce que le fait de mettre grossièrement :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. <script type="text/C#" language="C#">

suffit à intégrer du code en C# ? J'utilise quand même des fonctions genre .ToString() ou FolderSize() que le fichier html n'est pas censé connaître sans les #include adéquats.

Et si non, comment faire ?

Je précise que le gadget marche plutôt bien mais il m'affiche "Films = taille_films_aff". C'est gentil de sa part mais je m'attendais plutôt à la valeur de taille_films_aff...

Je n'ai pas encore trop commencé la partie sécurité/CSS/rafraîchissement du gadget... C'est secondaire.

Voilà, si quelqu'un de plus calé que moi pouvait m'éclairer la voie... Je ferai le chemin en pensant à lui. (Programmeur et poète à ses heures perdues)
Message édité par Tintin10 le 16/10/2015 à 06:19:31
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 16/10/2015 à 19:04:43  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bonjour. Tu es bien aventurier, avec un script en C# !
Ce langage est un langage qui se compile, alors qu'un script n'est qu'interprété. Par conséquent, ton option ne peut fonctionner.

Pour les gadgets, ce sont de petites applications. Il vaut mieux que tu fasses ça en JavaScript, ou en VBScript.


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
(Publicité)
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 17/10/2015 à 13:20:34  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Je me doutais que ce ne serait pas si simple...

Bon, du coup une solution assez simple est de convertir mon code C# en code Jscript.

Ce que j'ai fait avec SharpKit (car Script# a refusé de collaborer).

Il m'a généré ça :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. /* Generated by SharpKit 5 v5.4.4 */
  2.  
  3. function FolderSize(path){
  4.  var size = 0;
  5.  var directoryInfo = new System.IO.DirectoryInfo.ctor(path);
  6.  try{
  7.    var files = directoryInfo.EnumerateFiles$$String$$SearchOption("*", 1);
  8.    var $it1 = files.GetEnumerator();
  9.    while ($it1.MoveNext()){
  10.      var file = $it1.get_Current();
  11.      size += file.get_Length();
  12.    }
  13.  }
  14.  catch($$e1){}
  15.  return size;
  16. };
  17.  
  18. function Main(){
  19.  var taille_films = 0,taille_series = 0,taille_musique = 0;
  20.  var taille_musique_aff = "",taille_series_aff = "",taille_films_aff = "";
  21.  var chemin = "";
  22.  chemin = "D://";
  23.  taille_films += FolderSize(chemin);
  24.  chemin = "E://Films DVDRIP";
  25.  taille_films += FolderSize(chemin);
  26.  chemin = "E://Séries";
  27.  taille_series += FolderSize(chemin);
  28.  chemin = "C://Users//Sayasam//Music";
  29.  taille_musique += FolderSize(chemin);
  30.  chemin = "C://Users//Sayasam//Music//iTunes";
  31.  taille_musique -= FolderSize(chemin);
  32.  
  33.  if (taille_films > 1000000000000){
  34.    taille_films_aff = (taille_films / 1000000000000).toString() + " To";
  35.  }
  36.  else if (taille_films > 1000000000){
  37.    taille_films_aff = (taille_films / 1000000000).toString() + " Go";
  38.  }
  39.  else if (taille_films > 1000000){
  40.    taille_films_aff = (taille_films / 1000000).toString() + " Mo";
  41.  }
  42.  else if (taille_films > 1000){
  43.    taille_films_aff = (taille_films / 1000).toString() + " Ko";
  44.  }
  45.  else{
  46.    taille_films_aff = taille_films.toString() + " octets";
  47.  }
  48.  if (taille_musique > 1000000000000){
  49.    taille_musique_aff = (taille_musique / 1000000000000).toString() + " To";
  50.  }
  51.  else if (taille_musique > 1000000000){
  52.    taille_musique_aff = (taille_musique / 1000000000).toString() + " Go";
  53.  }
  54.  else if (taille_musique > 1000000){
  55.    taille_musique_aff = (taille_musique / 1000000).toString() + " Mo";
  56.  }
  57.  else if (taille_musique > 1000){
  58.    taille_musique_aff = (taille_musique / 1000).toString() + " Ko";
  59.  }
  60.  else{
  61.    taille_musique_aff = taille_musique.toString() + " octets";
  62.  }
  63.  if (taille_series > 1000000000000){
  64.    taille_series_aff = (taille_series / 1000000000000).toString() + " To";
  65.  }
  66.  else if (taille_series > 1000000000){
  67.    taille_series_aff = (taille_series / 1000000000).toString() + " Go";
  68.  }
  69.  else if (taille_series > 1000000){
  70.    taille_series_aff = (taille_series / 1000000).toString() + " Mo";
  71.  }
  72.  else if (taille_series > 1000){
  73.    taille_series_aff = (taille_series / 1000).toString() + " Ko";
  74.  }
  75.  else{
  76.    taille_series_aff = taille_series.toString() + " octets";
  77.  }
  78. };
Ce qui me semble être honnête, bien que je n'y connaisse absolument rien en java, on m'a dit que c'était assez proche du C.

Seulement, le gadget affiche toujours la même chose, à savoir le nom de la variable et non son contenu.

Ce qui m'amène à me demander : pour afficher le contenu d'une variable en html, il suffit d'écrire le nom de la variable ou il faut incanter des prières vaudou ?

Autre chose qui me laisse perplexe : j'ai ajouté des using dans mon code C# pour que Visual Studio reconnaisse certaines fonctions... Comment il gère ca en Jscript sans using ? (System, System.IO, System.Collections.Generic)
Message édité par Tintin10 le 17/10/2015 à 14:01:48
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 17/10/2015 à 14:07:06  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Attention, JavaScript et Java sont deux langages bien distincts et différents.
Je rapprocherais plutôt le Java du C#, justement (bien que je ne connaisse pas vraiment ce dernier). Il améliore le C++, dont la syntaxe et la gestion sont plus compliquées à gérer. Le C n'est pas un langage par objets, mais un langage impératif, donc il fonctionne différemment.

Si tu veux afficher le contenu d'une variable, je ferais la chose suivante :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. <DIV ID="gadgetContent"/>
  2. <SCRIPT TYPE="text/javascript">
  3.  document.getElementById("gadgetContent" ).innerHTML = taille_film_aff;
Message édité par Tintin10 le 17/10/2015 à 14:08:14

---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 18/10/2015 à 09:24:10  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Ca marche pas... :cry:

Mais... Selon Chrome c'est parce que "taille_films_aff" n'est pas défini. Ce qui soulève PLEIN de questions :

  1. Est-ce que cette bon dieu d'extension VS2010 m'a pondu un code jscript correct ? Surtout pour la fonction FolderSize qui est remplie de hiéroglyphes.
  2. Est-ce qu'il faut appeler le main ?
  3. Est-ce que try/catch est aussi une fonction jscript ?
  4. Comment est-ce qu'il connaît System.IO ?


Sigh... Je sens qu'il reste encore un long chemin à parcourir...

(Publicité)
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 18/10/2015 à 10:14:31  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Dans le cas présent, tu définis deux fonctions. La première ("FolderSize" ) est utilisée par l'autre, appelée "Main". Mais appelles-tu cette dernière ? Je ne pense pas, donc sors directement le code de la fonction "Main" et exécute-le à la volée. C'est le principe du JavaScript : pas besoin de tout définir dans des fonctions, on peut exécuter du code extérieur à des fonctions.


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 18/10/2015 à 10:32:28  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Information pour le moins intéressante. Pour ce qui est de FolderSize, le mieux est sans doute de refaire un code Javascript tout propre :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. function FolderSize(path){
  2.  var fso = new ActiveXObject("Scripting.FileSystemObject");
  3.  c = fso.GetFolder(path);
  4.  return c.size;
  5. };


Seulement il ne reconnaît pas ActiveXObject... Zut et flûte.

(Est-ce que j'ai le droit de retourner directement c.size ou il faut que je passe par une variable intermédiaire ?)
Message édité par Tintin10 le 18/10/2015 à 10:33:49
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 18/10/2015 à 10:35:55  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
ActiveXObject est une classe réservée à Internet Explorer (et certainement aux gadgets aussi).
Pas obligé de faire une variable pour retourner "c.size".
Message édité par Tintin10 le 18/10/2015 à 10:36:30

---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
(Publicité)
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 19/10/2015 à 18:15:25  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Bon, FolderSize a l'air de marcher... Mais seulement pour le dossier Vidéos ! Etrange... Et même suspect.

Dieu que je regrette le mode pas à pas du C#. :cry:

D'autant plus que ladite valeur retournée refuse de laisser convertir en String. Ca pue la mauvaise volonté cette histoire...

Et pour la taille du dossier Music, une fois il renvoie... rien, et une fois "undefined"...

C'est pas possible, il y a un truc...

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1.  <head>
  2.    <meta http-equiv="Content-Type" content="text/html; charset=Unicode" />
  3.    <title>Taille dossiers</title>
  4.    <style type=text/css>
  5.      body{
  6.        margin: 0;
  7.        width: 200px;
  8.        height: 300px;
  9.        font-family: segoe ui;
  10.        font-size: 15px;
  11.      }
  12.      #gadgetContent{
  13.        margin-top: 0px;
  14.        width: 130px;
  15.        vertical-align: middle;
  16.        text-align: left;
  17.        overflow: hidden;
  18.      }
  19.    </style>
  20.    <script type="text/jscript" language="jscript">
  21. /* Generated by SharpKit 5 v5.4.4 */
  22.      function FolderSize(path){
  23. /*var size = 0;
  24. var directoryInfo = new System.IO.DirectoryInfo.ctor(path);
  25. try{
  26. var files = directoryInfo.EnumerateFiles$$String$$SearchOption("*", 1);
  27. var $it1 = files.GetEnumerator();
  28. while ($it1.MoveNext()){
  29. var file = $it1.get_Current();
  30. size += file.get_Length();
  31. }
  32. }
  33. catch($$e1){
  34. }
  35. return size;*/ // OLD
  36.        var fso = new ActiveXObject("Scripting.FileSystemObject" );
  37.        c = fso.GetFolder(path);
  38.        return c.size; // OK
  39.      };
  40. // Main
  41.      var taille_videos = 0, taille_films = 0, taille_series = 0, taille_musique = 0;
  42.      var taille_videos_aff = "", taille_musique_aff = "", taille_series_aff = "", taille_films_aff = "";
  43.      var chemin = "";
  44.      chemin = "C://Users//Sayasam//Videos";
  45.      taille_videos += FolderSize(chemin);
  46.      chemin = "D://";
  47.      taille_films += FolderSize(chemin);
  48.      chemin = "E://Films DVDRIP";
  49.      taille_films += FolderSize(chemin);
  50.      chemin = "E://Séries";
  51.      taille_series += FolderSize(chemin);
  52.      chemin = "C://Users//Sayasam//Music";
  53.      taille_musique += FolderSize(chemin);
  54.      chemin = "C://Users//Sayasam//Music//iTunes";
  55.      taille_musique -= FolderSize(chemin);
  56.      if (taille_videos > 1000000000000){
  57.        taille_videos_aff = (taille_videos / 1000000000000).toString() + " To";
  58.      }
  59.      else if (taille_videos > 1000000000){
  60.        taille_videos_aff = (taille_videos / 1000000000).toString() + " Go";
  61.      }
  62.      else if (taille_videos > 1000000){
  63.        taille_videos_aff = (taille_videos / 1000000).toString() + " Mo";
  64.      }
  65.      else if (taille_videos > 1000){
  66.        taille_videos_aff = (taille_videos / 1000).toString() + " Ko";
  67.      }
  68.      else{
  69.        taille_videos_aff = taille_videos.toString() + " octets";
  70.      }
  71.      if (taille_films > 1000000000000){
  72.        taille_films_aff = (taille_films / 1000000000000).toString() + " To";
  73.      }
  74.      else if (taille_films > 1000000000){
  75.        taille_films_aff = (taille_films / 1000000000).toString() + " Go";
  76.      }
  77.      else if (taille_films > 1000000){
  78.        taille_films_aff = (taille_films / 1000000).toString() + " Mo";
  79.      }
  80.      else if (taille_films > 1000){
  81.        taille_films_aff = (taille_films / 1000).toString() + " Ko";
  82.      }
  83.      else{
  84.        taille_films_aff = taille_films.toString() + " octets";
  85.      }
  86.      if (taille_musique > 1000000000000){
  87.        taille_musique_aff = (taille_musique / 1000000000000).toString() + " To";
  88.      }
  89.      else if (taille_musique > 1000000000){
  90.        taille_musique_aff = (taille_musique / 1000000000).toString() + " Go";
  91.      }
  92.      else if (taille_musique > 1000000){
  93.        taille_musique_aff = (taille_musique / 1000000).toString() + " Mo";
  94.      }
  95.      else if (taille_musique > 1000){
  96.        taille_musique_aff = (taille_musique / 1000).toString() + " Ko";
  97.      }
  98.      else{
  99.        taille_musique_aff = taille_musique.toString() + " octets";
  100.      }
  101.      if (taille_series > 1000000000000){
  102.        taille_series_aff = (taille_series / 1000000000000).toString() + " To";
  103.      }
  104.      else if (taille_series > 1000000000){
  105.        taille_series_aff = (taille_series / 1000000000).toString() + " Go";
  106.      }
  107.      else if (taille_series > 1000000){
  108.        taille_series_aff = (taille_series / 1000000).toString() + " Mo";
  109.      }
  110.      else if (taille_series > 1000){
  111.        taille_series_aff = (taille_series / 1000).toString() + " Ko";
  112.      }
  113.      else{
  114.        taille_series_aff = taille_series.toString() + " octets";
  115.      }
  116. // TEST
  117.      var test = 42;
  118.      test = FolderSize("C://Users//Sayasam//Music" );
  119. // END TEST
  120.    </script>
  121.  </head>
  122.  <body>
  123.    <div id="gadgetContent"></div>
  124.    <SCRIPT TYPE="text/javascript">
  125.      document.writeln("Taille videos ="+taille_videos+"<br>" );
  126.      document.writeln("Taille Musique ="+taille_musique+"<br>" );
  127.      document.writeln("Taille Séries ="+taille_series+"<br>" );
  128.      document.writeln("Taille Films ="+taille_films+"<br>" );
  129.      document.writeln("Taille musique (direct)="+test+"<br>" );
  130.    </SCRIPT>
  131.  </body>
  132. </html>
Message édité par Tintin10 le 19/10/2015 à 19:00:26
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 19/10/2015 à 19:05:17  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Tu as un mode pas à pas dans Internet Explorer 11. Il te suffit de taper la touche F12. Tu as en particulier un onglet Débogueur, et tu peux placer des points d'arrêt.
On verra si c'est un problème d'accès à tes disques. Le JavaScript est un peu capricieux sur le sujet, pour des raisons de sécurité.


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 21/10/2015 à 11:51:50  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
BON. (Ca commence à me courir sur le haricot)

Après avoir installé IE11 (Argh !), quand je charge le fichier html il m'affiche les mêmes choses que le gadget, mais le debugger n'affiche rien et refuse de faire quoi que ce soit. Apparemment ca ne marche que sur les fichiers .js.

Soit, je crée un fichier IE.js avec dedans tout ce qui entre les balises <script=jscript>, et là... Il me sort Accès refusé ligne 19 colonne 4 !

Ce qui correspond au début de :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. return c.size();

Pourtant... J'ai bien une valeur pour le dossier Vidéos.

L'explication que j'y vois, c'est qu'il n'arrive pas à choper la taille du disque D://.

J'ai déjà eu un problème similaire quand j'ai essayé la même chose en C# console : il essaye de choper la taille des fichiers et dossiers cachés, ils refusent, et tout plante. D'où le try/catch.

Je me demande si "D://" est un dossier correct duquel on peut retourner la taille. Car c'est un disque dur à la base. (Même 2 en RAID, en fait...)

EDIT : Tiens tiens, quand je commente les lignes concernant D://, il me sort des valeurs pour tous les dossiers !!! Donc c'est bien le souci.

Par la barbe de Barbe Rousse, on dirait bien que ca marche !

Juste un petit .toFixed(2) à rajouter pour limiter à deux chiffres après la virgule.

BON. (Cette fois-ci je suis content :))

Le seul problème qui persiste reste la mesure de la taille des fichiers de D://.

Peut-être... Si le dossier est dossier racine (IsRootFolder), alors faire un gros foreach(tous les fichiers) puis size+=fichier.size();... Je vais voir de ce côté...

Je suis trop habitué au confort d'un IDE qui m'affiche quelle est l'erreur et à quelle ligne...


EDIT 2 : (The show must go on)

Ca marche nickel tant que D:// ne fait pas partie de l'aventure.

Pour le gérer : j'ai concocté... ça :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. function FolderSize(path){
  2.  var fso = new ActiveXObject("Scripting.FileSystemObject");
  3.  c = fso.GetFolder(path);
  4.  if (c.IsRootFolder == true){
  5.    var tailletotale = 0;
  6.    csub = new enumerator(c.SubFolder);
  7.    cfiles = new enumerator(c.files);
  8.    for (; !csub.atEnd(); csub.moveNext()){
  9.      try{
  10.        tailletotale += csub.item().size;
  11.      }
  12.      catch{
  13.        continue;
  14.      }
  15.    }
  16.    for (; !cfiles.atEnd(); cfiles.moveNext()){
  17.      try{
  18.        tailletotale += cfiles.item().size;
  19.      }
  20.      catch{
  21.        continue;
  22.      }
  23.    }
  24.    return tailletotale;
  25.  }
  26.  else{
  27.    return c.size;
  28.  }
  29. };


Qui, si le dossier est racine, sort la liste de tous ses sous-dossiers, la liste de tous ses fichiers, et additionne les tailles de chacun. Avec un try/catch pour continuer au dossier/fichier suivant si erreur.

Et... Ca n'affiche plus rien depuis que j'ai rajouté les try/catch...

Mais je me demande si :

Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. tailletotale += csub.item().size;
  2. tailletotale += cfiles.item().size;

est correctement fait... Ce que je cherche à faire, c'est :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. tailletotale += csub[i].size;
Message édité par Tintin10 le 21/10/2015 à 18:38:15
(Publicité)
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 21/10/2015 à 19:06:24  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Pour faire fonctionner le débogueur, il faut, après l'avoir affiché et activé, relancer le script (donc F5). Mais je pense que tu l'as compris à force de test.

Néanmoins, cette solution permet de voir les bugs, mais quand on commence à toucher aux fichiers/dossiers, tu constates que ça ne fonctionne plus trop. Les navigateurs refusent en effet d'accéder facilement aux dossiers, pour des raisons de sécurité.
Les gadgets, eux, sont un peu différents. Tu peux déjà essayer de te baser sur la variable :
Code :(Double-cliquez pour supprimer les numéros de ligne)
  1. System.Gadget.path

Qui indique le chemin complet de la localisation du gadget.
On verra après pour l'accès aux autres disques.


---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 22/10/2015 à 11:26:01  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Relancer le script est la première chose que j'ai essayé, qu'est-ce que tu crois... ;) Mais rien.

(D'ailleurs, depuis que j'ai installé IE11, mes gadgets déjà présents -compteur proc et diapo- refusent de s'afficher correctement. Et ça, c'est dégueulasse.)

Je vois mal à quoi pourra bien me servir la variable System.Gadget.Path... Je me fiche pas mal de savoir où est localisé le gadget.

Je vais voir si je peux pas utiliser la méthode .GetDrive() pour connaître la taille occupée du disque.


EDIT : Eurêka, comme disait l'autre.


Il ne voulait pas "D://", mais "D:\\"... Alors que "C://truc" ne lui pose aucun problème... Et en plus les fonctions sont case sensitive.

Je hais ce langage. Mais maintenant tout marche bien. Un grand merci à @Tintin10 et Google pour m'avoir assisté tout au long de cette épreuve.

Message personnel pour Internet Explorer : Spoiler :
Spoiler :


VA. CHIER.

Maintenant reste plus qu'à décorer.
Message édité par sayasam le 22/10/2015 à 11:59:33
  1. config
tintin10
Tu cartonnes ! (de 500 à 999 messages postés) Développeur
  1. Posté le 22/10/2015 à 18:43:45  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
O.K., très bien. Oui, le JavaScript est un peu capricieux.
Citation :


This is bullshit. But I can never remember what "this" refers to !

Par contre, c'est un langage qu'il faut pratiquer, de près ou de loin. Il est central dans l'utilisation du Web, et on tend à passer de plus en plus vers des solutions dynamiques par rapport à des solutions sur serveur. Le Java E.E. ou .NET sont de moins en moins à la mode par rapport à AngularJS.
Ce langage a ses qualités et ses défauts, et n'est pas vraiment fait pour la gestion des dossiers, mais bon, on est obligé de l'utiliser actuellement, donc on fait avec. Les navigateurs aussi.

Pour ton problème avec les autres gadgets :
- reviens à Internet Explorer 10
- ou abaisse la taille de l'affichage à 100 % si tu es sur un écran haute résolution

Je note comme résolu.
Message édité par Tintin10 le 22/10/2015 à 18:44:23

---------------
Configuration matérielle : voir ce lien
Merci de respecter les règles du forum
(Publicité)
sayasam
Bébé forumeur (De 10 à 49 messages postés)
  1. Posté le 22/10/2015 à 19:03:39  
  1. answer
  1. Prévenir les modérateurs en cas d'abus
 
Je vais même faire mieux : une bonne vielle restauration système des familles. Coup de bol, j'en ai une récente. Et m...

J'ai désinstallé Internet Explorer depuis bien longtemps (pas de ça sur ma merveilleuse machine de guerre).

Spoiler :


 :evil: C# Über Alles ! :evil:
Message édité par sayasam le 22/10/2015 à 19:06:09
 Page :
1

Aller à :
 

Sujets relatifs
Logiciel de création de formulaire Ou obtenir un CD de Windows XP media center edition 2005 ?
déplacemnt/création dossier ELEMENT INTROUVABLE  
Plus de sujets relatifs à : Création gadget Windows 7