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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оболочка для проги, прога запускается как консольное прилож 
V
    Опции темы
Pugach
Дата 20.10.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здрасти.
Проблема следующая. 
Есть старый экзешник написан лет 20 назад, в него входят сложные численные методы, переписать по новой - легче застрелиться.
Работа с этим файлом простая - запускаешь и вводишь название файла пару раз.

Вопрос можно ли сделать так чтоб он запускался невидимым а название файла бролось например через commondialog.

То что можно запускать невидиым я догадываюсь. Главное - можно ли с ним будет работать (передача названия файла). 


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


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


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

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



Да, можно. Только откуда такая убежденность, что это консольное приложение? Может, это все-таки 16-битное (DOS) приложение?


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

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


Шустрый
*


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

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



ну да скорее даже так, я в этом не разбираюсь,
вот прикрепляю файл он небольшой "gsmkw.exe" и "d13510.dat" - файл исходник.
Уточните если не трудно это все-таки 16-битное (DOS) или консольное.

Насчет "Да можно". 
Каким способом?

Пробовал решить так (сначала естественно запускал видимым):
Создавал временный файл, запускал:

Код

Private Sub Command1_Click()
  Dim sExe As String
  sExe = String$(536848, Chr$(0))  
  sExe = StrConv(LoadResData(101, "CUSTOM"), vbUnicode) (Type="CUSTOM", id=101) 
  Open App.Path & "\tmpexe.exe" For Binary As #1 
  Put #1, sExe
  Close #1 
  Dim Txt As String
  Txt = "d13510"
  Shell App.Path + "\" & "tmpexe.exe", vbNormalFocus
  Sleep 500


'Если после такого запуска вводить тект вручнуюи подтверждать нажатие клавишей Enter, то все работает хорошо , если текст вводится как имитация нажатия клавиш а потом Enter то тоже все норм
здесь все работает:
Код

   For qqq1 = 1 To Len(Txt)
     Call SendMyKey(Mid(Txt, qqq1, 1)) - процедура имитации нажатия клавиш
   Next 

   
а вот тут нет:
Код

   keybd_event 0, 28, 0, 0   ' нажимаем ентер
   keybd_event 0, 28, &H2, 0  'отпускаем
   keybd_event 0, 28, 0, 0   ' нажимаем
   keybd_event 0, 28, &H2, 0  'отпускаем 

 Sleep 3000
 Kill App.Path & "\tmpexe.exe"
End Sub


А это просто процедура имитации нажатия клавиш в ней все работает:
Код

Public Sub SendMyKey(ByVal c$)
 Dim vk%, scan%, oemchar$
    vk% = VkKeyScan(Asc(c$)) And &HFF
    oemchar$ = " "     
    CharToOem Left$(c$, 1), oemchar$        
    scan% = OemKeyScan(Asc(oemchar$)) And &HFF       
    keybd_event vk%, scan%, 0, 0       
    keybd_event vk%, scan%, KEYEVENTF_KEYUP, 0
End Sub


С ентером сначало не получалось вообще тогда я писал так (нашел в каком-то примере):
Код

  keybd_event 0, 1, 0, 0   ' нажимаем ентер
   keybd_event 0, 1, &H2, 0  'отпускаем

у меня при переходе на следующую строку появлялся символ "/",
тогда я забил цикл  и менял второй параметр, заметил, что переход на следующую строчку происходит при числе 28, как в примере выше, но прикол в том что видимость нажатия ентера - полная а программа пишет, что ошибка в исходных данных. здесь застопорился

Может можно вообще без имитации. Вот.
Извините за сумбурность объяснения

   

Это сообщение отредактировал(а) cardinal - 22.10.2007, 23:30

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  LDxxx.rar 113,14 Kb
PM MAIL   Вверх
Akina
Дата 22.10.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это 16-битный DOS-экзешник (MZ). Сегодня уже некогда, завтра посмотрю... а может кто раньше заглянет.


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

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


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


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

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



Гы... попробовал дома... все гораздо проще, чем казалось. Программа просто принимает данные со stdin без очистки. Достаточно ответы записАть в обычный текстовый файл, и перенаправить ввод на этот файл.

Т.е., например, если ей надо передать первым параметром имя файла file1.res, а вторым - имя файла file2.dat, простор делаем текстовый файл с тремя строками:
Код

file1.res<ПереводСтроки>
file2.dat<ПереводСтроки>

даем ему произвольное имя (скажем, param.txt) и вызываем программу, перенаправляя ввод на этот файл:
Код

Shell "GSMKW.EXE < param.txt"
и... всё.

Важно!
1) вторая строка файла ОБЯЗАТЕЛЬНО должна завершаться переводом строки (Enter), т.е. файл должен содержать именно 3 строки, причем третья - не содержит символов.
2) если этому файлу будет дано имя без расширения, в строке запуска его следует завершить точкой, т.е. при имени param код будет выглядеть как 
Код

Shell "GSMKW.EXE < param."




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

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


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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




M
cardinal
Pugach, пользуйся кнопкой "Код"!



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Pugach
Дата 23.10.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не получается (
пишет: ошибки при открытии файла исходнах данных
Если запускать вручную то достаточно написать "d13510" и 2 раза ентер.
поэтому в файл записывал следующее:
 
 
Код

  Open App.Path & "\d13510.txt" For Output As 2
  Print #2, "d13510"
  Print #2, ""
  Close #2
 
  Sleep 500
  Shell App.Path + "\" & "tmpexe.exe < d13510.txt", vbNormalFocus


пробовал  писать, как написанл ниже, результат должен быть тот же (если вручную), впринципе, результат тот-же - отрицательный smile

Текстовый файл создается как нада.
 
Код

Open App.Path & "\d13510.txt" For Output As 2
  Print #2, "d13510.res"
  Print #2, "d13510.dat"
  Close #2

  Sleep 500
  Shell App.Path + "\" & "tmpexe.exe < d13510.txt", vbNormalFocus



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


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


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

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



Цитата(Pugach @  23.10.2007,  09:30 Найти цитируемый пост)
пишет: ошибки при открытии файла исходнах данных

Полагаю, следует внимательнее отнестись к путям... каталог запуска, каталог исполнения... грабли - имхо тут.

Код

Shell App.Path & "\" & "tmpexe.exe < " & App.Path & "\" & d13510.txt", vbNormalFocus



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

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


Шустрый
*


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

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



Код

Shell App.Path & "\" & "tmpexe.exe < " & App.Path & "\" & d13510.txt", vbNormalFocus


не хватает одной кавычки,
но так, вообще пишет файл не найден.

И почему вы думаите, что ошибка в пути, дело в том, что при таком коде:
Код

 Open App.Path & "\d13510.txt" For Output As 2
  Print #2, "d13510"
  Print #2, ""
  Close #2
 
  Sleep 500
  Shell App.Path + "\" & "tmpexe.exe < d13510.txt", vbNormalFocus


видно, что эти данные считываются из файла, т.к. в окне запуска программы появляются имена "d13510.dat" и "d13510.res"
PM MAIL   Вверх
Akina
Дата 23.10.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Pugach @  23.10.2007,  10:34 Найти цитируемый пост)
видно, что эти данные считываются из файла, т.к. в окне запуска программы появляются имена "d13510.dat" и "d13510.res" 
А мне (ты не поверишь!) не видно... Но если
Цитата(Pugach @  23.10.2007,  10:34 Найти цитируемый пост)
в окне запуска программы появляются имена "d13510.dat" и "d13510.res"
то текущая задача - передать параметры - решена. 



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

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


Шустрый
*


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

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



но получилось то же самое что и при имитации нажатия клавишь
если вводить вручную то все нормально, а если имитировать
или передавать параметры, как в коде - выше, то видимость как будто все нормально,
но программа пишет что в файле исходных данных - ошибки
PM MAIL   Вверх
Akina
Дата 23.10.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Pugach, слушайте, так это Вы, сударь, просто настолько невнимательны, что противно об этом говорить. Программа сначала просит имя файла для вывода результатов, и лишь потом - имя файла исходных данных. Вручную Вы это делаете правильно, а вот программно - почему-то наоборот.

Код

  FileHandle = FreeFile
  Open App.Path & "\d13510.txt" For Output As #FileHandle 
  Print #FileHandle, ""
  Print #FileHandle, "d13510"
  Close #FileHandle 
  Shell App.Path + "\" & "tmpexe.exe < d13510.txt", vbNormalFocus



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

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


Шустрый
*


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

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



Да сначала вводится имя файла куда будет записан результат,
потом имя файла исходных данных, но его можно опустить и просто нажать ентер, тогда его имя имется ввиду такое же как и имя файла результата расчета только с расшерением ".dat".

Добавлено через 6 минут и 53 секунды
Кстати, примерно год назад, эту задачу пытался решить опытный  програмист, но так и не решил... :0
PM MAIL   Вверх
Akina
Дата 23.10.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Вот этот  код у меня нормально отрабатывает, запуская приложение.
Код

Option Explicit

Private Sub Command1_Click()
Dim FileHandle As Long
  FileHandle = FreeFile
  Open App.Path & "\d13510.txt" For Output As #FileHandle
  Print #FileHandle, ""
  Print #FileHandle, "d13510"
  Close #FileHandle
  Shell App.Path + "\" & "gsmkw.exe < d13510.txt", vbNormalFocus
End Sub
Это ВЕСЬ код - т.е. все приложение есть 1 форма с 1 кнопкой по имени Command1. Проверяй. Убедись что работает.

Все остальное к описываемой тобой проблеме никакого отношения не имеет. Если не работает - грабли в другом месте. Или проблемы доступа, или неверно извлекаешь из ресов и кладешь на диск, или еще что-то.

Добавлено @ 17:08
Цитата(Pugach @  23.10.2007,  17:37 Найти цитируемый пост)
эту задачу пытался решить опытный  програмист, но так и не решил

Я не вижу задачи.


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

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


Шустрый
*


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

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



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

Если попробовать запустить вручную (при условии что файл исходных данных "d13510.dat" находится в том же каталоге что и сам exe, 
и просто ввести 
"d13510"
enter
enter

то все работает, видно что она считает, и создается файл результата расчета "d13510.res"


Если использовать ваш код (безо всяких ресов), или все мои предыдущие попытки, то ничего этого не происходит,
а если вконце проги написать строчку "sleep 5000", то можно успеть заметить фразу про ошибки в файле исходных данных.

И я вижу в этом проблему.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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