GetCommandLine() возвращает больше чем надо

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

GetCommandLine() возвращает больше чем надо

Сообщение xolod » 04.12.2004 (Сб) 12:00

Получаю строку сем нехитрым методом, не через Command$, чтобы не получать имена файлов в формате 8.3...
Код: Выделить всё
Private Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long
Private Declare Function lStrLen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Private Function GetCommandListStr() As String
  Dim lngRString As Long, lngRStrLen As Long, astrBuffer As String
 
  lngRString = GetCommandLine()
  lngRStrLen = lStrLen(lngRString)
 
  If (lngRStrLen > 0) Then
    GetCommandListStr = Space$(lngRStrLen)
    CopyMemory ByVal GetCommandListStr, ByVal lngRString, lngRStrLen
  End If
End Function


Вопрос в том, что GetCommandLine всегда первым делом возвращает строку с путем/именем исполняемого файла, так и должно быть? :lol:

ЗЫ:
MSDN по этому поводу как-то неоднозначно выражается
Note The name of the executable in the command line that the operating system provides to a process is not necessarily identical to that in the command line that the calling process gives to the CreateProcess function. The operating system may prepend a fully qualified path to an executable name that is provided without a fully qualified path.

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2004 (Сб) 12:16

Угу...

Объедини Command$ с GetLongPathName. Только учти, что если параметр-путь вернули в кавычках, то оные надо снять перед вызовом GetLongPathName.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.12.2004 (Сб) 12:58

Дык так и делал, а про кавычки запамятовал (читай: не знал)..
Great thanks, как говориться :)

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 04.12.2004 (Сб) 15:32

А что, Command() возвращает обрезанные имена файлов? Странно, сколько пользовался, ни разу не натыкался, хотя длинные каталоги у меня были, даже с пробелами...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.12.2004 (Сб) 15:34

Операционка...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.12.2004 (Сб) 15:46

Нет, ессено возращает не Command, просто если просто кинуть файл на exe, вернеться нормальное имя (в длинном формате), а вот если в реестре прописать, ну допустим, в разделе ассоциаций приложений и файлов "C:\MyProg.exe" %1, то при открытие этого файла ОСь передаст программе все нормально, но каким то чудо образом Command$ преобразует все к формату 8.3 (Борьба Unicode <-> ASCII ? :? )

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 04.12.2004 (Сб) 15:55

xolod, действительно, ось какая? Ибо у меня в винтукее такого не было, все передавалось в длинном формате...

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 04.12.2004 (Сб) 16:02

XP + SP2, но пробовал и на ноуте (там 9x) эффект тот же :?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 04.12.2004 (Сб) 16:13

Странно... У меня все работало. Надо проверить будет...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList