FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Jicehel Hier à 23:19

» Ras la casquette...
par Yannick Hier à 18:48

» Problème avec 'instr_last'.
par Yannick Hier à 18:42

» Jeu de l'oie stratégique
par jjn4 Jeu 23 Mar 2017 - 20:46

» Suite aux dernières commandes
par Yannick Jeu 23 Mar 2017 - 16:00

» Aide (imprimable) sur PANORAMIC avec exemples
par papydall Jeu 23 Mar 2017 - 14:28

» Jeu de l'OIE électronique
par jjn4 Mer 22 Mar 2017 - 18:26

» Jeu de l'oie interplanétaire
par jean_debord Mar 21 Mar 2017 - 11:11

» Problème de création d'exécutable.
par Yannick Mar 21 Mar 2017 - 5:21

» Un bug avec USER_EVENT ?
par Klaus Lun 20 Mar 2017 - 17:41

» Bienvenue Cherrie merrie !
par Yannick Lun 20 Mar 2017 - 3:55

» Bienvenue à v.rousseau
par Yannick Dim 19 Mar 2017 - 16:26

» Panoramicien, es-tu là ?
par papydall Dim 19 Mar 2017 - 3:48

» Charger des icones sans fichiers...
par Laurent (Minibug) Sam 18 Mar 2017 - 21:52

» Compilateur FBPano
par papydall Jeu 16 Mar 2017 - 14:50

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mars 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier

Partagez | 
 

 Place libre sur un disque

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Place libre sur un disque   Mer 7 Oct 2015 - 17: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7304
Age : 45
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 7 Oct 2015 - 17:25

Chouette cette Sub !

Tu connais la démarche pour le site... Laughing

Ps : Tu as un peu de temps, j' ai pas encore trouvé l' erreur
qui bug la page "Procédures" du site.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1065
Age : 59
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 18: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 19: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 ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5256
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 19: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:\"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 7304
Age : 45
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 7 Oct 2015 - 21:18

@ JL35

Je vais en avoir besoin.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 21: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7304
Age : 45
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 7 Oct 2015 - 22:14

Moi je parlais du temps... drunken

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 22:48

Ça c'est plus dur à trouver ! Smile
Et comme le temps c'est de l'argent et que l'argent ne fait pas le bonheur... bon, j'arrête là.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5256
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Place libre sur un disque   Mer 7 Oct 2015 - 23:56

Code:
message "taille du disque C : " + str$(disk_kilo_size("C")) + " kilo-octets"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 12: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:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5793
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 12:27

Là je reconnais de l'excellent JL35 Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 14: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ü.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5256
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 15: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 affraid
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 15:41

Manifestement, la sub ne te renvoie rien du tout ! scratch 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:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 16: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.
Revenir en haut Aller en bas
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 16: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1065
Age : 59
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 18: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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 18: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:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 19: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.
Revenir en haut Aller en bas
Klaus

avatar

Nombre de messages : 9646
Age : 67
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 19:55

Bien vu, Cosmos70 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5256
Age : 66
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 20: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 ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 21: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
' ==============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5827
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 22: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
' ==============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Place libre sur un disque   Jeu 8 Oct 2015 - 23:47

Je viens de tester la correction avec kerner32, cette fois-ci, ça fonctionne chez moi.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Place libre sur un disque   

Revenir en haut Aller en bas
 
Place libre sur un disque
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» [Résolu] disparition de place sur le disque dur
» [Résolu] disque dur plein. Comment faire de la place?
» [Résolu] Disque dur externe
» déplacer le dossier Utilisateur (complet) sur le disque D
» Mon PC portable perd de la mémoire

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Présentation et bavardage-
Sauter vers: