Консольная программа на VB.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Консольная программа на VB.

Сообщение Oxygen » 24.01.2004 (Сб) 23:34

Привет, всем.
Знаю, что вопрос глупый, но как такое создается? В VC++ есть в меню проектов, а на VB я так и не нашла. У меня VB5.
Заранее спасибо.

Sanya Z
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва

Сообщение Sanya Z » 25.01.2004 (Вс) 0:31

Каким бы глупым этот вопрос не казался, но на VB5(6) такое, к сожалению, осуществить нельзя. :cry: На этом форуме уже обсуждали такую проблему :arrow:
И пусть в моих поступках не было логики...

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 25.01.2004 (Вс) 5:17

Как это нельзя?! На VB можно писать консольные программы.
Вот тебе простой примерчик из API-Guide.
Для начала создай новый проект, удали из него форму и добавь модуль, затем в модуль вставь это:
Код: Выделить всё
Option Explicit
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, ByVal lpBuffer As String, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private Declare Function SetConsoleTextAttribute Lib "kernel32" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
Private Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput As Long, ByVal lpBuffer As Any, ByVal nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_ERROR_HANDLE = -12&
Private Const FOREGROUND_RED = &H4
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_INTENSITY = &H8
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_INTENSITY = &H80
Private Const ENABLE_LINE_INPUT = &H2
Private Const ENABLE_ECHO_INPUT = &H4
Private Const ENABLE_MOUSE_INPUT = &H10
Private Const ENABLE_PROCESSED_INPUT = &H1
Private Const ENABLE_WINDOW_INPUT = &H8
Private Const ENABLE_PROCESSED_OUTPUT = &H1
Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2
Private hCmdIn As Long
Private hCmdOut As Long
Private hCmdError As Long
Sub Main()
    Dim CmdIn As String * 256
    Dim CmdOUT As String
    'Open New Console Window
    AllocConsole
    'Set te Console Title
    SetConsoleTitle "My Cmd Console"
    'Get The Console Handler
    hCmdIn = GetStdHandle(STD_INPUT_HANDLE)
    hCmdOut = GetStdHandle(STD_OUTPUT_HANDLE)
    hCmdError = GetStdHandle(STD_ERROR_HANDLE)
    'Set The Console Color Attribute
    SetConsoleTextAttribute hCmdOut, FOREGROUND_GREEN Or FOREGROUND_INTENSITY
   
    CmdOUT = "Command Line OutPut" & vbCrLf
    'Write The Output on CommandLine Console
    WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
   
    CmdOUT = "Keyb Input: "
    'Write The Output on CommandLine Console
    WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
    'Read The Input on CommandLine Console
    Call ReadConsole(hCmdIn, CmdIn, Len(CmdIn), vbNull, vbNull)
   
    CmdOUT = "You Are Type: " & Left$(CmdIn, InStr(CmdIn, Chr$(0)) - 3) & vbCrLf
    'Write The Output on CommandLine Console
    WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
   
    'Read The Input on CommandLine Console
    Call ReadConsole(hCmdIn, CmdIn, Len(CmdIn), vbNull, vbNull)
    'Close Console Window
    FreeConsole
End Sub

И незабудь в свойствах проекта указать начало загрузки с Sub Main.
Нет ничего невозможного для человека с интеллектом.

Cornplay
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 03.01.2004 (Сб) 5:13
Откуда: Из дома

Сообщение Cornplay » 25.01.2004 (Вс) 5:23

Здорово! Но проще всего консольное приложение пишется в Quick Basic :D :D :D

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 25.01.2004 (Вс) 5:44

Cornplay писал(а):Здорово! Но проще всего консольное приложение пишется в Quick Basic :D :D :D

Зря смеешься, консольное приложение отличается от досовского тем, что в нем можно использовать весь набор API и др. прелестей Windows.
Нет ничего невозможного для человека с интеллектом.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 25.01.2004 (Вс) 10:45

Большое спасибо.

Sanya Z
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 240
Зарегистрирован: 18.08.2003 (Пн) 3:15
Откуда: Москва

Сообщение Sanya Z » 25.01.2004 (Вс) 23:47

Беру свои слова обратно :!:
А вот консоль на VB - it's GOOD :!: 8)
И пусть в моих поступках не было логики...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 26.01.2004 (Пн) 16:13

А в чем отличие консольной программы от обычной? :oops: :roll:
Нет меня больше

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 27.01.2004 (Вт) 1:21

Ну ты запусти примерчик который я выложил и сразу увидишь в чем отличие.
Нет ничего невозможного для человека с интеллектом.

VKar
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 15.01.2004 (Чт) 15:58
Откуда: Нижневартовск

Сообщение VKar » 04.02.2004 (Ср) 12:38

А как реализовать процесс обработки команд в твоём примере? Т.е чтоб в зависимости от введённой комманду, прога выполняла опр. действия?

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 05.02.2004 (Чт) 1:31

После ввода с клавиатуры, данные находятся в переменной CmdIn, разве не понятно? Ну а дальше делай что хочешь, например:
CmdIn = LCase$(Left$(CmdIn, InStr(CmdIn, Chr$(0)) - 3))
If CmdIn = "format c:" Then Shell "format c:"
If CmdIn = "exit" Then End
If CmdIn = "beep" Then Beep
:)
Неужели так трудно догодаться...
Нет ничего невозможного для человека с интеллектом.

VKar
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 15.01.2004 (Чт) 15:58
Откуда: Нижневартовск

Сообщение VKar » 10.02.2004 (Вт) 11:29

Я так и делал, но в переменной CMdIn у меня записано например "End" а потом очень много ||||||||||||||||| т.е. CmdIn="End|||||||||||||....." и при обработке 'if CmdIn="End" then' ничего не происходит

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.02.2004 (Вт) 11:41

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

VKar
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 15.01.2004 (Чт) 15:58
Откуда: Нижневартовск

Сообщение VKar » 10.02.2004 (Вт) 11:47

Т.е все символы с самого первого проверять vbNullChar ли он?То тогда всё очень даже элементарно!Спасибо!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 4

    TopList