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

Obtenir le nom long du fichier par clic droit [VBS] - VB/VBA/VBS - Programmation

Marsh Posté le 15-08-2004 à 13:11:07    

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.

Reply

Marsh Posté le 15-08-2004 à 13:11:07   

Reply

Marsh Posté le 16-08-2004 à 15:46:47    

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:

Reply

Marsh Posté le 17-08-2004 à 10:02:10    

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 ;)

Reply

Marsh Posté le 17-08-2004 à 10:39:24    

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

Reply

Marsh Posté le 17-08-2004 à 15:39:30    

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
Reply

Marsh Posté le 20-08-2004 à 14:25:25    

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

Reply

Marsh Posté le 20-08-2004 à 15:19:02    

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
Reply

Marsh Posté le 20-08-2004 à 17:50:30    

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
Reply

Marsh Posté le 23-08-2004 à 10:12:09    

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

Reply

Marsh Posté le 24-08-2004 à 02:13:30    

OK
Merci quand même :)

Reply

Marsh Posté le 24-08-2004 à 02:13:30   

Reply

Marsh Posté le 26-08-2004 à 00:55:17    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed