|
|
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
спс конечно за доверие, но как-то нет особого желания. думаю, что осается бодаться вам с разработчиками данной утилиты, чтобы они вам пошли навстречу в этом вопросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:36 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Только что прислали ответ: ... is a "console mode" application ; to collect in real time the logged line, you application needs to: - run sendfax.exe and to "redirect standard output" (stdout) - your application should then read from redirected stdout (character by character) We do not have sample code for such system programming; however you should find some on the WEB. А то что мы тут делали это не то же самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 16:47 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Только что прислали ответ: ... is a "console mode" application ; to collect in real time the logged line, you application needs to: - run sendfax.exe and to "redirect standard output" (stdout) - your application should then read from redirected stdout (character by character) We do not have sample code for such system programming; however you should find some on the WEB. А то что мы тут делали это не то же самое?В принципе, тоже самое. Во всяком случае они намекают что пайпов будет достаточно. А в твоих экспериментах пайпы не заработали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 17:42 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Console is the most flexible mode. Sendfax.exe outputs the result in real time ; command line redirection to file (using ">") may however produce the file only once operation is complete or enough data was collected (but should be "command line" = "shell" = ~"DOS" specific behavior). If you VB app redirects the console output (stdout) when executing sendfax.exe, then your VB app can read each line as soon as they are produced by sendfax.exe (and write it in real-time to a file, …). Note that you may be able in VB to redirect stdout directly to a file with some code that may look as follow (search Google for: +"redirect stdout" +createfile): 1) CreateFile 2) Redirect stdout to handle of file previously created (set proper handle in STARTUPINFO that will be passed to CreateProcess) 3) execute "sendfax" using CreateProcess 4) close handle. There are no plans to change this utility. Я уже и на C++ этот код попробовал (поиск привел именно к той статье, что вы мне указали, там где Note:) -результат тот же Ощущение такое что они намекают на тот самый код, который вы привели, (или на что-то более тонкое???) "character by character", но код то этот не работает в данном конкретном случае и они это я так понимаю не проверяли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2008, 18:00 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#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. ping -работает "как надо" то что надо - работает как и во всех предыдущих рассмотрениях, т.е. полный вывод лишь в конце. P.S. За C++ просьба не язвить. Я к нему прибегаю в крайних случаях. Ясно одно: если этот код на C++ не работает,то будучи переделанным на VB он также не заработает "как надо". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 04:00 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
что-то они явно не договаривают, раз примера нет. пошли им свой, пусть скажут , что не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2008, 18:15 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
У меня тут возникла простая трезвая мысль. В любой консоли ручками можно сделать Выделить все -> Копировать(или Enter), потом пойти в блокнот и написать "вставить".Эффект по сути требуемый будет. Это ведь можно сделать программно? Единственное, используется буфер обмена и если таких консолей будет 4 (а информацию разумно считывать хотя бы 1 раз в секунду)+ я еще сижу работаю, то информация может перекреститься-потеряться и будет бардак. Т.е. идея копирования всего экрана в данном случае разумна(информации не бог весть сколько), но только не в буфер обмена. Надо подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2008, 01:16 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#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. Код: 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. Теперь вот задался двумя вопросами: 1) Как запустить консоль невидимо от пользователя, ибо Shell(AppToRun, vbHide ) в ShellAndContinue здесь не поможет, консоль и так уже стартовала vbNormal 2) Не возникнет ли у меня проблем, если мое приложение будет запускать несколько таких консолей одновременно? Уж больно Couldn't allocate console при отладке сильно много ругалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 00:01 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Как запустить невидимо, похоже понял: После AllocConsole() надо добавить: Код: plaintext Код: plaintext 1. Как запустить несколько консолей из одного приложения таким методом, пока не разобрался, поигрался,возникло предположение что никак. Если это так, то надо писать что-то типа console.exe [proga.exe] [logfile-name.txt] Т.е. console.exe запускает proga.exe и в файл logfile-name.txt в REAL-TIME сваливаются сообщения от proga.exe А центральное приложение запускает эти самые console.exe через shellandcontinue , по таймеру заглядывает в logfile-name.txt, до завершения console.exe просто красиво отображает информацию-чего там происходит, а по выходу окончательно анализирует logfile-name.txt и протоколирует результаты работы. Как-то уж очень навороченно получается...проще конечно из центрального приложения запускать несколько консолей и хранить результаты их работы в массиве переменных (textbox-ах), а не в файлах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 03:10 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
1)Можно конечно себя обезопасить, сделав так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 2) http://msdn2.microsoft.com/en-us/library/ms681944(VS.85).aspx A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. Иными словами, из одного приложения можно управлять не более чем одной консолью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 05:03 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Забыл в код дописать, иначе не понятно Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 05:06 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий771) Как запустить консоль невидимо от пользователя, ибо Shell(AppToRun, vbHide ) в ShellAndContinue здесь не поможет, консоль и так уже стартовала vbNormal Запускать используя CreateProcess задавая 6-м параметром DETACHED_PROCESS. Честно говоря все не читал, но что-то долго мучаетесь... У CreateProcess есть три параметра - им достаточно передавать указатели возвращенные CreateFile. Вот и все - все работает. Использовал это дело еще лет 8..10 назад... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 10:43 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Вы не забывайте, что я сначала вызываю консоль через AllocConsole(), а только потом создаю в ней CreateProcess, а AllocConsole() параметров не имеет. Если бы я сначала делал CreateProcess, а потом AttachConsole(), то возможно ваш совет и пременился бы с успехом, хотя с AttachConsole() еще разбираться надо. А в моем случае боюсь тот вариант, что я сам нашел единственный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2008, 11:21 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дело закончилось тем, что от разработчиков пришел новый exe-шник от 14.01 Please find attached an update that should enable redirection to file (from command prompt or CreateProcess) to operate in real time. Our tests showed it was working in real time from command prompt. Наши тесты тоже как ни странно это показали. Он "как надо" работает со всеми приведенными тут кодами, и даже корректно поддерживает "proga.exe > 1.txt", что вообще делает возможным элементарное 1) ShellAndContinue ("proga.exe > 1.txt") 2) FSys.OpenTextFile ("1.txt", forReading.. по таймеру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 00:54 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
раскрутили наконец разработчиков тулзы, молодец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 17:27 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Дело закончилось тем, что от разработчиков пришел новый exe-шник от 14.01 ...Он "как надо" работает со всеми приведенными тут кодами, и даже корректно поддерживает "proga.exe > 1.txt", что вообще делает возможным элементарноеСкорее всего, старый вариант забывал сливать буфера. А новый соотвественно сливает их каждый раз после новой строки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2008, 17:45 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Вы не забывайте, что я сначала вызываю консоль через AllocConsole(), а только потом создаю в ней CreateProcess, а AllocConsole() параметров не имеет. Если бы я сначала делал CreateProcess, а потом AttachConsole(), то возможно ваш совет и пременился бы с успехом, хотя с AttachConsole() еще разбираться надо. А в моем случае боюсь тот вариант, что я сам нашел единственный. А зачем, собственно, AllocConsole с сопутствующими танцами? Почему не просто CreateProcess? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2008, 14:38 |
|
||
|
Чтение результатов работы консольного приложения
|
|||
|---|---|---|---|
|
#18+
AndrFА зачем, собственно, AllocConsole с сопутствующими танцами? Почему не просто CreateProcess? Вы эту тему внимательно читали, сколько всего намучено было. Я свои проблемы решил , причем методом "proga.exe > 1.txt" без всякого програмирования. Но коль пошла такая пьянка, то ответьте на след.вопрос Будет ли работать следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Только сами ответьте на этот вопрос (желательно код, а не общие намеки), ответ будет мне интересен после такого объема изысканий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2008, 16:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2162805]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
102ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 468ms |

| 0 / 0 |
