|
|
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Есть консольное приложение proga.exe. Смысл:через TAPI посылаем факс, в консоли наблюдаем как дела: 2008/01/09 02:44:29> DialTone 2008/01/09 02:44:29> Dialing 2008/01/09 02:44:29> Proceeding 2008/01/09 02:44:30> RingBack 2008/01/09 02:44:32> Connected 2008/01/09 02:44:50> Sending Page 1 2008/01/09 02:45:43> Sending Page 2 2008/01/09 02:46:40> Idle > >> SUCCEEDED Хочется: Запустить его из VB и все эти строки(что пишет на экран) в VB и выводить в режиме REAL-TIME Как запустить понятно В1: shell(proga.exe) или ShellAndContinue(proga.exe) В2: http://www.sources.ru/msdn/howto/q171654.shtml -здесь тоже уже почитал, даже воспроизвел Есть конечно вариант: shell(proga.exe > 1.txt) Но в этом случае 1.txt мы получим только в 02:46:40 (до этого там будет пусто), т.е. по окончании работы программы, а надо уже в 02:44:29 прочесть слово Dialing. Есть ли способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2008, 07:20 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
в мсдн был пример перенаправления вывода консоли в нужное тебе место. В том числе и на VB. Поищи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2008, 14:49 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Я нашел 2 ссылки: 1-я по сути повторяет уже приведенную выше http://support.microsoft.com/kb/171654/en-us#appliesto Вот это может быть? Но ощущение, что не то. http://support.microsoft.com/kb/150767/en-us Нужен непрерывный вывод, а целиком под конец все из файла можно и так считать (proga.exe > 1.txt) -это не интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2008, 16:09 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Я сегодня добрый, на инструкцию: http://www.sources.ru/msdn/howto/q171654.shtml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2008, 21:39 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Я там уже дважды был-см.выше. sOut = "Hi There" & vbCrLf -выводит в консоль C:\TEST.BAT -запускается в этой консоли А как мне сделать Msgbox "Результаты деятельности test.bat", причем не после завершения test.bat а в процессе получения информации от test.bat test.bat не очень удачный пример, см.мой пример, кот.выводит в течении 2-3 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2008, 08:52 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Т.е. надо считывать информацию по мере поступления в консоль, аналогично тому как я это делаю в MSComm (com-порт-gjhn) и WinSock(TCP-IP) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2008, 08:55 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
По идее если копать глубже: http://msdn2.microsoft.com/en-us/library/ms682073.aspx Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. В укажанной вами ссылке для VB имеем пример: Код: plaintext 1. 2. 3. По аналогии я бы задекларировал это дело так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. (первую видимо угадал, в правильности написания второй есть сомнения, но пока не уловил, которая из них мне нужна) Далее туплю,попытался "модифицировать" код из примера,типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Оно не ругнулось, стало быть угадал в декларировании, однако MsgBox выдался пустой. Техники не могу уловить, как этот буфер консоли отлавливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2008, 16:59 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2008, 17:10 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Я ваш код оценил, даже сделал для теста вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. И те строчки, которые я привел в начале топика, т.е. то что выводится в течении нескольких минут, выдались мне в MsgBox целиком , мне же надо их считывать в тот момент, как они возникают на экране. Если я просто в командной строке пишу proga.exe > 1.txt то файл 1.txt у меня пустой и заполняется целиком лишь по окончании процесса. А ваш код ведет себя похоже точно также, т.е.Buffer не заполняется до самого конца работы программы, или я что-то не допонял? Т.е. на экране я уже вижу строчку, следующая будет напр.через минуту, но ни в 1.txt, ни в bufer ничего нет, а надо чтобы это уже где-то было. Понятно, чтобы получить лог, вполне достаточно прочесть все в конце процесса, но хочется еще наблюдать за процессом из удобного интерфейса, коим консоль на мой взгляд не является, и я бы ее запускал "невидимо". Ибо если у меня одна консоль, это еще худо-бедно, а если у меня 4 линии (консоли) то это уже совсем хреново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2008, 18:59 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Нашел вот даже такую умную штуку,где есть куча всего: http://vb.mvps.org/samples/project.asp?id=console Максимум чего научился, считывать то что введено в консоль с клавиатуры. А если переформулировать вопрос. Можно ли тупо прочитать все то что написано в консоли в текущий момент времени? Т.е. msgbox "все то, что вижу на черном экране". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 00:26 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Debug.Print вместо MsgBox не пробовали использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 12:18 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
и еще вот это почитай, возможно в твоем случае ничего не поможет. http://support.microsoft.com/kb/190351 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 12:30 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
и еще , попробуй добавить: ... start.hStdOutput = hWritePipe start.hStdError = hWritePipe ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 12:47 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
вот попробуй так, stderror сам прикрути по аналогии: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 14:10 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Нет, ничего не помогло. Выводит все скопом и лишь в конце своей работы. Приложение, о котором идет речь - маленькая утилита от разработчика и назначение ее - дослать факс через свою спецефическую TAPI-fax-line. Прелесть ее в том, что она каким-то боком используя Microsoft Fax не использует сам сервер,т.е. работает "в обход". Т.е. если например в XP есть ограничение 1 факс-девайс одновременно, то ничто не мешает запустить мне 3 экземпляра этой программы одновременно. У меня мной давно написано приложение, кот. делает то же самое, но в отличие от утилиты работает непосредсвенно с Microsoft-fax сервером.Т.е. создает факс-задание а потом отслеживает состояние этого задания через ф-ции факс-сервера. Эдакий непрерывный долбеж по факс серверу. В принципе моя штука работает достаточно устойчиво но: 1)Многоканально она может работать только на win2003, ибо xp позволяет только один канал, и на мою программу это распостраняется 2)Периодически надо вычищать консоль факсов от мусора из недосланных и досланных факсов (на эту тему утилиту я тоже написал) 3) Т.к. консольное приложение написано профессионалами, оно надежней, да оно и по логике гораздо более прямолинейное и понятное, я бы конечно предпочел запускать его, а не возиться с сообщениями сервера. Я написал разработчикам письмо на тему что-либо поменять с выводом в понятное место (ну напр. добавить REAL-time log) или дать исходный код (утилиты, понятно, а не их основного коммерческого продукта), есть шанс что помощь придет "оттуда". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 14:21 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
я проверял на: ping -t www.sql.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 14:28 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
вот исходник в сборе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 14:30 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Konst_Oneя проверял на: ping -t www.sql.ru Что я вам могу на это сказать... Ping у меня тоже работает красиво с вашим исходником (собственно, текста в форуме было достаточно). Следуя своей логике, я не поленился запустить в консоли (без всякого програмирования) команду ping -t www.sql.ru > 1.txt и открывая этот файл в процессе работы в другом окне far убеждался в том, что строчек в 1.txt становится все больше и больше, т.е. даже не используя ваш пример я бы просто читал 1.txt раз в 1сек, и получал бы оттуда все что надо. А вот с этой коварной утилитой - весь вывод лишь в конце ее работы. Я так понимаю, смысл статьи, что вы предлагали почитать, что "вот-де есть такие коварные приложения типа рассматриваемого, которые -де так вот плохо себя ведут, как я описываю". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:04 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
добавьте в цикл обработку пайпа hReadStdErrorDup по аналогии с hReadStdOutputDup ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:22 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ???(возможно натупил) не хочет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:48 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
тогда видно все-таки это: Note Some console based applications do not use the standard handles for their input/output (IO) operations. The Win32 API does not support redirection of these processes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 15:52 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Konst_Oneтогда видно все-таки это: Note Some console based applications do not use the standard handles for their input/output (IO) operations. The Win32 API does not support redirection of these processes. Я именно на это и обратил внимание, когда писал Я писал...Я так понимаю, смысл статьи, что вы предлагали почитать, что "вот-де есть такие коварные приложения типа рассматриваемого, которые -де так вот плохо себя ведут, как я описываю". Но ведь в консоль же она как-то из себя пишет? Нельзя эту консоль целиком прочесть как есть? Или это уже картинка просто после вывода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:09 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
видно в конце работы это приложение все что было вываливает в консоль, а до этого работает с ней в графическом режиме (скорее всего писали ее на C++) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:14 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Konst_Oneскорее всего писали ее на C++ Понятно, что не на VB. Если хотите, могу кинуть exe-шник (69кб), запускать его вам бесполезно (да и неправильно чужие exe-шники запускать) если только по F3 или каким hiew-вьюером глянуть, может больше моего в нем увидете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:30 |
|
||
|
|

start [/forum/topic.php?fid=60&tid=2162805]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 414ms |

| 0 / 0 |
