Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли передать значение командной строки? 
V
    Опции темы
Jr13san
Дата 9.8.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



Привет всем, кто на форуме.
У меня возникла проблемка с "Командной строкой".

Для примера код:
Код

Private Sub Form_Load()
Shell "cmd /X /C start dir c:\"
End Sub


Так вот, я не знаю как передать значение командной строки. Напимер, при данной команде мы получим список папок и файлов на диске "C". И как вот передать в Vb6 через msgbox, наример, значение 2-ой строки в "Командной строке".
Кто знает как, помогите пожалуйста.
PM MAIL WWW ICQ   Вверх
DrBoom
Дата 9.8.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


QIP VB-SDK Developer
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.2.2006

Репутация: нет
Всего: нет



Не очень понятна задача поставленная Вами. Возникает вопрос, за чем? -- когда и так почти для каждой функции в командной строки есть в WinAPI аналогичные функции, воспользоваться которыми можно спокойно. Более того, чтобы получить список папок и файлов, говоря о Вашем примере, достаточно воспользоваться вообще встроенной в VB6 функцией Dir() smile 
PM MAIL ICQ Jabber   Вверх
Akina
Дата 9.8.2009, 19:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Вместо термина "командная строка" следует использовать термин "окно ДОС-сеанса". Во избежание...
Цитата(Jr13san @  9.8.2009,  17:40 Найти цитируемый пост)
я не знаю как передать значение командной строки. Напимер, при данной команде мы получим список папок и файлов на диске "C". И как вот передать в Vb6 через msgbox, наример, значение 2-ой строки в "Командной строке".

Перенаправить вывод вызываемой команды в файл, а по завершении прочитать его и взять требуемое.

Цитата(DrBoom @  9.8.2009,  18:07 Найти цитируемый пост)
чтобы получить список папок и файлов, говоря о Вашем примере, достаточно воспользоваться вообще встроенной в VB6 функцией Dir() 

Это немного не так - в частности встроенная функция Dir() даёт меньше информации, чем команда Dir в сеансе ДОС.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Jr13san
Дата 10.8.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



[*]Akina, скажите тогда как перенаправить в файл данную 2-ю строку. Я не очень в этом деле шарю.

Цитата(DrBoom @  9.8.2009,  17:07 Найти цитируемый пост)
Вашем примере, достаточно воспользоваться вообще встроенной в VB6 функцией Dir()

DrBoom, мне уже как то сказали, чтобы я воспользовался данной функцией, но как я понял, что она предназначена для проверки существования папки, а не для вывода их....
PM MAIL WWW ICQ   Вверх
Akina
Дата 10.8.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Jr13san @  10.8.2009,  09:09 Найти цитируемый пост)
как перенаправить в файл данную 2-ю строку

Перенаправить ВСЁ. А потом прочитать из него строку № 2.
Цитата(Jr13san @  10.8.2009,  09:09 Найти цитируемый пост)
 как я понял, что она предназначена для проверки существования папки, а не для вывода их.... 

А справку почитать не пробовал? зря... не пришлось бы такую [censored] писАть... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Jr13san
Дата 10.8.2009, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



Цитата(Akina @  10.8.2009,  08:16 Найти цитируемый пост)
Перенаправить ВСЁ. А потом прочитать из него строку № 2.

Я даже не заню как это сделать...

Добавлено через 2 минуты и 18 секунд
Цитата(Akina @  10.8.2009,  08:16 Найти цитируемый пост)
А справку почитать не пробовал? зря... не пришлось бы такую [censored] писАть...

Я читал про функции, а именно про Dir. Так и не понял как она работает на вывод папок.
PM MAIL WWW ICQ   Вверх
Akina
Дата 10.8.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Просто отдаёт имена подпапок из текущей или указанной папки по одной.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DrBoom
Дата 11.8.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


QIP VB-SDK Developer
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.2.2006

Репутация: нет
Всего: нет



Цитата(Akina @  9.8.2009,  19:43 Найти цитируемый пост)
Это немного не так - в частности встроенная функция Dir() даёт меньше информации, чем команда Dir в сеансе ДОС.

Akina, ну этого я не отрицаю, но всё-таки можно же получить нужную информацию и другими способами smile 
Я просто пытаюсь понять, что нужно топикстратеру, получить папки или же всё-таки исполнить свою навязчивую идею\мечту и получить именно строку из окна DOC-сеанса smile 

Цитата(Jr13san @  10.8.2009,  08:09 Найти цитируемый пост)
...мне уже как то сказали, чтобы я воспользовался данной функцией, но как я понял, что она предназначена для проверки существования папки, а не для вывода их.... 

Смешно, ей Богу. А Гугл Вам по поводу этой функции тоже так Вам сказал? Вообще это функция может список и файлов выдать Вам. Стоит только захотеть smile  Да и всё-таки, в чем Ваш вопрос заключается и какое конкретно эффекта хотите получить от Ваши манипуляций? smile С каждым постом всё больше убеждаюсь, что Вам не нужно использовать командную строку, ИМХО.

ЗЫ. По поводу получения папок из Dir(). Чтобы это сделать:
1. Вызываете первый раз функцию, указав нужную папку: она возвращает первый файл\папку.
2. Далее вызываете эту функцию до тех пор пока она не вернет пустую строку. Если же не пустая строка -- это следующий файл\папка.
3. Попробуйте для лучшего достижения эффекта поколдовать со вторым параметром этой функции, когда будете вызывать её первый раз.
PM MAIL ICQ Jabber   Вверх
Jr13san
Дата 11.8.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



(1)данная команда выводит данные из файла в "окно ДОС-сеанса":
sort<C:\file.txt

(2)А эта команда записывает данные функции "Dir" в файл:
dir "E:\">c:\file.txt

Я пробовал записать данные в файл, используя (2). Затем открываю этот файл а там тоже прикол... и он заключается в том, что русские буквы записываются в виде какой-то "кракозяблы".
Идём дальше...
Проверяю команду (1) в "окне ДОС-сеанса" и она работает как надо. Всё выводит норм.
       
Можно сделать вывод, что сам интерпретатор командных строк как-то кодирует текст(если использовать (2)), а затем декодирует его(если использовать (1)).
AkelPad открывает нормально только через кодировку DOS-866. Но не у всех есть этот AkelPad, да и через него я не знаю как считать данные в Vb6.
Нужна декодировка "DOS-866" на VB6. У себя в исходниках я не нашел...
Я даже не знаю что и делать.

Не знаю можно ли здесь это написать:
И прикол ещё в том, что я так и не додумался как вывести список папок спомощью функции "Dir". Может быть лучше будет её использовать а не "окно ДОС-сеанса"?
DrBoom, покажите простенький пример на вывод папок ,например, в "C:\Program Files\".

Добавлено через 7 минут и 21 секунду
Не хотел рассказывать всю проблему сначала, но придётся...
Вобщем я уже как-то создавал тему про "Unavailable objects" и так её не решил, потому что прогу, которая ищет данные файлы, нельзя выкладывать на форум.
Так вот предположим, что прога нашла эту папку(делаю через fso), и прога не возвращает имя этого "Unavailable objects". Прикол в том, что fso не видит имя папки, а то, что она существует - видит.=)
Вот я и нашел выход в Dos-сеансе.

PM MAIL WWW ICQ   Вверх
DrBoom
Дата 12.8.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


QIP VB-SDK Developer
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.2.2006

Репутация: нет
Всего: нет



Цитата(Jr13san @  11.8.2009,  17:15 Найти цитируемый пост)
DrBoom, покажите простенький пример на вывод папок ,например, в "C:\Program Files\".

По просьбе трудящихся:
Код

Option Explicit ' Это форма;-)

Public Function GetPathFileList(Path As String) As Variant
 On Error GoTo Error

  Dim List() As String
  Dim Temp   As String

 Temp = Dir(Path, vbDirectory) ' Первый запуск Dir()
 If Temp <> "" Then ' Проверка есть ли что в папке
  ReDim List(0): List(0) = Temp ' "Открываем" массив и записываем первое значение
  Do ' Начало цикла
     Temp = Dir ' Повторный вызов Dir()
     If Temp = "" Then Exit Do ' Проверка не осталось ли что нужно добавить
     ReDim Preserve List(UBound(List) + 1) ' Расширяем массив
     List(UBound(List)) = Temp ' Добавляем еще в спискок значение
  Loop ' Завершение цикла
 End If: GetPathFileList = List ' Возвращение массива
Error: End Function

Private Sub Form_Load()
 On Error GoTo Label
 
  Dim Value
 
 For Each Value In GetPathFileList("C:\Program Files\")
     MsgBox Value
 Next
 Exit Sub
Label:
 MsgBox "Список пуст!"
End Sub

В этом примере Вам выдаст список всех файлов и папок (в т.ч. "." и "..") в указанной папке (в параметре Path).
Однако, если убрать параметр vbDirectory при первом вызове Dir(), то получите только список файлов.
"Вычесть" значения из массива ненужны труда не составит, думаю. Т.ж. попробуйте ещё поэкспериментировать со 2-м параметром упомянутой функции. 

PM MAIL ICQ Jabber   Вверх
Jr13san
Дата 17.8.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



DrBoom, Спасиьбо, я посмотрю и изучу ваш код...

Добавлено через 50 секунд
Разобрался с функцией "Dir()"
Но всё таки, так как тема открыта, нужно её завершить. Я тут нашёл материал по теме, но никак не пойму как Api-Функция работает. А именно: как загрузить "Dos" текст в переменную  

Материал:

Если Вам нужно конвертировать текст формата DOS в Windows (1251), то в API есть на этот случай хорошая функция: OemToChar. 

Объявляется она так: 

Код

Public Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long 

Используют её следующим образом:
Код

Dim l_lReturn as Long
Dim l_sSource as String 'исходный текст
Dim l_sDestination as String 'возвращаемый текст
l_lReturn = oemtochar(l_sSource, l_sDestination)

PM MAIL WWW ICQ   Вверх
Akina
Дата 17.8.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Jr13san @  17.8.2009,  11:06 Найти цитируемый пост)
Используют её следующим образом:

Неверно. Необходимо до вызова API-функции зарезервировать место под возвращаемый текст.
Код

Dim l_lReturn as Long
Dim l_sSource as String 'исходный текст
Dim l_sDestination as String 'возвращаемый текст
' ...
l_sDestination = l_sSource ' например так
l_lReturn = oemtochar(l_sSource, l_sDestination)



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Jr13san
Дата 18.8.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



А как заставить её работать?
PM MAIL WWW ICQ   Вверх
Jr13san
Дата 23.8.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



Мне интересно как можно засунуть DOS текст в переменную l_sSource?
Через функцию Open .. for..as ..?
PM MAIL WWW ICQ   Вверх
Jr13san
Дата 25.8.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 29.7.2008
Где: г. Павлово

Репутация: нет
Всего: нет



ОК. Разобрался. smile
Всем Спасибо за помощь!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.