eh bueno, feliz año nuevo che.
el otro dia estaba desarrollando una nueva version de un cliente para cyber (algunos del foro de rvb se acuerdan de los screens que una vez subi).. en fin, esta version esta hecha bien, espero poder venderla =)..
Pero esto que tiene que ver?, bueno facil: hay que listar los exes en memoria y compararlos con una lista de aplicaciones que no se deben cerrar y algunas paths de los exes en memoria, como el caso del AVG, estan en short path.. si saben, hay un api para hacer un path short o long (es obvio, podria hacer los dos paths shorts, pero queria ver porque no funcionaba el api), pero el problema que si uno quiere el path long desde un path short, el api no devuelve lo que esperamos.
hasta el momento seguro que no entendieron ni medio.. vamos con ejemplos:
Short Path o formato 8.3:
C:\DOCUME~1\el_c0c0\ESCRIT~1\ESCRIT~1\WINDOW~1\WINDOW~1
Long Paht:
C:\Documents and Settings\el_c0c0\Escritorio\Escritorio\Windows_Vista_Wallpapers_HD_X\Windows_Vista_Wallpapers_HD_X
con el api GetShortPathName, obtenemos del long path, el short path..
pero con el api GetFullPathName, no obtenemos el long path a partir del short path..
eso nos da que pensar no?.
en fin, yo con mis ganas de hacer cagadas y funciones estupidas que no sirven de una *****, les dejo el source de esto que sirve para sacar del short path un long path... esta hecha asi nomas, por lo que se funciona con archivos.. pero esta ideada para carpetas. Ojo que si no existe va a flashear cualquier cosa, pero va a devolver false...
linken: http://santiagohssl.googlepages.com/testLongPath.rar
saludos y ya saben que este codigo no es muy bueno.. pero bueno es lo que hay..
saludos
te entendi perfectamente..proba usar la api GetLongPathName,aca te paso un ejemplo facil:
Option Explicit
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long
Private Declare Function GetLongPathName Lib "kernel32.dll" Alias "GetLongPathNameA" (ByVal lpszShortPath As String, ByVal lpszLongPath As String, ByVal cchBuffer As Long) As Long
Private Function GetShortPath(strFileName As String) As String
Dim lngRes As Long, strPath As String
strPath = String$(165, 0)
lngRes = GetShortPathName(strFileName, strPath, 164)
GetShortPath = Left$(strPath, lngRes)
End Function
Private Sub Form_Load()
Dim PathCorto As String, PathLargo As String
PathCorto = GetShortPath("C:\Archivos de Programa\Mozilla Firefox\firefox.exe")
'esto te devuelve C:\ARCHIV~1\MOZILL~1\firefox.exe
PathLargo = String(255, 0)
Call GetLongPathName(PathCorto, PathLargo, 255)
PathLargo = Replace(PathLargo, Chr(0), vbNullString)
MsgBox PathLargo, vbInformation
End Sub
saludos.
Cita de: seba123neo en 3 Enero 2009, 02:20 AM
te entendi perfectamente..proba usar la api GetLongPathName,aca te paso un ejemplo facil:
Option Explicit
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long
Private Declare Function GetLongPathName Lib "kernel32.dll" Alias "GetLongPathNameA" (ByVal lpszShortPath As String, ByVal lpszLongPath As String, ByVal cchBuffer As Long) As Long
Private Function GetShortPath(strFileName As String) As String
Dim lngRes As Long, strPath As String
strPath = String$(165, 0)
lngRes = GetShortPathName(strFileName, strPath, 164)
GetShortPath = Left$(strPath, lngRes)
End Function
Private Sub Form_Load()
Dim PathCorto As String, PathLargo As String
PathCorto = GetShortPath("C:\Archivos de Programa\Mozilla Firefox\firefox.exe")
'esto te devuelve C:\ARCHIV~1\MOZILL~1\firefox.exe
PathLargo = String(255, 0)
Call GetLongPathName(PathCorto, PathLargo, 255)
PathLargo = Replace(PathLargo, Chr(0), vbNullString)
MsgBox PathLargo, vbInformation
End Sub
saludos.
epetacular seba, sabes cual fue el problema? el api guide no la tiene a esa funcion (por lo menos el mio) :P...
(http://santiagohssl.googlepages.com/concha_del_api_guide.jpg)
saludos
No has de guiarte solo de las funciones que hay en el APIGuide, usa tambien la MSDN y el APIViewer ;D
http://msdn.microsoft.com/en-us/library/aa364980(VS.85).aspx
Saludos ;D