Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Консоль


Автор: YoD 15.12.2004, 14:03
Подскажите пожалуйста: если я разрабаытваю Windows Application, могу ли я из него программно создать и вызвать консоль? Если да, то раскажите плиз, как это делать.

Автор: Guest 15.12.2004, 16:07
а cmd.exe не потянет? smile

Автор: -Mikle- 15.12.2004, 18:02
Насчет того чтоб создать консоль, я не нашел вроде бы ичего. Если кто-нибудь знает способ, прошу выложить сюда.

Можно изменить тип проекта на ConsoleApplication. Окна и все такое будут присутствовать в этом типе проекта как раньше. Изменить тип проекта, можно в окне свойств проекта.

Автор: YoD 16.12.2004, 13:12
Ясно. cmd.exe не подойдёт - как я в неё инфу буду выдавать и с неё читать?..

Автор: Exception 9.1.2005, 12:22
А можешь два exe сделать (ну и 2 проекта) - один WinApp другой ConApp и все дела. Правда трудно но ...
чего только не сделаешь для своей проги smile

Автор: Exception 6.2.2005, 21:14
Вот: в kernel32.dll есть ф-ции ReadConsole и WriteConsole. Попробуй разобраться. И ваще сначала в API Viwer гляди

Автор: -Mikle- 7.2.2005, 20:26
Можно сначала создать Console Application, и потом уже в нем создавать окна. Только в таком варианте окно консоли всегда будет видно.

Цитата(Run @ 7.2.2005, 00:14)
И ваще сначала в API Viwer гляди
Модератор: пожалуйста, давайте будем относиться друг к другу вежливее

Автор: Exception 9.2.2005, 11:15
Цитата
Модератор: пожалуйста, давайте будем относиться друг к другу вежливее

Ладно извини у меня просто голова тогда болела smile

Автор: Mephisto 9.2.2005, 17:29
Можно создавать окна из консоли, затем при запуске окна скрывать консоль обычными апи методами.

Автор: Exception 10.2.2005, 17:41
Цитата(Mephisto @ 9.2.2005, 18:29)
Можно создавать окна из консоли

В смысле?

Автор: Exception 15.2.2005, 19:14
Код

'В модуле:
Option Explicit

  Declare Function AllocConsole Lib "kernel32" () As Long
  Declare Function FreeConsole Lib "kernel32" () As Long
  Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) _
          As Long
  Declare Function GetStdHandle Lib "kernel32" (ByVal _
          nStdHandle As Long) As Long
  Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
          (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _
          nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _
          lpReserved As Any) As Long

  Public Const STD_OUTPUT_HANDLE = -11&


'В форме размести Command1

 Dim hConsole As Long

  Private Sub Command1_Click()
  Dim Result As Long, sOut As String, cWritten As Long
    sOut = "Hello, World!" & vbCrLf
    Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _
                          ByVal 0&)
  End Sub

  Private Sub Form_Load()
    If AllocConsole() Then
      hConsole = GetStdHandle(STD_OUTPUT_HANDLE)
      If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"
    Else
      MsgBox "Couldn't allocate console"
    End If
  End Sub

  Private Sub Form_Unload(Cancel As Integer)
    CloseHandle hConsole
    FreeConsole
  End Sub

Насчет чтения не знаю, но точно с помощью ReadConsole.
ВНИМАНИЕ: при остановке VB отрубается! Перед запуском сохраняй!!!

Автор: -Mikle- 15.2.2005, 19:25
Это ведь на VB6! Ты проверял на VB.NET? Некоторые возможности API там вроде бы не правильно работают...

Автор: Exception 16.2.2005, 16:10
upgrade wizard попробуй. Чуть поправить код надо, и вывод не работает, но конмоль появляется. Потом напишу

Автор: rcdimon 17.2.2005, 15:45
От cmd.exe данные получать можно. Только нужно, что бы данные записывала в файл, а оттуда мы бы их и качали. Как это делается в винде я не помню, а в лине перенаправить поток можно так

dir > dir.txt

Все, что пологается вывести при этой команде, будет выведено в файл, а оттуда уже можно все скачивать. В винде то же как то так делается. Поищи инфу о досе или о эмуляции.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)