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

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

16.05.2014, 18:16. Показов 9481. Ответов 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
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 17:15  [ТС]
Студворк — интернет-сервис помощи студентам
Кстате я исправил глюк в твоём коде ..
внеся пару функций

Visual Basic
1
2
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
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Option Explicit
'
'   © The trick, 2014
'
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 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 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
    OemToChar Read, Read
End Function
 
Private Sub InitConsole(ByVal CommandLine As String)
    CharToOem CommandLine, CommandLine
    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
ниже две картинки, с глюком и без глюка
Миниатюры
Работа с консолью из VB6   Работа с консолью из VB6  
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 17:18  [ТС]
вот еще форма ...
ты там не забросил объекты для наглядности...
Вложения
Тип файла: rar Form2.rar (1.6 Кб, 12 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 22:02  [ТС]
И спасибо за код...
The Trick, благодаря тебе я все больше стал уважать байсик !

наверное это и будет окончательный вариант
а если возникнут вопросы свяжусь

Добавлено через 4 часа 13 минут
Что я опять не то сделал,
добавил функцию
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long

в классе вызываю так...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Function WriteLine(ByVal CommandLine$, Optional Carret As Boolean) As String
    '
    '
    '
    Dim buf As String, count As Long, tmp As Byte
    
    PeekNamedPipe hWrite, tmp, 1, count, 0, ByVal 0
    CharToOem CommandLine, CommandLine
'    CommandLine = StrConv(CommandLine, vbFromUnicode)
    WriteFile hWrite, CommandLine, Len(CommandLine), count, ByVal 0&
 
End Function
но в принимающем текстовом контроле вылазиют кракозябры ...

Добавлено через 3 минуты
из за этого собственно команды и не выполняются ...

Добавлено через 2 минуты
а вот так вызываеться...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub txtConsole_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim CommandLine$, ISR&, lc&
    If Right$(txtConsole, 2) = vbCrLf Then
        CommandLine = txtConsole
        lc = Len(CommandLine)
        ISR = InStrRev(CommandLine, vbCrLf, lc - 2)
        CommandLine = Mid(CommandLine, IIf(ISR, ISR, 1), lc)
        Console.WriteLine (CommandLine)
        txtConsole.Text = Console.Read
    End If
End Sub
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 22:05  [ТС]
ввод//вывод
Миниатюры
Работа с консолью из VB6   Работа с консолью из VB6  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
17.05.2014, 23:06
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
то что нельзя будет сделать программно ..как вы говорите с утомительными API-описаниями
можно будет упростить в консоле, вот собственно и всё...
- я боюсь, Вы путаете консоль и интерпретатор команд cmd.exe. Консоль - это просто средство общения с пользователем. Сама по себе она ничего не может. И в нее бессмысленно вводить команды (для этого нужно просто запустить cmd.exe, и подавать команды ему на вход)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 23:21  [ТС]
в любом случае она мне нужна для обмена инфой
между программами !
кстати исправил тот глюк ...

Visual Basic
1
2
3
4
5
6
7
8
Public Function WriteLine(ByVal CommandLine$, Optional Carret As Boolean) As String
    
    Dim count As Long
    If Carret Then CommandLine = CommandLine & vbCrLf
    CharToOem CommandLine, CommandLine
    WriteFile hWrite, ByVal CommandLine, Len(CommandLine), count, 0&
    
End Function
Добавлено через 3 минуты
я таким способом смогу обмениватся межу программами ..
ну и пусть они не обрабатываются, у меня Shell есть ..

а ответ то надо же както передавать ?...

Добавлено через 4 минуты
...и да, действительно я путал консоль с интерпритатором комманд,
зато теперь я твердо уверен что нужно делать дальше...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
17.05.2014, 23:22
Для межпроцессного обмена есть отличные механизмы (пайпы, разделяемая память).
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
а ответ то надо же както передавать ?..
- его можно направить в файл, потом взять его оттуда ...
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.05.2014, 23:47  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
его можно направить в файл, потом взять его оттуда
...да уж, стоило столько провозиться... 2 дня ! чтоб понять что можно так-же обмениваться через файл

Добавлено через 18 минут
Просто я считал что так быстрее будет обмен
хотя овчинка выделки не стоит...

Добавлено через 3 минуты
сохраню свои черновики наработки, авось пригодиться ...
и вернусь к обычному межпрограммному обмену через файл на диске...
неохота через реестр обмениваться, вот в чем дело
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.05.2014, 11:34
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
Просто я считал что так быстрее будет обмен
хотя овчинка выделки не стоит...
Практиески весь межпроцесорный обмен основан на файлах, проецируемых в память. Поэтому это самый быстрый способ.
FelixMacintosh, да возьми ты наконец какую-нибудь книжечку по WinApi прочитай. Ты совершенно безсмысленные высказывания делаешь (без обид).
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.05.2014, 22:55  [ТС]
И всётаки я сделал интерактивную консоль !


вот модуль формы ...
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
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
Option Explicit
'
'    '© FelixMacintosh (CiberForum.ru)
'    'Интарактивная консоль
'
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 Long) 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 WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As Long
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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function DuplicateHandle Lib "kernel32" (ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, ByVal hTargetProcessHandle As Long, lpTargetHandle As Long, ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwOptions As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () 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 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'
Private Const STARTF_USESTDHANDLES As Long = &H100
Private Const STARTF_USESHOWWINDOW As Long = &H1
Private Const DUPLICATE_SAME_ACCESS As Long = &H2
Private Const NORMAL_PRIORITY_CLASS As Long = &H20
 
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
 
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    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 Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
 
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessID As Long
    dwThreadId As Long
End Type
Dim lHInput As Long
Dim lHOutput As Long
Dim lCmdID As Long
Dim Out As String '''
Dim WithEvents lab As Label
 
Private Sub Form_Unload(Cancel As Integer)
    StopShell
End Sub
 
Private Sub Form_Activate()
    Dim myHeight&
    Const cnsWidth = 8000
    Const cnsHeight = 6000
    Me.Width = cnsWidth
    Me.Height = cnsHeight
    myHeight& = Me.ScaleHeight - Command1.Height
    Text1.Move 0, 0, Me.ScaleWidth, myHeight&
    Command1.Move 0, myHeight&
End Sub
 
Private Sub SetText(Text$)
    Text1 = Text$: Text1.SelStart = Len(Text)
End Sub
 
Private Sub Form_Load()
    Text1.ForeColor = Text1.BackColor
    Text1.BackColor = 0
    Me.Caption = App.EXEName
    StartShell
    Sleep 200
    GetOutTextShell Out
    Sleep 100
    SetText Out
End Sub
 
Private Sub Form_Resize()
    'Разместить форму по центру
    Me.Move (Screen.Width - Me.ScaleWidth) / 2, (Screen.Height - Me.ScaleHeight) / 2
    
End Sub
 
Private Sub text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim CommandLine$, ISR&, lc&
    lc = Len(Text1)
    If KeyCode = 13 And Right$(Text1, 2) = vbCrLf And lc > 2 Then
        CommandLine = Text1
        ISR = InStrRev(CommandLine, ">", lc - 2)
        CommandLine = Mid(CommandLine, IIf(ISR, ISR + 1, 1), lc)
        SendToShell CommandLine
        Sleep 100
        GetOutTextShell Out
        SetText Text1 & Out
    End If
End Sub
 
Private Sub Command1_Click()
    Text1.Text = ""
End Sub
 
Public Sub StopShell()
    If lHInput > 0 Then Call CloseHandle(lHInput)
    If lHOutput > 0 Then Call CloseHandle(lHOutput)
    If lCmdID > 0 Then Call TerminateProcess(lCmdID, ByVal 0&): Call CloseHandle(lCmdID)
End Sub
 
Public Function GetOutTextShell(CommandLine As String) As Boolean
    Dim bBuffer() As Byte
    Dim lLen As Long
    Dim bRes As Boolean
    Dim lLenBuff As Long
    bRes = CBool(PeekNamedPipe(lHOutput, 0&, 0&, 0&, lLen, 0&))
    If Not bRes Then Exit Function
    If lLen <= 0 Then Exit Function
    ReDim bBuffer(lLen)
    If ReadFile(lHOutput, bBuffer(0), lLen, lLenBuff, ByVal 0&) = 0 Then Exit Function
    CommandLine = Left(StrConv(bBuffer, vbUnicode), lLenBuff)
    OemToChar CommandLine, CommandLine
    GetOutTextShell = True
End Function
 
Public Sub SendToShell(CommandLine As String, Optional bNewLine As Boolean)
 
    Dim BytesWritten As Long
    If lHInput = 0 Then Exit Sub
    CharToOem CommandLine, CommandLine
    If bNewLine Then CommandLine = CommandLine & vbNewLine
    If WriteFile(lHInput, ByVal CommandLine, Len(CommandLine), BytesWritten, 0&) = 0 Then
        Exit Sub
    End If
End Sub
 
Public Function StartShell() As Boolean
    On Error GoTo Error
    Dim tSecurityAttributes As SECURITY_ATTRIBUTES
    Dim tStartInfo As STARTUPINFO
    Dim tProcessInfo As PROCESS_INFORMATION
    Dim lCurrentID As Long
    lCurrentID = GetCurrentProcess()
 
    With tStartInfo
        .cb = Len(tStartInfo)
        .dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
    End With
 
    With tSecurityAttributes
        .nLength = Len(tSecurityAttributes)
        .bInheritHandle = 1
    End With
 
    If CreatePipe(lHOutput, tStartInfo.hStdOutput, tSecurityAttributes, 0) = 0 Then
        GoTo Error
    End If
 
    If CreatePipe(tStartInfo.hStdInput, lHInput, tSecurityAttributes, 0) = 0 Then
        GoTo Error
    End If
 
    If DuplicateHandle(lCurrentID, tStartInfo.hStdOutput, lCurrentID, tStartInfo.hStdError, _
    0&, True, DUPLICATE_SAME_ACCESS) = 0 Then
        GoTo Error
    End If
 
    If CreateProcess(vbNullString, "cmd", tSecurityAttributes, tSecurityAttributes, 1, NORMAL_PRIORITY_CLASS, _
    ByVal 0&, vbNullString, tStartInfo, tProcessInfo) = 0 Then
        GoTo Error
    End If
 
    With tProcessInfo
        Call CloseHandle(.hThread)
        lCmdID = .hProcess
 
        If .dwProcessID > 0 And .hProcess > 0 Then
            StartShell = True
        Else
            GoTo Error
        End If
    End With
    Exit Function
Error:
    Call StopShell
    StartShell = False
End Function

ниже картинка что получилось, а значит можно отдавать команды
и получать ответ ... всё !... я своё доказательство доказал
Миниатюры
Работа с консолью из VB6  
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.05.2014, 23:55  [ТС]
...конечно, потребуются ещё доработки, например
сейчас я пока использую Sleep, но позже я буду программно отслеживать
образовавшиеся новый поток(потоки) после каждой команды, и ждать их завершения,
после чего прочитать инфу что там сообщила консоль...
и на основе этого моя глобальная прога будет делать выводы и действовать...

Добавлено через 18 минут
Так-же заметил, что иногда процесс работающей консоли
остаётся в системе... и не завершается после закрытия хэндлов...
..вот как я пока, решил эту проблемму ..

сначало ввод команды Exit, затем закрытие хендлов...

Visual Basic
1
2
3
4
5
6
7
Public Sub StopShell()
    SendToShell "exit", True
    Sleep 100
    If lHInput > 0 Then Call CloseHandle(lHInput)
    If lHOutput > 0 Then Call CloseHandle(lHOutput)
    If lCmdID > 0 Then lCmdID = TerminateProcess(lCmdID, ByVal 0&): Call CloseHandle(lCmdID)
End Sub
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 00:35  [ТС]
Так-же ..провёл испытание того, для чего я делаю ...
Миниатюры
Работа с консолью из VB6  
0
19.05.2014, 00:59  [ТС]

Не по теме:

The Trick, поздравляю тебя, что тебя назначали модератором..
..радуюсь, как за себя... , и тоже согласен тебе помогать
выявлять злостных нарушителей форума...,

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

0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 16:53  [ТС]
Модифицировал !

теперь всё работает правильно, во всяком случае в вызове обычных команд:
и синхронно с моим текстбоксом, в плане инициализации и завершения...

вот код:
Кликните здесь для просмотра всего текста
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
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
Option Explicit
'
'    '© FelixMacintosh (CiberForum.ru)
'    'Интерактивная консоль
'
#Const ForDebug = 1 'Режим отладки
 
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 Long) 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 WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As Long
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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function DuplicateHandle Lib "kernel32" (ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, ByVal hTargetProcessHandle As Long, lpTargetHandle As Long, ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwOptions As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () 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 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'
Private Const STARTF_USESTDHANDLES As Long = &H100
Private Const STARTF_USESHOWWINDOW As Long = &H1
Private Const DUPLICATE_SAME_ACCESS As Long = &H2
Private Const NORMAL_PRIORITY_CLASS As Long = &H20
 
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
 
Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    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 Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
 
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type
'Мои переменные
Dim hInput As Long
Dim hOutput As Long
Dim hCmd As Long
Dim sOut As String
Dim nOutLen As Long
Dim bEchoOff As Boolean
Dim bOnlyOut As Boolean
 
Private Sub text1_KeyUp(KeyCode As Integer, Shift As Integer)
    Dim f&, j$(), s$, bRead As Boolean
    
    Dim CommandLine$, ISR&, lc&
    lc = Len(Text1)
    
    If KeyCode = 13 And Right$(Text1, 2) = vbCrLf And lc > 2 Then
        KeyCode = 0
        s = Mid(Text1, nOutLen + 1)
        j = Split(s, vbCrLf)
        bOnlyOut = True 'Только вывод
        For f = 0 To UBound(j) - 1
            If Len(j(f)) Then
                CommandLine = j(f)
                SendToShell CommandLine, True
                SetText
            End If
        Next
    End If
End Sub
 
 
Public Sub SendToShell(ByVal CommandLine As String, Optional bNewLine As Boolean)
 
    Dim BytesWritten As Long
    If hInput = 0 Then Exit Sub
    CommandLine = Trim(CommandLine)
    '
    'Моя интерпритация, для синхронности с консолью....
    'Подрамезуваеться, что синтаксис CMD будет правильным
    '
    If InStr(1, CommandLine, "Echo Off", vbTextCompare) Like "[1-2]" Then
        bEchoOff = True 'Бывает ставят ... @Echo Off
    ElseIf InStr(1, CommandLine, "Echo", vbTextCompare) Like "[1-2]" Then
        bEchoOff = False
    ElseIf InStr(1, CommandLine, "Cls", vbTextCompare) Like "[1-2]" Then
        Command1_Click
    ElseIf InStr(1, CommandLine, "Exit", vbTextCompare) Like "[1-2]" Then
        #If ForDebug Then
            If MsgBox("Введена: " & vbCrLf & "[" & CommandLine & "] ..завершить программу  ?", _
            vbYesNo Or vbInformation) = vbYes Then StopShell: End
        #Else
             Call StopShell: End
        #End If
    End If
    '
    '
    '
    If Not bEchoOff Then CharToOem CommandLine, CommandLine
    If bNewLine Then CommandLine = CommandLine & vbCrLf
    If WriteFile(hInput, ByVal CommandLine, Len(CommandLine), BytesWritten, 0&) = 0 Then
        Exit Sub
    Else
        Call GetOutTextShell(sOut)
    End If
 
End Sub
 
 
Public Function GetOutTextShell(CommandLine As String) As Boolean
    Dim bBuffer() As Byte, f&, inst&
    Dim lLen As Long
    Dim bRes As Boolean
    Dim lLenBuff As Long
    For f = 1 To 100 '100 попыток ...
        DoEvents 'Включить реакцию чтоб не зависла
        Do
            bRes = CBool(PeekNamedPipe(hOutput, 0&, 0&, 0&, lLen, 0&))
            If Not bRes Then Exit Do
            If lLen <= 0 Then Exit Do
            ReDim bBuffer(lLen)
            
            If ReadFile(hOutput, bBuffer(0), lLen, lLenBuff, ByVal 0&) = 0 Then Exit Do
        
            CommandLine = Left(StrConv(bBuffer, vbUnicode), lLenBuff)
            If Not bEchoOff Then OemToChar CommandLine, CommandLine
            
            If bOnlyOut Then
                inst = InStr(1, CommandLine, vbCrLf) + 2
                CommandLine = Mid$(CommandLine, IIf(inst = 2, 1, inst))
            End If
            Exit For
        Loop
        Sleep 100 'Ждать когда появится запись
    Next
    GetOutTextShell = True
End Function
 
Public Sub StopShell()
    While hCmd
        DoEvents 'Включить реакцию
        Call CloseHandle(hInput)
        Call CloseHandle(hOutput)
        hCmd = TerminateProcess(hCmd, ByVal 0&)
        If hCmd Then CloseHandle (hCmd)
        Sleep 100 'Ждать закрытия
    Wend
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    StopShell
End Sub
 
Private Sub Form_Activate()
    Dim myHeight&
    Const cnsWidth = 10000
    Const cnsHeight = 6000
    Me.Width = cnsWidth
    Me.Height = cnsHeight
    myHeight& = Me.ScaleHeight - Command1.Height
    Text1.Move 0, 0, Me.ScaleWidth, myHeight&
    Command1.Move 0, myHeight&
End Sub
 
Private Sub SetText()
    Text1 = Text1 & sOut
    nOutLen = Len(Text1)
    Text1.SelStart = nOutLen
End Sub
 
Private Sub Form_Load()
    Text1.ForeColor = Text1.BackColor
    Text1.BackColor = 0
    Me.Caption = App.EXEName
    StartShell
    SetText
End Sub
 
Private Sub Form_Resize()
    'Разместить форму по центру
    Me.Move (Screen.Width - Me.ScaleWidth) / 2, (Screen.Height - Me.ScaleHeight) / 2
End Sub
 
 
Private Sub Command1_Click()
    sOut = ""
    Text1.Text = ""
    SetText
End Sub
 
Public Function StartShell() As Boolean
    On Error GoTo Error
    Dim tSecurityAttributes As SECURITY_ATTRIBUTES, f&
    Dim tStartInfo As STARTUPINFO
    Dim tProcessInfo As PROCESS_INFORMATION
    Dim lCurrentID As Long
    lCurrentID = GetCurrentProcess()
 
    With tStartInfo
        .cb = Len(tStartInfo)
        .dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
    End With
 
    With tSecurityAttributes
        .nLength = Len(tSecurityAttributes)
        .bInheritHandle = 1
    End With
 
    If CreatePipe(hOutput, tStartInfo.hStdOutput, tSecurityAttributes, 0) = 0 Then
        GoTo Error
    End If
 
    If CreatePipe(tStartInfo.hStdInput, hInput, tSecurityAttributes, 0) = 0 Then
        GoTo Error
    End If
 
    If DuplicateHandle(lCurrentID, tStartInfo.hStdOutput, lCurrentID, tStartInfo.hStdError, _
    0&, True, DUPLICATE_SAME_ACCESS) = 0 Then
        GoTo Error
    End If
 
    If CreateProcess(vbNullString, "cmd", tSecurityAttributes, tSecurityAttributes, 1, NORMAL_PRIORITY_CLASS, _
    ByVal 0&, vbNullString, tStartInfo, tProcessInfo) = 0 Then
        GoTo Error
    End If
 
    With tProcessInfo
 
        Call CloseHandle(.hThread)
        hCmd = .hProcess
        If .dwProcessId > 0 And .hProcess > 0 Then
            StartShell = True
            Call GetOutTextShell(sOut) 'Запомнить весь стартовый текст
        Else
            GoTo Error
        End If
    End With
 
    Exit Function
Error:
    Call StopShell
    StartShell = False
End Function



однако есть некоторые ньюансы, не могу правильно интерпритировать символы
когда введена команда Echo ... в некоторых случаях вылазиют ироглифы ...
может кто подскахет, в чем тут дело ?...
Миниатюры
Работа с консолью из VB6   Работа с консолью из VB6  
Вложения
Тип файла: rar Console.rar (3.1 Кб, 21 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 17:53  [ТС]
хочу добавить что у меня в батниках нулевые знания...
поэтому и не знаю как там некоторые символы интерпритируются...

Добавлено через 31 минуту
Где бы мне этот код выложить чтоб подсказали....
на форуме майкрософта наверное выложу...
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
19.05.2014, 17:57
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
Где бы мне этот код выложить чтоб подсказали....
на форуме майкрософта наверное выложу...
Я вообще не могу понять твой код . Для чего он нужен?
Когда ты дашь нормальное объяснение, тогда я дам нормальный код.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 18:14  [ТС]
Объяснение !....
я вызываю программу таким способом... Proga.exe /cmd "набор команд"
в принципе текстбокс мне не нужен.. я хочу просто.. получать текстовый ответ...
из запущенной консоли в родительской программе

сейчас я использую текстбокс только для отладки, чтоб убедиться что всё понимается правильно...

кроме того, перед тем как обработать команду там в дочерней проге будет еще
дополнительная обработка текста, например расстановка пропущенных кавычек
или расшифровка сокращений... и тд и тп

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

сейчас мне надо выяснить почему вылазиют ироглифы в некоторых текстах BATH и всё

Добавлено через 2 минуты
тоесть ироглифы вылазят при выполнении если объявленно @Echo off
а так-же я не уверен правильно ли консоль понимает вводимый текст в этот момент
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
19.05.2014, 18:16
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
в принципе текстбокс мне не нужен.. я хочу просто.. получать текстовый ответ...
из запущенной консоли в родительской программе
Для чего консоль? Вот ты получаешь в свою программу команды, и в ней же обрабатывай. При чем консоль? Ну если хочешь, можешь сделать ее консольной. Для чего запускать еще что-то?
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
сейчас мне надо выяснить почему вылазиют ироглифы в некоторых текстах BATH и всё
В каких именно?
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 18:46  [ТС]
в любом случае, видны результаты когда батник пытается чтото делать ...
я запускал уже пробники из готовых решений раздела CMD/BATH

так вот то что авторы заявляют выполняется при этом из за
ироглифов я не могу понять что требуется, а значит и правильно интерпритировать
чтоб родительская программа это понимала

Добавлено через 25 минут
Вот к примеру ...

https://www.cyberforum.ru/post4259662.html
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.05.2014, 18:50  [ТС]
у меня вылазиит это
Миниатюры
Работа с консолью из VB6  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2014, 18:50
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru