| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Оболочка для проги |
| Автор: Pugach 20.10.2007, 23:35 |
| Здрасти. Проблема следующая. Есть старый экзешник написан лет 20 назад, в него входят сложные численные методы, переписать по новой - легче застрелиться. Работа с этим файлом простая - запускаешь и вводишь название файла пару раз. Вопрос можно ли сделать так чтоб он запускался невидимым а название файла бролось например через commondialog. То что можно запускать невидиым я догадываюсь. Главное - можно ли с ним будет работать (передача названия файла). |
| Автор: Akina 21.10.2007, 21:12 |
| Да, можно. Только откуда такая убежденность, что это консольное приложение? Может, это все-таки 16-битное (DOS) приложение? |
| Автор: Pugach 22.10.2007, 18:19 | ||||||||||
| ну да скорее даже так, я в этом не разбираюсь, вот прикрепляю файл он небольшой "gsmkw.exe" и "d13510.dat" - файл исходник. Уточните если не трудно это все-таки 16-битное (DOS) или консольное. Насчет "Да можно". Каким способом? Пробовал решить так (сначала естественно запускал видимым): Создавал временный файл, запускал:
'Если после такого запуска вводить тект вручнуюи подтверждать нажатие клавишей Enter, то все работает хорошо , если текст вводится как имитация нажатия клавиш а потом Enter то тоже все норм здесь все работает:
а вот тут нет:
А это просто процедура имитации нажатия клавиш в ней все работает:
С ентером сначало не получалось вообще тогда я писал так (нашел в каком-то примере):
у меня при переходе на следующую строку появлялся символ "/", тогда я забил цикл и менял второй параметр, заметил, что переход на следующую строчку происходит при числе 28, как в примере выше, но прикол в том что видимость нажатия ентера - полная а программа пишет, что ошибка в исходных данных. здесь застопорился Может можно вообще без имитации. Вот. Извините за сумбурность объяснения |
| Автор: Akina 22.10.2007, 18:28 |
| Это 16-битный DOS-экзешник (MZ). Сегодня уже некогда, завтра посмотрю... а может кто раньше заглянет. |
| Автор: Akina 22.10.2007, 20:51 | ||||||
| Гы... попробовал дома... все гораздо проще, чем казалось. Программа просто принимает данные со stdin без очистки. Достаточно ответы записАть в обычный текстовый файл, и перенаправить ввод на этот файл. Т.е., например, если ей надо передать первым параметром имя файла file1.res, а вторым - имя файла file2.dat, простор делаем текстовый файл с тремя строками:
даем ему произвольное имя (скажем, param.txt) и вызываем программу, перенаправляя ввод на этот файл:
Важно! 1) вторая строка файла ОБЯЗАТЕЛЬНО должна завершаться переводом строки (Enter), т.е. файл должен содержать именно 3 строки, причем третья - не содержит символов. 2) если этому файлу будет дано имя без расширения, в строке запуска его следует завершить точкой, т.е. при имени param код будет выглядеть как
|
| Автор: cardinal 22.10.2007, 23:29 | ||
|
| Автор: Pugach 23.10.2007, 08:30 | ||||
| Не получается ( пишет: ошибки при открытии файла исходнах данных Если запускать вручную то достаточно написать "d13510" и 2 раза ентер. поэтому в файл записывал следующее:
пробовал писать, как написанл ниже, результат должен быть тот же (если вручную), впринципе, результат тот-же - отрицательный Текстовый файл создается как нада.
|
| Автор: Akina 23.10.2007, 08:37 | ||
Полагаю, следует внимательнее отнестись к путям... каталог запуска, каталог исполнения... грабли - имхо тут.
|
| Автор: Pugach 23.10.2007, 09:34 | ||||
не хватает одной кавычки, но так, вообще пишет файл не найден. И почему вы думаите, что ошибка в пути, дело в том, что при таком коде:
видно, что эти данные считываются из файла, т.к. в окне запуска программы появляются имена "d13510.dat" и "d13510.res" |
| Автор: Pugach 23.10.2007, 09:50 |
| но получилось то же самое что и при имитации нажатия клавишь если вводить вручную то все нормально, а если имитировать или передавать параметры, как в коде - выше, то видимость как будто все нормально, но программа пишет что в файле исходных данных - ошибки |
| Автор: Akina 23.10.2007, 12:46 | ||
Pugach, слушайте, так это Вы, сударь, просто настолько невнимательны, что противно об этом говорить. Программа сначала просит имя файла для вывода результатов, и лишь потом - имя файла исходных данных. Вручную Вы это делаете правильно, а вот программно - почему-то наоборот.
|
| Автор: Pugach 23.10.2007, 16:37 |
| Да сначала вводится имя файла куда будет записан результат, потом имя файла исходных данных, но его можно опустить и просто нажать ентер, тогда его имя имется ввиду такое же как и имя файла результата расчета только с расшерением ".dat". Добавлено через 6 минут и 53 секунды Кстати, примерно год назад, эту задачу пытался решить опытный програмист, но так и не решил... :0 |
| Автор: Akina 23.10.2007, 17:07 | ||
Вот этот код у меня нормально отрабатывает, запуская приложение.
Все остальное к описываемой тобой проблеме никакого отношения не имеет. Если не работает - грабли в другом месте. Или проблемы доступа, или неверно извлекаешь из ресов и кладешь на диск, или еще что-то. Добавлено @ 17:08 Я не вижу задачи. |
| Автор: Pugach 23.10.2007, 17:37 |
| Предложенный вами код не работает. Программа запускается, есть видимость, что имена файлов передаются, но программа пиишет про ошибки в файле исходных данных и не считает. Если попробовать запустить вручную (при условии что файл исходных данных "d13510.dat" находится в том же каталоге что и сам exe, и просто ввести "d13510" enter enter то все работает, видно что она считает, и создается файл результата расчета "d13510.res" Если использовать ваш код (безо всяких ресов), или все мои предыдущие попытки, то ничего этого не происходит, а если вконце проги написать строчку "sleep 5000", то можно успеть заметить фразу про ошибки в файле исходных данных. И я вижу в этом проблему. |
| Автор: Akina 23.10.2007, 18:14 | ||||
Значит, все-таки проблема с каталогами. Попробуйте вместо
вставить строки
Это приведет к тому, что окно командного процессора останется. Там можно будет и просмотреть вывод, и попытаться вручную повторить строку запуска, которую специально для этого выведет msgbox. PS. У меня мой код работает как часы. PPS. А App.Path - часом не ДЛИННОЕ имя? |
| Автор: Pugach 24.10.2007, 16:49 |
| Мистика какая-то Вчера создал новую папку и создал нрвый проект с предложенным вами кодом, он не работал. Запустил сегодня, действительно все норм Private Sub Command1_Click() Open App.Path & "\d13510.txt" For Output As #2 Print #2, "d13510" Print #2, "" Close #2 Shell App.Path + "\" & "gsmkw.exe < d13510.txt", vbNormalFocus Sleep 5000 End Sub если точно эти же строки вставить в изначальный проект то не пашит. Проблема действительно в Apppath, у меня папка проекта называлась "Запуск exe" поменял на "zapusk exe", подключил по новой файл ресурсов и все норм. Спасибо большое! |