С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445

Считать текст с консольного приложения

20.07.2012, 16:56. Показов 3175. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как считать текст с чужой программы которая в консольном формате?
С обычных программ я просто отсылал WM_GETTEXTLENGHT и WM_GETTEXT
а тут не знаю как
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.07.2012, 16:56
Ответы с готовыми решениями:

Считывать текст асинхронно из консольного приложения
Есть стороннее консольное приложение. Мне нужно сделать так: 1. запустить его моей программой, 2. из консоли асинхронно считывать...

Вывести текст с консоли в Memo, но только после завершения консольного приложения
Программа выводить текст с консоли в Memo, но только после завершения консольного приложения. Как сделать вывод в реальном времени? ...

Считать текст из окна стороннего приложения
Здравствуйте. Скажите пожалуйста как считать текст из таких окон как прикреплены к сообщению?????

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
20.07.2012, 17:21
AttachConsole и читай вывод через ReadConsoleOutput<...>
2
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
20.07.2012, 18:14  [ТС]
можно пожалуйста пример с ReadConsoleOutput, а то уже 40 минут сижу, ничего не получается

Добавлено через 15 минут
Вот какой-то код надыбал, но не пойму
VB.NET
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
Option Explicit On
Option Strict On
 
Imports System.Runtime.InteropServices
Public Class TEST
    Private Enum STD_HANDLES
        STD_INPUT_HANDLE = -10
        STD_OUTPUT_HANDLE = -11
        STD_ERROR_HANDLE = -12
    End Enum
 
    <StructLayout(LayoutKind.Explicit, CharSet:=CharSet.Auto)> _
    Private Structure CHAR_TYPE
        <FieldOffset(0)> _
        Public UnicodeChar As Short
 
        <FieldOffset(0)> _
        Public AsciiChar As Byte
    End Structure
 
    <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
    Private Structure CHAR_INFO
        Public [Char] As CHAR_TYPE
        Public Attributes As Short
    End Structure
 
    <StructLayout(LayoutKind.Sequential)> _
    Private Structure COORD
        Public X As Short
        Public Y As Short
 
        Public Sub New(ByVal X As Short, ByVal Y As Short)
            Me.X = X
            Me.Y = Y
        End Sub
    End Structure
 
    <StructLayout(LayoutKind.Sequential)> _
    Private Structure SMALL_RECT
        Public Left As Short
        Public Top As Short
        Public Right As Short
        Public Bottom As Short
 
        Public Sub New(ByVal Left As Short, ByVal Top As Short, ByVal Right As Short, ByVal Bottom As Short)
            Me.Left = Left
            Me.Top = Top
            Me.Right = Right
            Me.Bottom = Bottom
        End Sub
    End Structure
 
    Private Declare Function GetStdHandle Lib "kernel32" ( _
    ByVal nStdHandle As STD_HANDLES) As IntPtr
 
    Private Declare Auto Function ReadConsoleOutput Lib "kernel32" ( _
    ByVal hConsoleOutput As IntPtr, _
    ByRef lpBuffer As CHAR_INFO, _
    ByVal dwBufferSize As COORD, _
    ByVal dwBufferCoord As COORD, _
    ByRef lpReadRegion As SMALL_RECT) As Boolean
 
    Public Sub Main()
        Console.WriteLine("*-*-*-*")
        Console.WriteLine("*-*-*-*")
        Console.WriteLine("*-*-*-*")
        Console.WriteLine("*-*-*-*")
 
        Dim hConsoleOutput As IntPtr = GetStdHandle(STD_HANDLES.STD_OUTPUT_HANDLE)
        Dim Buffer(27) As CHAR_INFO
        Dim BufferSize As New COORD(7, 4)
        Dim BufferCoord As New COORD(0, 0)
        Dim ReadRegion As New SMALL_RECT(0, 0, 6, 3)
 
        MsgBox(ReadConsoleOutput(hConsoleOutput, Buffer(0),
        BufferSize, BufferCoord, ReadRegion))
 
        For i As Integer = 0 To 27
            MsgBox(Chr(Buffer(i).Char.UnicodeChar))
        Next
    End Sub
End Class
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
20.07.2012, 18:33
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Поскольку я ленивый - не стал извращаться с чистым API для вывода результатов, написал тест на Дельфи (сама работа с консолью - только WinAPI). Вот чего вышло:

Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
var
   conWnd : HWND;
   PID : DWORD;
   conHandle : THandle;
   bufInfo : CONSOLE_SCREEN_BUFFER_INFO;
   p : PChar;
   i : Integer;
   Crd : _COORD;
   read : DWORD;
 
   s : string;
begin
   conWnd := FindWindow(nil, 'F:\Programs\Pascal\justtest.exe');
   GetWindowThreadProcessId(conWnd, @PID);
   if AttachConsole(PID) then
   begin
      conHandle := GetStdHandle(STD_OUTPUT_HANDLE);
      GetConsoleScreenBufferInfo(conHandle, BufInfo);
 
      GetMem(p, BufInfo.dwMaximumWindowSize.X + 1);
      try
         for i := 0 to BufInfo.dwSize.Y - 1 do
         begin
            Crd.X := 0;
            Crd.Y := i;
            ReadConsoleOutputCharacter(conHandle, p, BufInfo.dwMaximumWindowSize.X, Crd, read);
            s := Trim(StrPas(p));
            if s <> '' then
               Memo1.Lines.Add(s);
         end;
      finally
         FreeMem(p, BufInfo.dwMaximumWindowSize.X + 1);
      end;
      FreeConsole;
   end;
end;
Вот так выглядело:
Миниатюры
Считать текст с консольного приложения  
2
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
20.07.2012, 18:54  [ТС]
Сейчас попробую перевести в VB, благодарю
0
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
15.08.2012, 00:05
UI у меня вопрос. использую Delphi xe2 (если это имеет хоть какое-то значение) и попробовал откомпилировать код из поста 4, но я вылезает 2 ошибки:
1ая - на 1ой же строчке. Tform1 does not contain a member name 'Button2Click'
2ая - на 16 строчке. undeclared identifier 'attachconsole'

Смотрю в гугле - не могу понять. у одних есть эта ошибка у других при запуске одного и того же кода этой ошибки ВНЕЗАПНО нет. почему? что делать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
15.08.2012, 00:27
Цитата Сообщение от Megatron13 Посмотреть сообщение
1ая - на 1ой же строчке. Tform1 does not contain a member name 'Button2Click'
Кнопку на форму положил? Кнопка должна называться Button2. Не Button1, а именно Button2. У меня на Button1 другой код был навешан.
Цитата Сообщение от Megatron13 Посмотреть сообщение
2ая - на 16 строчке. undeclared identifier 'attachconsole'
У меня тоже эта функция не присутствует (D2009), описывал так:

Delphi
1
2
function AttachConsole(dwProcessId : DWORD) : BOOL; stdcall;
external 'kernel32.dll' name 'AttachConsole';
1
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
15.08.2012, 00:57
спасибо, теперь еще вопрос. 30 строчка. та же ошибка 3 раза - undeclared identifier 'Memo1', undeclared identifier 'lines', undeclared identifier 'Add'
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,886
Записей в блоге: 12
15.08.2012, 01:28
По-моему, так будет проще:
Вложения
Тип файла: zip over.zip (6.7 Кб, 72 просмотров)
1
9 / 7 / 0
Регистрация: 09.08.2012
Сообщений: 79
15.08.2012, 01:31
спасибо. правда я сам справился и полез сейчас писать, что справился.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2012, 01:31
Помогаю со студенческими работами здесь

Проект консольного приложения из Windows приложения
привет всем. В чем может быть ошибка? 1&gt;MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в...

Запуск консольного приложения из другого приложения
Я понимаю, что мой вопрос уже разжеван. Однако точного ответа я пока на него не нашел. У меня есть некоторое приложение. Я хочу по...

Перезапуск Консольного приложения
Можно ли каким либо образом перезапустить консольное приложение или хотя бы скажите какой Event срабатывает после его завершения

Интерфейс консольного приложения
Мне интересно, реально ли это вообще? Поясню на конкретном примере. Пытаюсь писать консольную игру-файтинг. Текстовая ,естественно. ...

Отладка консольного приложения
в отладчике OllyDbg открыл оконный проект из Делфи, вся информация, код отображаются нормально. Таким же способом открыл обычную консольную...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru