Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1419 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Obtenir le nom long du fichier par clic droit

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBS] Obtenir le nom long du fichier par clic droit

n°823461
TheBeginne​r
Posté le 15-08-2004 à 13:11:07  profilanswer
 

Bonjour,
 
Je souhaiterai utiliser le nom long d'un fichier en cliquant avec le bouton droit dessus.
Or ce que j'obtiens en paramètre est le nom court. :(
Par exemple au lieu d'obtenir "c:\temp\pamplemousse.txt", j'obtiens "c:\temp\pample-1.txt" (remplacez - par un tilde)
 
Merci pour vos réponses.

mood
Publicité
Posté le 15-08-2004 à 13:11:07  profilanswer
 

n°824298
prog1001
Posté le 16-08-2004 à 15:46:47  profilanswer
 

Salut !!!
 
Coles ce code dans la zone déclaration d'une forme, mets un commondialog, executes et fait un clique droit sur la forme et tu obtiendras le nom court du fichier selectionné. Si tu voulais que ce soit sur le clique droit d'une FileListBox c'est pareil! (File1_MouseUp (...)) :)  
 

Code :
  1. Private Declare Function GetShortPathName Lib "KERNEL32.DLL" Alias "GetShortPathNameA" _
  2.                                          (ByVal lpctstrLongName As String, _
  3.                                           ByVal lptstrShortName As String, _
  4.                                           ByVal bufLen As Long) As Long
  5. Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  6. Select Case Button
  7.     Case 2
  8. On Error GoTo Fin
  9.     CommonDialog1.CancelError = True
  10.     CommonDialog1.ShowOpen
  11.     MsgBox Get_Short_Name(CommonDialog1.FileName)
  12. Fin:
  13. End Select
  14. End Sub
  15. Function Get_Short_Name(LongStr As String) As String
  16.         Dim ShortStr As String
  17.         Dim lStrLen As Long, lRet As Long
  18.         lRet = GetShortPathName(LongStr, ShortStr, lStrLen)
  19.         ShortStr = String(lRet, " " )
  20.         lRet = GetShortPathName(LongStr, ShortStr, lRet)
  21.         Get_Short_Name = ShortStr
  22. End Function


 :bounce:

n°824770
TheBeginne​r
Posté le 17-08-2004 à 10:02:10  profilanswer
 

Salut prog1001,
Merci pour ta réponse mais :
- je veux juste écrire un prog en VB Script (que je lance à partir du menu contextuel de Windows)
- c'est le nom long dont j'ai besoin car par défaut c'est le nom court que ça me retourne ;)

n°824804
pumpkin031​2
Posté le 17-08-2004 à 10:39:24  profilanswer
 

Code :
  1. '-----------------------------------------------------------------------------------
  2. '-- Prés-requis : Référencement de la bibliotheque "Microsoft Sripting Runtime"
  3. '-----------------------------------------------------------------------------------
  4. Function NmComplet (Fichier as String) as String
  5. Dim fso As New FileSystemObject
  6. Dim ts As TextStream
  7. Set ts = fso.OpenTextFile(Fichier)
  8. NmComplet = fso.GetAbsolutePathName(Fichier)
  9. ts.Close
  10. End Function

n°825166
prog1001
Posté le 17-08-2004 à 15:39:30  profilanswer
 

TheBeginner a écrit :

- je veux juste écrire un prog en VB Script (que je lance à partir du menu contextuel de Windows)
- c'est le nom long dont j'ai besoin car par défaut c'est le nom court que ça me retourne ;)


 
Ben c'est l'inverse :
 

Code :
  1. Private Declare Function GetLongPathName Lib "KERNEL32.DLL" Alias "GetLongPathNameA" _
  2.                                          (ByVal lptstrShortName As String, _
  3.                                           ByVal lpctstrLongName As String, _
  4.                                           ByVal bufLen As Long) As Long
  5. Function Get_Long_Name(CourtStr As String) As String
  6.         Dim LongStr As String
  7.         Dim lStrLen As Long, lRet As Long
  8.         lRet = GetLongPathName(CourtStr, LongStr, lStrLen)
  9.         LongStr = String(lRet, " " )
  10.         lRet = GetLongPathName(CourtStr, LongStr, lRet)
  11.         Get_Long_Name = LongStr
  12. End Function


 
Le fso c'est bien aussi !
 :bounce:


Message édité par prog1001 le 17-08-2004 à 15:40:15
n°827733
TheBeginne​r
Posté le 20-08-2004 à 14:25:25  profilanswer
 

Merci pour vos réponses mais je suis vraiment newbie de chez newbie et ça ne marche pas. :(
 
Je vous poste mon script, cela sera sûrement plus facile.
 

Citation :


Dim shell, args, fso, f
Set args  = Wscript.Arguments
Set shell = WScript.CreateObject("WScript.Shell" )
Set fso   = WScript.CreateObject("Scripting.FileSystemObject" )
 
If args.count=0 Then  
' Auto-installation
 Script=Wscript.ScriptFullName
 Key="HKEY_CLASSES_ROOT\*\shell\test_vbs\"
 shell.RegWrite Key,"Test VBS"
 Command="cscript """ & Script & """ ""%1"""
 shell.RegWrite Key & "command\",Command
 MsgBox "Script "& Script &" installé", vbInformation, "Test VBS"
 wscript.quit
End If
 
path=args(0)
 
set f=Get_Long_Name(path)
MsgBox f
 
Private Declare Function GetLongPathName Lib "KERNEL32.DLL" Alias "GetLongPathNameA" _
                                           (ByVal lptstrShortName As String, _
                                            ByVal lpctstrLongName As String, _
                                            ByVal bufLen As Long) As Long
 
Function Get_Long_Name(CourtStr As String) As String
          Dim LongStr As String
          Dim lStrLen As Long, lRet As Long
 
          lRet = GetLongPathName(CourtStr, LongStr, lStrLen)
          LongStr = String(lRet, " " )
          lRet = GetLongPathName(CourtStr, LongStr, lRet)
          Get_Long_Name = LongStr
End Function

n°827793
prog1001
Posté le 20-08-2004 à 15:19:02  profilanswer
 

Comme ça, ça devrai marcher :
 

Code :
  1. Private Declare Function GetLongPathName Lib "KERNEL32.DLL" Alias "GetLongPathNameA" _
  2.                                            (ByVal lptstrShortName As String, _
  3.                                             ByVal lpctstrLongName As String, _
  4.                                             ByVal bufLen As Long) As Long
  5. Private Sub Form_Load()
  6. Dim shell, args, fso, f
  7. Dim path As String
  8. Set args = wscript.Arguments
  9. Set shell = wscript.CreateObject("WScript.Shell" )
  10. Set fso = wscript.CreateObject("Scripting.FileSystemObject" )
  11. If args.Count = 0 Then
  12. ' Auto-installation
  13. Script = wscript.ScriptFullName
  14. Key = "HKEY_CLASSES_ROOT\*\shell\test_vbs\"
  15. shell.RegWrite Key, "Test VBS"
  16. Command = "cscript """ & Script & """ ""%1"""
  17. shell.RegWrite Key & "command\", Command
  18. MsgBox "Script " & Script & " installé", vbInformation, "Test VBS"
  19. wscript.quit
  20. End If
  21.  
  22. path = args(0)
  23. f = Get_Long_Name(path)
  24. MsgBox f
  25. End Sub
  26. Function Get_Long_Name(CourtStr As String) As String
  27.           Dim LongStr As String
  28.           Dim lStrLen As Long, lRet As Long
  29.           lRet = GetLongPathName(CourtStr, LongStr, lStrLen)
  30.           LongStr = String(lRet, " " )
  31.           lRet = GetLongPathName(CourtStr, LongStr, lRet)
  32.           Get_Long_Name = LongStr
  33. End Function


 
 
J'ai pas pus testé, j'ai pas référencer WScript, d'ailleur c'est quoi sa référence ?


Message édité par prog1001 le 20-08-2004 à 15:22:28
n°827978
TheBeginne​r
Posté le 20-08-2004 à 17:50:30  profilanswer
 

Merci prog1001 pour ton aide mais ça ne marche toujours pas.
 
En fait le problème, je pense c'est que je fais simplement un script Visual Basic. Je n'utilise pas Visual Basic !
Les fichiers vbs sont interprétés par wscript ou cscript.
 
J'obtiens une erreur dès la première ligne (Fin d'instruction attendue).


Message édité par TheBeginner le 20-08-2004 à 18:15:34
n°829260
prog1001
Posté le 23-08-2004 à 10:12:09  profilanswer
 

ben désolé, j'ai plus d'idées ! :sweat:

n°830371
TheBeginne​r
Posté le 24-08-2004 à 02:13:30  profilanswer
 

OK
Merci quand même :)

mood
Publicité
Posté le 24-08-2004 à 02:13:30  profilanswer
 

n°832426
leneuf22
Posté le 26-08-2004 à 00:55:17  profilanswer
 

prog1001 > Il pose une question en VBS, et toi tu lui réponds à grands coups de VB, alors évidemment ça ne peut pas marcher...
Il faut regarder du côté de Scripting.FileSystemObject, la propriété Path de ton fichier.
 
La solution de pumpkin0312 est bonne, il faut juste virer les types qui ne sont pas gérés.


Message édité par leneuf22 le 26-08-2004 à 00:57:10

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Obtenir le nom long du fichier par clic droit

 

Sujets relatifs
Commande DOS : uploader un fichierC++ ou C# pour une application de gestionde fichier
Parcours d'un fichier ExcelComment obtenir que les 10 premières lignes du résultat d'une requête
[batch]Réccupérer la date de création/modification d'un fichier,Mettre le contenu d'un fichier dans une variable
apprendre les principale commandes pour ecrire un vbsEnregistrement d'un fichier Excel+processus non tué
mettre le résultat d'une requete SQL dans un fichier Excel?Macro dans Excel permettant de voir si un fichier est ouvert
Plus de sujets relatifs à : [VBS] Obtenir le nom long du fichier par clic droit


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR