Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Place libre sur un disque | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Place libre sur un disque Mer 7 Oct 2015 - 16:21 | |
| Une toute pitite sub, sans commentaires, tout est dans le titre: - Code:
-
Diskfree("C:") message "disque C: "+clipboard_string_paste$+" M. libres" END
SUB Diskfree(v$) ' Place disponible sur le volume v$ (de la forme 'X:') -> en Mb dans le clipboard DIM_LOCAL a$ EXECUTE_WAIT "cmd.exe /c DIR /-C "+v$+" | findstr "+CHR$(34)+"libres"+CHR$(34)+" | clip" a$ = TRIM$(MID$(CLIPBOARD_STRING_PASTE$,24,16)) CLIPBOARD_STRING_COPY LEFT$(a$,LEN(a$)-6) END_SUB | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 7 Oct 2015 - 16:25 | |
| Chouette cette Sub ! Tu connais la démarche pour le site... Ps : Tu as un peu de temps, j' ai pas encore trouvé l' erreur qui bug la page "Procédures" du site. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 17:15 | |
| Bonjour JL35, Panoramic dispose d'une instruction pour faire cela. Il suffit après de mettre en forme le résultat. - Code:
-
message str$(disk_kilo_free("c"))+" octets libres sur C:\" A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 18:14 | |
| Mince alors, je l'avais complètement zappée celle-ci ! Merci bignono pour ce rappel, et du coup ma petite sub est nulle et non avenue. @ygeronimi, prends ton temps, je n'en ai plus besoin ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 18:30 | |
| Je dirais mieux : DISK_KILO_FREE(D) retourne une valeur en KO ! C’est plus parlant qu’en MO ! @Bignono - Code:
-
message str$(disk_kilo_free("c"))+" kilo-octets libres sur C:\" | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 7 Oct 2015 - 20:18 | |
| @ JL35
Je vais en avoir besoin. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 20:55 | |
| Pas de ma sub en tout cas mais de la ligne de bignono (+papydall) qui fait ça en encore plus simple, une seule instruction ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 7 Oct 2015 - 21:14 | |
| Moi je parlais du temps... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 21:48 | |
| Ça c'est plus dur à trouver ! Et comme le temps c'est de l'argent et que l'argent ne fait pas le bonheur... bon, j'arrête là. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Place libre sur un disque Mer 7 Oct 2015 - 22:56 | |
| - Code:
-
message "taille du disque C : " + str$(disk_kilo_size("C")) + " kilo-octets" | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 11:18 | |
| Pour me rattraper, et suite à l'excellente suggestion de l'ami bignono, une petite sub qui donne les caractéristiques de tous les volumes connectés (disques, clés...): nom, volume total, volume disponible, pourcentage disponible. Les volumes sont donnés en méga-octets. Avec un exemple d'appel: - Code:
-
DIM a$,b$,k%,r%
WIDTH 0,400: HEIGHT 0,100: BORDER_SMALL 0: CAPTION 0," - VOLUMES MONTÉS -" FONT_NAME 0,"Lucida Console": FONT_SIZE 0,10 GRID 1: WIDTH 1,315: HEIGHT 1,150: GRID_COLUMN 1,5: GRID_ROW 1,2 GRID_ONE_COLUMN_WIDTH 1,1,24: GRID_ONE_COLUMN_WIDTH 1,2,117: GRID_ONE_COLUMN_WIDTH 1,5,36 GRID_ROW_HEIGHT 1,19 GRID_WRITE 1,1,2,"Volume": GRID_WRITE 1,1,3,"Total": GRID_WRITE 1,1,4,"Libre" GRID_WRITE 1,1,5,"%" WIDTH 0,WIDTH(1)+20
Diskinfo() a$ = clipboard_string_paste$ k% = INSTR(a$,CHR$(13)) r% = 1 WHILE k% > 0 r% = r%+1: b$ = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+2) GRID_WRITE 1,r%,1,LEFT$(b$,2): k% = INSTR(b$,";") GRID_WRITE 1,r%,2,RIGHT_POS$(LEFT$(b$,k%-1),4): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,3,LEFT$(b$,k%-1): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,4,LEFT$(b$,k%-1): GRID_WRITE 1,r%,5,RIGHT_POS$(b$,k%+1) k% = INSTR(a$,CHR$(13)) END_WHILE GRID_ROW 1,r%: HEIGHT 1,r%*21: HEIGHT 0,HEIGHT(1)+38 END ' ============================================================================== SUB Diskinfo() ' Volumes actifs + taille totale + taille disponible (en Mo) -> clipboard ' 1 ligne par volume, de la forme ' X: NomVolume;Taille_totale;Taille_libre;Pourcentage_libre DIM_LOCAL ret%,lect%,drv$,mm%,i%,k%,v$,a$,b$,t%,l%,p% DLL_ON "kernel32.dll": ret% = DLL_CALL0("GetLogicalDrives") drv$ = "" FOR lect% = 0 TO 25 IF BIN_AND(ret%,POWER(2,lect%))>0 THEN drv$=drv$+CHR$(65+lect%)+":"+CHR$(13)+CHR$(10) NEXT lect% DLL_OFF mm% = 950: MEMO mm%: HIDE mm% item_add mm%,drv$ b$ = "" FOR i% = 1 TO COUNT(mm%) v$ = ITEM_READ$(mm%,i%) EXECUTE_WAIT "cmd.exe /c VOL "+v$+" | clip" a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,"s'appelle") IF k%>0 AND v$<>"" a$ = RIGHT_POS$(a$,k%+10): k% = INSTR(a$,CHR$(13)) a$ = v$+" "+LEFT$(a$,k%-1): ' lettre + nom du volume t% = DISK_KILO_SIZE(LEFT$(v$,1))/1000: ' taille totale en Moctets l% = DISK_KILO_FREE(LEFT$(v$,1))/1000: ' taille libre en Moctets p% = 100*l%/t%: ' pourcentage disponible b$ = b$+a$+";"+STR$(t%)+";"+STR$(l%)+";"+STR$(p%)+"% "+CHR$(13)+CHR$(10) END_IF NEXT i% CLIPBOARD_STRING_COPY b$ END_SUB ' ============================================================================== ce qui donne: | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 11:27 | |
| Là je reconnais de l'excellent JL35 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 13:37 | |
| Merci Jicehel, ça peut faire un petit exécutable utilitaire à mettre sur le bureau (comme j'ai fait pour moi). J'ai changé le CAPTION 0," - VOLUMES MONTÉS -" (ligne 4) par - Code:
-
CAPTION 0," - VOLUMES MONTÉS - (tailles en Mb) -" pour que ce soit moins ambigü. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 14:00 | |
| Chez moi, ça ne donne que ça et rien de plus! A croire que je n'ai plus de volume! Je réclame mes volumes | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 14:41 | |
| Manifestement, la sub ne te renvoie rien du tout ! tu es sûr que tu as des volumes ?? Tu peux déjà regarder si la dll te renvoie bien la liste des volumes connectés dans drv$ (une ligne par volume) en faisant dans la sub un message drv$ après le dll_off, pour voir... tout se passe comme si elle ne te renvoyait rien du tout. Ou mieux, tester le code retour ret% de la fonction GetLogicalDrives de Kernel32.dll C'est une valeur sur 32 bits, chaque bit de 0 à 25 représentant un volume connecté: bit 0 = 1: volume A: bit 1 = 1 : volume B: ... bit 25 = 1: volume Z: | |
| | | Invité Invité
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 15:14 | |
| Excuses-moi de te répondre (suite à un fâcheux accident que je n'ai pas compris), au vu du résultat de Papydall.
J'ai essayé le programme qui ne nécessite pas de réglage particulier (je ne peux pas rester). Le retour de la sub est : D avec recovery , E: HP_TOOL, et Z:RAM. Il n'y a rien en ce qui concerne C:. Manifestement quelque chose ne va pas, et je ne suis pas sur que tu en sois la cause. Là je pars. |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 15:28 | |
| Bon, manifestement il doit y avoir un problème avec kernel32.dll, chez moi ça marche très bien, il faudrait regarder juste derrière ce que renvoie la dll, comme je disais plus haut. Je ne peux pas en dire plus sans avoir les éléments en main.
Et je m'aperçois qu'il y a une fonction de l'incontournable KGF.dll: GetVolumeList qui donne tous ces renseignements sur les volumes connectés. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 17:04 | |
| Bonjour JL35 J'ai la même chose que papydall Mais au lieu d'utiliser une dll pour trouver les disques installés, il y a aussi un instruction panoramic pour ça: - Code:
-
dim i for i=65 to 90 if disk_exists(chr$(i))=1 then print chr$(i);":\" next i
A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 17:35 | |
| Salut bignono, Je ne vois pas bien pourquoi ça ne marche pas chez vous, probablement un problème d'accès à kernel32.dll, j"ai également utilisé la commande fsutil, bien pratique, mais pour celle-là il faut avoir les droits d'administrateur... Tu as raison, je vais voir pour utiliser la commande en pur Panoramic. Et merci à toi pour tes judicieuses remarques ! PS il me semble que j'avais déjà essayé le Dir_Exists, malheureusement pour certains disques il s'affiche une erreur: | |
| | | Invité Invité
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 18:44 | |
| Je viens de jeter un oeil sur ton programme JL35. Le problème pour "C" pour moi, est qu'il renvoi un message en ligne 44: le volume dans le lecteur C n'a pas de nom etc..., et k% = 0.
Donc il te faut revoir ceci avec le rapport donné par le programme, c'est à dire: gérer les disques qui n'ont pas de nom. La ligne suivante du message, il donne le nom de série. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 18:55 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 19:05 | |
| Je pense avoir posté un code qui affiche la liste des lecteurs disponibles sur le PC. Mais je ne me rappelle plus où et quand. Le revoilà - Code:
-
rem ============================================================================ rem GetLogicalDrives rem ============================================================================ rem Déterminer la liste des lecteurs logiques disponibles sur le PC. rem Un appel à la fonction GetLogicalDrives de la kernel.dll renvoie une valeur rem décimale. rem Cette valeur décimale correspond à une valeur en binaire sur 32 bits. rem Le bit le moins significatif (le 1er bit à partir de la droite) correspond rem au lecteur A:\, le bit suivant correspond au lecteur B:\ et aisi de suite. rem Le 26ème bit correspond au lecteur Z:\. rem Les bits de 27 à 32 sont forcement à zéro. rem ---------------------------------------------------------------------------- rem Pour déterminer quels sont les bits à 1, on utilse la fonction BIN_AND(v1,v2). rem Avec v1 = la valeur de retour de GetLogicalDrives rem et v2 = 2 à la puissance le numéro du bit à tester. rem Si le résultat de BIN_AND(v1,v2) est positif, cela prouve que le bit à tester rem est mis à 1 et que le lecteur qui lui correspond existe. rem ============================================================================ dim ret%,lecteur,driv$ width 0,1000 alpha 1 : left 1,10 : font_name 1,"tahoma" : font_size 1,16 : font_color 1,0,0,255 alpha 2 : left 2,500 : font_name 2,"tahoma" : font_size 2,16 : font_color 2,0,0,255 dll_on "kernel32.dll" ret% = dll_call0("GetLogicalDrives") driv$ = "Liste des lecteurs logiques disponibles sur le PC."+chr$(13)+ chr$(13) driv$ = driv$ + "Par GetLogicalDrives de kernell.dll" + chr$(13)+chr$(13) for lecteur = 0 to 25 if bin_and(ret%,power(2,lecteur))> 0 driv$ = driv$ + string$(30," ") +chr$(65+lecteur) + ":\ existe " + chr$(13) end_if next lecteur caption 1,driv$
dll_off rem ============================================================================
driv$ = "Liste des lecteurs logiques disponibles sur le PC."+chr$(13)+ chr$(13) driv$ = driv$ + "Par la fonction disk_exists de Panoramic" + chr$(13) + chr$(13) for lecteur = 0 to 25 if disk_exists (chr$(65+lecteur)) > 0 driv$ = driv$ + string$(30," ") +chr$(65+lecteur) + ":\ existe " + chr$(13) end_if next lecteur caption 2,driv$ rem ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 20:05 | |
| J'ai essayé avec le Disk_Exists - Code:
-
DIM a$,b$,k%,r%
WIDTH 0,400: HEIGHT 0,100: BORDER_SMALL 0: CAPTION 0," - VOLUMES MONTÉS -" FONT_NAME 0,"Lucida Console": FONT_SIZE 0,10: COLOR 0,255,0,0 GRID 1: TOP 1,2: LEFT 1,2: WIDTH 1,315: HEIGHT 1,150: GRID_COLUMN 1,5: GRID_ROW 1,2 GRID_ONE_COLUMN_WIDTH 1,1,24: GRID_ONE_COLUMN_WIDTH 1,2,117: GRID_ONE_COLUMN_WIDTH 1,5,36 GRID_ROW_HEIGHT 1,19 GRID_WRITE 1,1,2,"Volume": GRID_WRITE 1,1,3,"Total": GRID_WRITE 1,1,4,"Libre" GRID_WRITE 1,1,5,"%" WIDTH 0,WIDTH(1)+20
Diskinfo() a$ = CLIPBOARD_STRING_PASTE$ k% = INSTR(a$,CHR$(13)) r% = 1 WHILE k% > 0 r% = r%+1: b$ = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+2) GRID_WRITE 1,r%,1,LEFT$(b$,2): k% = INSTR(b$,";") GRID_WRITE 1,r%,2,RIGHT_POS$(LEFT$(b$,k%-1),4): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,3,LEFT$(b$,k%-1): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,4,LEFT$(b$,k%-1): GRID_WRITE 1,r%,5,RIGHT_POS$(b$,k%+1) k% = INSTR(a$,CHR$(13)) END_WHILE GRID_ROW 1,r%: HEIGHT 1,r%*21: HEIGHT 0,HEIGHT(1)+38 END ' ============================================================================== SUB Diskinfo() ' Volumes actifs + taille totale + taille disponible (en Mo) -> clipboard ' 1 ligne par volume, de la forme ' X: NomVolume;Taille_totale;Taille_libre;Pourcentage_libre DIM_LOCAL mm%,i%,k%,v$,a$,b$,t%,l%,p% mm% = 950: MEMO mm%: HIDE mm% FOR i% = 0 TO 25 IF DISK_EXISTS(CHR$(65+i%))>0 THEN ITEM_ADD mm%,CHR$(65+i%)+":" NEXT i% b$ = "" FOR i% = 1 TO COUNT(mm%) v$ = ITEM_READ$(mm%,i%) EXECUTE_WAIT "cmd.exe /c VOL "+v$+" | clip" a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,"s'appelle") IF k%>0 AND v$<>"" a$ = RIGHT_POS$(a$,k%+10): k% = INSTR(a$,CHR$(13)) a$ = v$+" "+LEFT$(a$,k%-1): ' lettre + nom du volume t% = DISK_KILO_SIZE(LEFT$(v$,1))/1000: ' taille totale en Moctets l% = DISK_KILO_FREE(LEFT$(v$,1))/1000: ' taille libre en Moctets p% = 100*l%/t%: ' pourcentage disponible b$ = b$+a$+";"+STR$(t%)+";"+STR$(l%)+";"+STR$(p%)+"% "+CHR$(13)+CHR$(10) END_IF NEXT i% CLIPBOARD_STRING_COPY b$ DELETE mm% END_SUB ' ============================================================================== mais j'ai toujours l'erreur mentionnée plus haut qui ne doit intervenir que dans certaines configurations (prises usb ?): 'Il n'y a pas de disque dans le lecteur. Insérez un disque dans le lecteur...'.Pour ce qui concerne les volumes sans nom (Cosmos) effectivement il doit y avoir un problème, je n'ai pas le cas chez moi, je vais regarder. Avec Kernel32.dll, et pour traiter le cas des volumes sans nom: - Code:
-
DIM a$,b$,k%,r%
WIDTH 0,400: HEIGHT 0,100: BORDER_SMALL 0 CAPTION 0," - VOLUMES MONTÉS - (tailles en Mb) -" FONT_NAME 0,"Lucida Console": FONT_SIZE 0,10: COLOR 0,255,0,0 GRID 1: TOP 1,2: LEFT 1,2: WIDTH 1,315: HEIGHT 1,150: GRID_COLUMN 1,5: GRID_ROW 1,2 GRID_ONE_COLUMN_WIDTH 1,1,24: GRID_ONE_COLUMN_WIDTH 1,2,117: GRID_ONE_COLUMN_WIDTH 1,5,36 GRID_ROW_HEIGHT 1,19 GRID_WRITE 1,1,2,"Volume": GRID_WRITE 1,1,3,"Total": GRID_WRITE 1,1,4,"Libre" GRID_WRITE 1,1,5,"%" WIDTH 0,WIDTH(1)+20
Diskinfo() a$ = clipboard_string_paste$ k% = INSTR(a$,CHR$(13)) r% = 1 WHILE k% > 0 r% = r%+1: b$ = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+2) GRID_WRITE 1,r%,1,LEFT$(b$,2): k% = INSTR(b$,";") GRID_WRITE 1,r%,2,RIGHT_POS$(LEFT$(b$,k%-1),4): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,3,LEFT$(b$,k%-1): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,4,LEFT$(b$,k%-1): GRID_WRITE 1,r%,5,RIGHT_POS$(b$,k%+1) k% = INSTR(a$,CHR$(13)) END_WHILE GRID_ROW 1,r%: HEIGHT 1,r%*21: HEIGHT 0,HEIGHT(1)+38 END ' ============================================================================== SUB Diskinfo() ' Volumes actifs + taille totale + taille disponible (en Mo) -> clipboard ' 1 ligne par volume, de la forme ' X: NomVolume;Taille_totale;Taille_libre;Pourcentage_libre DIM_LOCAL ret%,lect%,drv$,mm%,nn%,i%,k%,v$,a$,b$,t%,l%,p% DLL_ON "kernel32.dll": ret% = DLL_CALL0("GetLogicalDrives") drv$ = "" FOR lect% = 0 TO 25 IF BIN_AND(ret%,POWER(2,lect%))>0 THEN drv$=drv$+CHR$(65+lect%)+":"+CHR$(13)+CHR$(10) NEXT lect% DLL_OFF mm% = 950: MEMO mm%: HIDE mm% item_add mm%,drv$ b$ = "" FOR i% = 1 TO COUNT(mm%) v$ = ITEM_READ$(mm%,i%) EXECUTE_WAIT "cmd.exe /c VOL "+v$+" | clip" a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,"s'appelle"): nn% = 0 IF k% = 0 THEN k% = INSTR(a$,"n'a pas de nom"): IF k%>0 THEN nn% = 1 IF k%>0 AND v$<>"" a$ = RIGHT_POS$(a$,k%+10): k% = INSTR(a$,CHR$(13)) IF nn% = 0 a$ = v$+" "+LEFT$(a$,k%-1): ' lettre + nom du volume ELSE a$ = v$+" (pas de nom)" END_IF t% = DISK_KILO_SIZE(LEFT$(v$,1))/1000: ' taille totale en Moctets l% = DISK_KILO_FREE(LEFT$(v$,1))/1000: ' taille libre en Moctets p% = 100*l%/t%: ' pourcentage disponible b$ = b$+a$+";"+STR$(t%)+";"+STR$(l%)+";"+STR$(p%)+"% "+CHR$(13)+CHR$(10) END_IF NEXT i% CLIPBOARD_STRING_COPY b$ END_SUB ' ============================================================================== | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 21:29 | |
| Et maintenant, une version qui ne fait appel ni à Dir_Exists, ni à Kernel32.dll, mais à un script dans un fichier batch, ça devrait marcher pour tout le monde cette fois-ci ? : - Code:
-
DIM a$,b$,k%,r%
WIDTH 0,400: HEIGHT 0,100: BORDER_SMALL 0 CAPTION 0," - VOLUMES MONTÉS - (tailles en Mb) -" FONT_NAME 0,"Lucida Console": FONT_SIZE 0,10: COLOR 0,255,0,0 GRID 1: TOP 1,2: LEFT 1,2: WIDTH 1,315: HEIGHT 1,150: GRID_COLUMN 1,5: GRID_ROW 1,2 GRID_ONE_COLUMN_WIDTH 1,1,24: GRID_ONE_COLUMN_WIDTH 1,2,117: GRID_ONE_COLUMN_WIDTH 1,5,36 GRID_ROW_HEIGHT 1,19 GRID_WRITE 1,1,2,"Volume": GRID_WRITE 1,1,3,"Total": GRID_WRITE 1,1,4,"Libre" GRID_WRITE 1,1,5,"%" WIDTH 0,WIDTH(1)+20
Diskinfo() a$ = clipboard_string_paste$ k% = INSTR(a$,CHR$(13)) r% = 1 WHILE k% > 0 r% = r%+1: b$ = LEFT$(a$,k%-1): a$ = RIGHT_POS$(a$,k%+2) GRID_WRITE 1,r%,1,LEFT$(b$,2): k% = INSTR(b$,";") GRID_WRITE 1,r%,2,RIGHT_POS$(LEFT$(b$,k%-1),4): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,3,LEFT$(b$,k%-1): b$ = RIGHT_POS$(b$,k%+1) k% = INSTR(b$,";"): GRID_WRITE 1,r%,4,LEFT$(b$,k%-1): GRID_WRITE 1,r%,5,RIGHT_POS$(b$,k%+1) k% = INSTR(a$,CHR$(13)) END_WHILE GRID_ROW 1,r%: HEIGHT 1,r%*21: HEIGHT 0,HEIGHT(1)+38 END ' ============================================================================== SUB Diskinfo() ' Volumes actifs + taille totale + taille disponible (en Mo) -> clipboard ' 1 ligne par volume, de la forme ' X: NomVolume;Taille_totale;Taille_libre;Pourcentage_libre DIM_LOCAL q$,fb$,ret%,lect%,drv$,mm%,nn%,i%,k%,v$,a$,b$,t%,l%,p% q$ = CHR$(34)+"X"+CHR$(34) fb$ = "C:\TEMP\Tbat.bat": ' <===== TEMPORAIRE, AJUSTER ÉVENTUELLEMENT ! ======== FILE_OPEN_WRITE 9,fb$ FILE_WRITELN 9,"@echo off" ' infos sur les volumes si argument quelconque, sinon seulement les lettres de volumes FILE_WRITELN 9,"set INFO=%1" FILE_WRITELN 9,"call :Drive A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" FILE_WRITELN 9,"set INFO=" FILE_WRITELN 9,"goto :EOF" FILE_WRITELN 9,":Drive" FILE_WRITELN 9,"vol %1: > nul 2>nul" FILE_WRITELN 9,"If ERRORLEVEL 1 goto Next" FILE_WRITELN 9,"if not "+q$+"%INFO%=="+q$+" (vol %1:) else echo %1:" FILE_WRITELN 9,":Next" FILE_WRITELN 9,"shift" FILE_WRITELN 9,"if NOT "+q$+"%1=="+q$+" goto :Drive" FILE_CLOSE 9 EXECUTE_WAIT "CMD.exe /C "+fb$+" | clip" FILE_DELETE fb$ mm% = 950: MEMO mm%: HIDE mm% CLIPBOARD_PASTE mm% b$ = "" FOR i% = 1 TO COUNT(mm%) v$ = ITEM_READ$(mm%,i%) EXECUTE_WAIT "cmd.exe /c VOL "+v$+" | clip" a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,"s'appelle"): nn% = 0 IF k% = 0 THEN k% = INSTR(a$,"n'a pas de nom"): IF k%>0 THEN nn% = 1 IF k%>0 AND v$<>"" a$ = RIGHT_POS$(a$,k%+10): k% = INSTR(a$,CHR$(13)) IF nn% = 0 a$ = v$+" "+LEFT$(a$,k%-1): ' lettre + nom du volume ELSE a$ = v$+" (pas de nom)" END_IF t% = DISK_KILO_SIZE(LEFT$(v$,1))/1000: ' taille totale en Moctets l% = DISK_KILO_FREE(LEFT$(v$,1))/1000: ' taille libre en Moctets p% = 100*l%/t%: ' pourcentage disponible b$ = b$+a$+";"+STR$(t%)+";"+STR$(l%)+";"+STR$(p%)+"% "+CHR$(13)+CHR$(10) END_IF NEXT i% CLIPBOARD_STRING_COPY b$ END_SUB ' ============================================================================== | |
| | | Invité Invité
| Sujet: Re: Place libre sur un disque Jeu 8 Oct 2015 - 22:47 | |
| Je viens de tester la correction avec kerner32, cette fois-ci, ça fonctionne chez moi. |
| | | Contenu sponsorisé
| Sujet: Re: Place libre sur un disque | |
| |
| | | | Place libre sur un disque | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |