Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19

Работа с консолью из VB6

16.05.2014, 18:16. Показов 9473. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот модуль класса, который я смонтировал,
черпая инфу из самых разнообразных источников...
который запускает консоль и даёт возможность вставлять туда свой текст...

Используется так...
Visual Basic
1
2
3
4
5
6
7
Sub main()
    Dim cons As New Console
'    ConsoleWriteLine "Привет пиплы :)"
    cons.ConsoleWriteLine "Echo on"
    cons.ConsoleWriteLine "regsvr32 dllERR.dll"
    Debug.Print cons.ConsoleReadLine
End Sub



теперь вопросы...
  • Как заставить такую консоль реально выполнять комманды ?
  • почему, не функционирует ReadLine ?.. собственно из за нее и делаю...
  • как настроить параметр запуск в скрытом режиме... ?
  • можно ли какнибудь подменить используемые хендлы, на Хэндл Shell("cmd.exe")


Visual Basic
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
Option Explicit
'
'© FelixMacintosh 2014
'Работа с консолью с возможностью ввода/вывода русских символов
'
Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_RED = &H4
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_INTENSITY = &H80&
Private Const BACKGROUND_SEARCH = &H20&
Private Const FOREGROUND_INTENSITY = &H8&
Private Const FOREGROUND_SEARCH = (&H10&)
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 Const STD_OUTPUT_HANDLE = -11&
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_ERROR_HANDLE = -12&
Private Const INVALID_HANDLE_VALUE = -1&
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private 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
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 CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
 
Private hConsoleOut As Long, hConsoleIn As Long, hConsoleErr As Long
 
Private Sub Class_Initialize()
    If AllocConsole() Then
        hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
        If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Не удается получить STDOUT"
        hConsoleIn = GetStdHandle(STD_INPUT_HANDLE)
        If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Не удается получить STDIN"
    Else
        MsgBox "Невозможно запустить вторую копию консоли"
    End If
    'Установить заголовок окна консоли
    SetConsoleTitle App.EXEName & "Copyright (c) FelixMacintosh 2014"
    'Задать синий фона текста в консоли с ярко-желтыми символами
    SetConsoleTextAttribute hConsoleOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY _
    Or BACKGROUND_BLUE
End Sub
 
Private Sub Class_Terminate()
    'Delete console
    CloseHandle hConsoleOut
    CloseHandle hConsoleIn
    FreeConsole
End Sub
 
Private Function DOSToWin(sourstr$) As String
    DOSToWin = Space$(Len(sourstr))
    OemToChar sourstr, DOSToWin
End Function
 
Private Function WinToDOS(sourstr$) As String
    WinToDOS = Space$(Len(sourstr))
    CharToOem sourstr, WinToDOS
End Function
 
 
 
 
Public Sub ConsoleWriteLine(sInput As String)
    ConsoleWrite sInput & vbCrLf
End Sub
 
Public Sub ConsoleWrite(sInput As String)
    Dim cWritten As Long
    WriteConsole hConsoleOut, ByVal WinToDOS(sInput), Len(sInput), cWritten, ByVal 0&
End Sub
 
Public Function ConsoleReadLine() As String
    Dim ZeroPos As Long
    'Create a buffer
    ConsoleReadLine = String(255, 0)
    'Read the input
    ReadConsole hConsoleIn, ConsoleReadLine, Len(ConsoleReadLine), vbNull, vbNull
    'Strip off trailing vbCrLf and Chr$(0)'s
    ZeroPos = InStr(ConsoleReadLine, Chr$(0))
    If ZeroPos > 0 Then ConsoleReadLine = DOSToWin(Left$(ConsoleReadLine, ZeroPos - 3))
End Function
Добавлено через 1 час 34 минуты
...и тишина....
все молчат, тогда так, какой тут код поставить чтоб
взвамодействовать с окном консоли, причем в скрытом режиме
пробывал через SendKeys, компьютер виснет приходилось из розетки выключать
2 попытки уже сделал


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Dim hProc&, hShell&, Path34$, n&
 
Sub main()
    'hShell = Shell("cmd.exe", 0) 'Скрытый режим !
    MsgBox "для выхода можно ввести ""Exit""" & " и Enter"
    hShell = Shell("cmd.exe", 1)
    hProc = OpenProcess(&H100000, False, hShell)
    While WaitForSingleObject(hProc, 100)
        '
        'Что требуется здесь вписать чтоб передать консоле инфу..
        'и получить ответ...
        'С условием что консоль будет скрыта ???
        '
        Debug.Print n: n = n + 1
    Wend
    CloseHandle hProc
 
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.05.2014, 18:16
Ответы с готовыми решениями:

Работа с консолью
Можно ли работать с бд в конлоси. Если да то подкажите как поочерёдно лоставать из таблицы например 123 по значению Показывать его...

Работа с консолью в Си
Всем привет! Начал недавно изучать Си и в одном коде наткнулся на функции SetConsoleAttributeColor GetStdHandle И собственно возник...

Работа с консолью
Есть консоль которая вызывается в DLL таким кодом AllocConsole();; 1) Как можно писать ней разноцветным шрифтом отдельные...

51
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
16.05.2014, 18:19
Зачем такая "тяжелая артиллерия", если команду (с одним "м") можно просто выполнить через Shell?
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 18:31  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Зачем такая "тяжелая артиллерия"
дело в том, что консоль иногда отвечает на вводимые команды ..
а я хочу сделать прогу которая бы просто, как функция получала результат
а ведь действия ведь могут быть самые разнообразные
от регистрации компонента до установки драйверов...
поэтому мне нужно чтоб было правильное взаимодействие ввода / вывода...

Добавлено через 3 минуты
Цитата Сообщение от Catstail Посмотреть сообщение
одним "м"
..и что означает одним "м" ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
16.05.2014, 18:34
Да не в консоли дело! Консоль не поможет.

Цитата Сообщение от FelixMacintosh Посмотреть сообщение
и что означает одним "м" ?
- просто у Вас слово "команда" было написано с двумя "м", что режет глаз.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 18:55  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
с двумя "м", что режет глаз
ну извените... ... оттолкнулся от похожего слова ... Command

Добавлено через 10 минут
Дошло ! ! ! ✰ ✰ ✰ что надобыло поставить в классе, ранее выложенного кода
ENABLE_LINE_INPUT теперь ответ я получаю !... пойду дальше строить

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Class_Initialize()
    If AllocConsole() Then
        hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
        If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Не удается получить STDOUT"
        hConsoleIn = GetStdHandle(STD_INPUT_HANDLE)
        If hConsoleOut = INVALID_HANDLE_VALUE Then MsgBox "Не удается получить STDIN"
    Else
        MsgBox "Невозможно запустить вторую копию консоли"
    End If
    'Установить заголовок окна консоли
    SetConsoleTitle App.EXEName & "Copyright (c) FelixMacintosh 2014"
    'Задать синий фона текста в консоли с ярко-желтыми символами
    SetConsoleTextAttribute hConsoleOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY _
    Or BACKGROUND_BLUE Or ENABLE_LINE_INPUT
End Sub
Добавлено через 7 минут
ENABLE_PROCESSED_OUTPUT = ВКЛЮЧИТЬ ВЫВОД ОБРАБОТЧИКА !
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
16.05.2014, 19:00
FelixMacintosh, какой смысл? Приложение все-равно GUI. Не думай что оно у тебя консольное. Для создания консольного приложения нужно прописывать специальные ключи линкеру в LinkSwitches.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 19:34  [ТС]
...

Добавлено через 4 минуты
Цитата Сообщение от The trick Посмотреть сообщение
LinkSwitches.
что за специальные ключи, где они прописываются, вообще на бейсике это можно сделать ?

Добавлено через 22 минуты
Ответы я получаю, осталось настроить выполнение команд !

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub main()
    Dim cons As New Console, s$
'    ConsoleWriteLine "Привет пиплы :)"
    cons.ConsoleWriteLine "Echo on"
    cons.ConsoleWriteLine "cls"
    cons.ConsoleWriteLine "regsvr32 dllERR.dll"
    On Error Resume Next
    While s <> "q"
        s = cons.ConsoleReadLine
        Shell (s)
        Debug.Print s
    Wend
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
16.05.2014, 19:35
Лучший ответ Сообщение было отмечено Антихакер32 как решение

Решение

Цитата Сообщение от FelixMacintosh Посмотреть сообщение
что за специальные ключи, где они прописываются, вообще на бейсики это можно сделать ?
Это ключи, точнее ключ (/SUBSYSTEM) линкеру. Эти ключи нужно прописывать в vbp файле в секции [VBCompiler] в параметре LinkSwitches, либо кто-то подменяет LINK.EXE. В данном случае будет так:
Code
1
2
[VBCompiler]
LinkSwitches=/SUBSYSTEM:CONSOLE
Во вложении настоящее консольное приложение на VB6.
Visual Basic
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
Option Explicit
 
Private Declare Function GetStdHandle Lib "kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput As Long, lpBuffer As Any, ByVal nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private 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
 
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&
 
Public Sub Main()
    Dim cIn     As Long
    Dim cOut    As Long
    Dim txt     As String
    Dim count   As Long
    
    cIn = GetStdHandle(STD_INPUT_HANDLE)
    cOut = GetStdHandle(STD_OUTPUT_HANDLE)
    
    txt = "VB6 Console App by The trick" & vbNewLine & "Enter your name: "
    WriteConsole cOut, ByVal txt, Len(txt), 0, ByVal 0&
    
    ReadConsole cIn, ByVal txt, Len(txt), count, ByVal 0&
    
    txt = "Hello " & Left$(txt, InStr(1, txt, vbNewLine) - 1) & "!"
    WriteConsole cOut, ByVal txt, Len(txt), 0, ByVal 0&
    
    ' Ждем
    ReadConsole cIn, ByVal txt, Len(txt), count, ByVal 0&
    
End Sub
Миниатюры
Работа с консолью из VB6  
Вложения
Тип файла: rar TestConsole.rar (3.5 Кб, 58 просмотров)
3
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 19:44  [ТС]
Спасибо ! ✰

как всегда выручил, и сэкономил для меня очень много времени на всякие поиски !

и с юбилеем тебя
Миниатюры
Работа с консолью из VB6  
2
16.05.2014, 19:55  [ТС]

Не по теме:

а мне ещё надо сделать 8 нарушений... и у меня будет анти-юбилей ... (шутка)

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
16.05.2014, 20:00
Лучший ответ Сообщение было отмечено Антихакер32 как решение

Решение

Но для чего нужна консоль? Кстати, консоль можно организовать совсем просто (без утомительного описания API-функций):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private sinp    As Scripting.TextStream
Private sout    As Scripting.TextStream
Private serr    As Scripting.TextStream
 
Sub main
 
    Set myFSO = New Scripting.FileSystemObject
 
    Set sinp = myFSO.GetStandardStream(CLng(0))
    
    Set sout = myFSO.GetStandardStream(CLng(1))
      
    Set serr = myFSO.GetStandardStream(CLng(2))
 
   '::: Теперь читай из sinp и пиши в sout
 
End Sub
Конечно, установить флаг консольного приложения нужно так, как это рекомендует уважаемый The trick.

Но непонятна, зачем нужна консоль?
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 20:09  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Но непонятна, зачем нужна консоль?
то что нельзя будет сделать программно ..как вы говорите с утомительными API-описаниями
можно будет упростить в консоле, вот собственно и всё...

P.S спасибо за код
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
16.05.2014, 20:17
Цитата Сообщение от Catstail Посмотреть сообщение
Кстати, консоль можно организовать совсем просто (без утомительного описания API-функций):
Мне по душе нативная реализация (не люблю грузить библиотеки, да и быстрей). Кстати я забыл сказать, что для отладки в IDE нужно вызывать AllocConsole перед получением хендлов,а перед выходом FreeConsole (тоже относится к коду уважаемого Catstail).
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
то что нельзя будет сделать программно ..как вы говорите с утомительными API-описаниями
можно будет упростить в консоле, вот собственно и всё...
Вообще не вижу связи. Проще на VB написать GUI приложение.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
16.05.2014, 20:20  [ТС]
Анатолий, мне уже давал код для полного мониторинга куста реестра
и сортировки, зареганных компонентов, он мне очень пригодится
теперь мне нужно решить ещё пару задач, и тогда моя прога будет и консольной и
с возможностью доустановки компонентов, ..вобщем гибкой
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
16.05.2014, 20:43
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Уважаемые коллеги,
недавно мне случайно попалась реализация консоли: http://vb.mvps.org/samples/Console/
Можно сразу переместиться вниз страницы и скачать архив. В нем исходники и exe.
Может, найдете что-то полезное.
3
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 10:36  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
http://vb.mvps.org/samples/Console/
весьма полезная статья... жаль мне сразу на глаза не попалась...

Добавлено через 1 минуту
Спасибо коллега

Добавлено через 13 часов 43 минуты
В принципе пример приведенный Catstail 'ом
вполне можно применить для моей задачи

позже я нашел практическое применение в его его поделках, в архиве vb_dll_proc.zip

так вот..
можно ли будет например открыть консоль в одной программе...
затем вызвать дочернюю программу передав ей управление и Command$,
та в свою очередь воспользуется уже открытой консолью
и выдаст ответ... ? ? ?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.05.2014, 10:51
Можно использовать AttachConsole, можно через пайпы получать доступ к дочерней консоли.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 11:54  [ТС]
Вобщем сделаю я модуль, в котором будут такие команды ...
на манер vb.net

Console.ReadLine() As String
Console.WriteLine(Text As String)

Добавлено через 57 минут
Цитата Сообщение от The trick Посмотреть сообщение
можно через пайпы
подскажи хоть один пример...
а то меня уже в гугле банить пытаются кривые числа просят ввести
из за странных моих вопросов к гуглу
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.05.2014, 11:58
Visual Basic
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
Option Explicit
 
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function PeekNamedPipe Lib "kernel32" (ByVal hNamedPipe As Long, lpBuffer As Any, ByVal nBufferSize As Long, lpBytesRead As Long, lpTotalBytesAvail As Long, lpBytesLeftThisMessage As Any) As Long
Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type
Private Type STARTUPINFO
    cb As Long
    lpReserved As Long
    lpDesktop As Long
    lpTitle As Long
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
Private Const STARTF_USESHOWWINDOW = &H1
Private Const STARTF_USESTDHANDLES = &H100
Private Const SW_HIDE = 0
Private Const EM_SETSEL = &HB1
Private Const EM_REPLACESEL = &HC2
 
Dim hRead As Long, hWrite As Long, info As PROCESS_INFORMATION
 
Private Function Read() As String
    Dim buf As String, count As Long, tmp As Byte
    Do
        PeekNamedPipe hRead, tmp, 1, count, 0, ByVal 0
        If count = 0 Then Exit Do
        buf = Space(1024)
        If ReadFile(hRead, ByVal buf, 1024, count, ByVal 0&) Then
            Read = Read & Left(buf, count)
        Else
            Exit Do
        End If
    Loop
End Function
Private Sub InitConsole(CommandLine As String)
    Dim attr As SECURITY_ATTRIBUTES
    Dim sui As STARTUPINFO
    
    attr.nLength = Len(attr)
    attr.lpSecurityDescriptor = 0
    attr.bInheritHandle = True
    
    If CreatePipe(hRead, hWrite, attr, 0) <> 0 Then
        sui.cb = Len(sui)
        GetStartupInfo sui
        sui.hStdOutput = hWrite
        sui.hStdError = hWrite
        sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
        sui.wShowWindow = SW_HIDE
        If CreateProcess(vbNullString, CommandLine, ByVal 0, ByVal 0, True, 0, ByVal 0, vbNullString, sui, info) = 0 Then
            CloseHandle hRead: CloseHandle hWrite
            MsgBox "error": End
        End If
    End If
End Sub
Private Sub DeinitConsole()
    CloseHandle hRead: CloseHandle hWrite: CloseHandle info.hThread: CloseHandle info.hProcess
End Sub
 
Private Sub cmdRead_Click()
    txtConsole.Text = Read
End Sub
 
Private Sub Form_Load()
    InitConsole "C:\Windows\System32\Cmd.exe"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    DeinitConsole
End Sub
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 12:04  [ТС]
Спасибо.. ! ✰
..Ну все до связи, на выходных всё отлажу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2014, 12:04
Помогаю со студенческими работами здесь

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

Работа с консолью
Проблема следующая: Дописать в конец созданного файла результаты команды, которая отображает содержимое корневого каталога.

работа с консолью
подскажите пожалуйсто можно ли как нибудь сделать что бы все данные с консоли при написании system(&quot;ping google.com&quot;)...

Работа с консолью.
Возник у меня такой вопрос: - Можно ли вывести на экран несколько окон консолив одном приложении? Как это сделать? С выводом на нужную...

Работа с консолью
Есть такой метод public void MatrixDispSlow() { for (int i = 0; i &lt; N; i++) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru