Не запускается файл, если в его пути содержится кириллица - VB

Узнай цену своей работы

Формулировка задачи:

Добрый день! Прошу помочь. Запутался в трех соснах... Код простейший, в чем проблема не понимаю...
Листинг программы
  1. Dim intFreeFile as Integer, intRetCodes as Integer
  2. intFreeFile = freefile
  3. Open "runScript.cmd" for output as intFreeFile
  4. Print #intFreeFile, "@Echo off"
  5. Print #intFreeFile, chr (34) & app.path & "\Progs.exe" & chr (34)
  6. Close intFreeFile
  7. intRetCodes = Shell(chr (34) & app.path & "\runScript.cmd" & chr (34),vbNormalFocus)
Если в пути к файлу "Progs.exe" нет кириллицы, все запускается. Если есть, фонарь. Причем в режиме просмотра "runScript.cmd" вижу символы (кириллицу). Во время исполнения "runScript.cmd" вместо кириллицы "абра кадабра"

Решение задачи: «Не запускается файл, если в его пути содержится кириллица»

textual
Листинг программы
  1. Option Explicit
  2. Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameW" (ByVal lpszLongPath As Long, ByVal lpszShortPath As Long, ByVal cchBuffer As Long) As Long
  3.  
  4. Const MAX_PATH As Long = 260&
  5.  
  6. Private Sub Form_Load()
  7.     Dim intFreeFile As Integer, intRetCodes As Integer, str    As String
  8.  
  9.     intFreeFile = FreeFile
  10.     Open "runScript.cmd" For Output As intFreeFile
  11.         Print #intFreeFile, "@Echo off"
  12.         str = Chr(34) & App.Path & "\Progs.exe" & Chr(34)
  13.         Print #intFreeFile, PathToDOS(str)
  14.     Close intFreeFile
  15.    
  16.     intRetCodes = Shell(Chr(34) & App.Path & "\runScript.cmd" & Chr(34), vbNormalFocus)
  17. End Sub
  18.  
  19. Public Function PathToDOS(Path As String)
  20.     On Error GoTo ErrorHandler:
  21.     Dim AltName         As String
  22.     Dim SizeOfAltName   As Long
  23.    
  24.     AltName = Space$(MAX_PATH + 1&)
  25.     SizeOfAltName = GetShortPathName(StrPtr(Path), StrPtr(AltName), MAX_PATH + 1&)
  26.     If SizeOfAltName <> 0& Then
  27.         AltName = Left$(AltName, SizeOfAltName)
  28.         If StrComp(AltName, Path, 1) <> 0& Then PathToDOS = AltName
  29.     End If
  30.     Exit Function
  31. ErrorHandler:
  32. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы