Вверх ↑
Этот топик читают: Гость
Ответов: 99
Рейтинг: 4
#1: 2023-09-20 19:32:02 ЛС | профиль | цитата
Как добавить окно консоли к GUI программе? Я про conhost.exe, а не про какую-нибудь ChildForm с текстом внутри. И мне нужно чтобы консоль не была отдельной программой. Всякие пакеры что запихивают два или более программ в один исполняемый файл мне не нужны, т.к. некоторое анти-вирусы будут орать на такое.
карма: 0

0
Ответов: 300
Рейтинг: 26
#2: 2023-09-20 21:18:36 ЛС | профиль | цитата
Могу предложить такое.


Add(MainForm,2953706,21,105)
{
Width=655
Height=503
}
Add(Memo,15974791,518,168)
{
Width=639
Height=444
Align=5
Color=0
Font=[MS Sans Serif,8,0,65280,1]
ScrollBars=2
}
Add(Charset,10716446,469,168)
{
Type=7
link(onCharset,15974791:doAdd,[])
}
Add(WinExec,12351678,392,168)
{
FileName="conhost.exe"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,5275824:doWork2,[(446,188)(446,174)])
link(onConsoleError,5275824:doWork3,[(459,195)])
}
Add(HubEx,5275824,455,168)
{
link(onEvent,10716446:doCharset,[])
}
Add(Edit,10826958,315,175)
{
Top=444
Width=639
Align=4
Text="DRIVERQUERY"
link(onEnter,12351678:doConsoleExec,[])
}

карма: 2
0
Ответов: 99
Рейтинг: 4
#3: 2023-09-21 10:56:56 ЛС | профиль | цитата
Не пойдёт.. Ведь окно консоли я хочу использовать как журнал ошибок, как например в Blender.

Редактировалось 1 раз(а), последний 2023-09-21 10:57:08
карма: 0

0
Ответов: 769
Рейтинг: 167
#4: 2023-09-21 14:26:30 ЛС | профиль | цитата
TheRenat писал(а):
окно консоли я хочу использовать как журнал ошибок, как например в Blender.

Не очень понятно, что такое "журнал ошибок"? компонент Memo?
Обычную консоль можно перетащить в свою программу как-то так.
Add(MainForm,4786198,112,175)
{
Width=585
Point(Handle)
Point(onClose)
link(onCreate,6551185:doExec,[])
link(onClose,5995727:doClose,[(151,202)(151,265)])
}
Add(WinExec,6551185,175,189)
{
FileName="cmd"
Param="/K mode con:cols=60 lines=10&&color 03 &&title консоль"
link(onExec,10692566:doDeferredEvent,[])
}
Add(FindWindow,1686983,273,189)
{
ClassName="ConsoleWindowClass"
SkipParam=1
link(onFind,15566162:doSetParent,[])
}
Add(SetParent,15566162,322,189)
{
link(NewParent,4786198:Handle,[(335,180)(167,180)(167,215)(118,215)])
}
Add(DeferredEvent,10692566,224,189)
{
Delay=10
link(onDeferredEvent,1686983:doFind,[])
}
Add(WinTools,5995727,273,238)
{
link(Handle,1686983:Handle,[])
}


Редактировалось 1 раз(а), последний 2023-09-21 14:28:07
карма: 15

0
Ответов: 300
Рейтинг: 26
#5: 2023-09-21 20:33:06 ЛС | профиль | цитата
Может так?
conhost.exe кинь рядом


Add(MainForm,1149343,315,35)
{
Width=867
Height=503
}
Add(Memo,15974791,581,126)
{
Left=307
Width=544
Height=464
Align=3
Color=0
Font=[MS Sans Serif,8,0,65280,1]
ScrollBars=3
}
Add(Charset,10716446,532,126)
{
Type=7
link(onCharset,15974791:doAdd,[])
}
Add(WinExec,12351678,455,77)
{
FileName="conhost.exe"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,5275824:doWork2,[(509,97)(509,132)])
link(onConsoleError,5275824:doWork3,[(522,104)])
}
Add(HubEx,5275824,518,126)
{
link(onEvent,10716446:doCharset,[])
}
Add(Button,14023461,315,84)
{
Left=35
Top=45
Caption="help"
Data=String(help)
link(onClick,1085242:doEvent1,[(380,90)(380,146)])
}
Add(Button,11376487,315,119)
{
Left=100
Top=45
Width=85
Caption="SYSTEMINFO"
Data=String(SYSTEMINFO)
link(onClick,1085242:doEvent2,[(370,125)(370,153)])
}
Add(Edit,15674342,315,203)
{
Left=20
Top=150
Width=231
Text=""
link(onEnter,1085242:doEvent4,[(380,216)(380,167)])
}
Add(Label,13076068,273,119)
{
Left=15
Top=10
Width=111
Height=17
Caption="Кнопки с командами"
}
Add(Button,12951280,315,154)
{
Left=190
Top=45
Width=70
Caption="TASKLIST"
Data=String(TASKLIST)
link(onClick,1085242:doEvent3,[])
}
Add(Label,9178640,273,203)
{
Left=15
Top=115
Width=95
Height=17
Caption="Команды вручную"
}
Add(Hub,1085242,413,140)
{
InCount=4
OutCount=3
link(onEvent1,15974791:doClear,[(504,146)(504,139)])
link(onEvent2,12351678:doConsoleExec,[(441,153)(441,97)])
link(onEvent3,6888090:doText,[(479,160)(479,202)])
}
Add(Edit,6888090,532,196)
{
Left=20
Top=280
Width=230
Text=""
}
Add(Label,8579702,532,238)
{
Left=20
Top=250
Width=222
Height=17
Caption="Последняя команда которая выполнялась"
}

карма: 2
0
Ответов: 99
Рейтинг: 4
#6: 2023-09-22 11:19:47 ЛС | профиль | цитата
Gunta писал(а):
Не очень понятно, что такое "журнал ошибок"? компонент Memo?

Вот пример с Blender:

Консоль как видно связана с программой, но не является стороннем приложением. А окно консоли отображается через conhost.exe (системная программа, если что).
Я так понимаю есть какой-то метод для создания окна, вне зависимости является ли приложение консольным или нет. Надеюсь что ЕСТЬ способ открыть консоль через GUI приложение, а не оборот.
карма: 0

0
Ответов: 769
Рейтинг: 167
#7: 2023-09-28 06:48:48 ЛС | профиль | цитата
TheRenat писал(а):
а не про какую-нибудь ChildForm с текстом внутри. И мне нужно чтобы консоль не была отдельной программой.

Не знаю, чем тебе ChildForm не угодила. Никогда с ней не было никаких проблем.
Может такой вариант устроит?
Add(MainForm,4786198,56,105)
{
Width=910
Height=385
Point(Handle)
Point(onClose)
Point(Width)
Point(Height)
link(onCreate,8278566:doEvent1,[])
link(onClose,5995727:doClose,[(95,132)(95,209)])
}
Add(FindWindow,1686983,252,126)
{
ClassName="ConsoleWindowClass"
SkipParam=1
}
Add(DeferredEvent,10692566,203,126)
{
Delay=10
link(onDeferredEvent,1686983:doFind,[])
}
Add(WinTools,5995727,252,182)
{
link(Handle,1686983:Handle,[])
}
Add(WinExec,7199627,140,126)
{
FileName="cmd "
Param="/K mode con:cols=60 lines=10&&color 03 &&title консоль&&type 1.txt "
link(onExec,10692566:doDeferredEvent,[])
}
Add(StrList,3294266,140,70)
{
FileName="1.txt"
Strings=#444:Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum|
Point(doSave)
}
Add(Hub,8278566,105,119)
{
link(onEvent1,3294266:doSave,[(130,125)(130,104)])
link(onEvent2,7199627:doExec,[])
}


Редактировалось 1 раз(а), последний 2023-09-29 16:57:08
карма: 15

0
Ответов: 99
Рейтинг: 4
#8: 2023-09-28 14:30:16 ЛС | профиль | цитата
Gunta писал(а):
Не знаю, чем тебе ChildForm не угодила. Никогда с ней не было никаких проблем.

Окно консоли выглядит лучше чем какой-то там ChildForm.
Извините если надоедаю, но мне не нужен посредник (conhost.exe <-> cmd.exe <-> Project1.exe). Если в Blender такое провернули, то можно провернуть и в HiAsm...верно?
карма: 0

0
Ответов: 167
Рейтинг: 7
#9: 2023-09-29 12:43:40 ЛС | профиль | цитата
TheRenat писал(а):
G
Если в Blender такое провернули, то можно провернуть и в HiAsm...верно?


Вне хиасима, например в компиляторе mingw32, это настраивается флагами линковщика. И там по дефолту все приложения компилятся как консольные и при их запуске вылезает окошко консоли, если они не запускаются через неё уже.

Другой вариант - написать дельфи код в IC, дёргающий WINAPI, который тебе сделает консольку https://learn.microsoft.com/en-us/windows/console/allocconsole

И если тебе удастся решить проблему с тем как отобразить это окошко, то будет ещё один сюрприз : в хиасиме нет способа выдать выхлоп на stdin/stdout без IC или стороннего компонента... Поэтому альтернативой IC будут либо мучения с conhost.exe, либо запиливание отдельной формы дочерней для вывода ошибок и логов.

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

З.Ы: спойлер, попытка впихнуть консольные компоненты из консольного приложения в EXE гуишное приложение дадут тебе олько это, так что даже не пытайся
карма: 0
c, c++, lua
0
Ответов: 769
Рейтинг: 167
#10: 2023-09-29 16:56:03 ЛС | профиль | цитата
TheRenat писал(а):
Если в Blender такое провернули, то можно провернуть и в HiAsm...верно?

Проверь. Если я тебя правильно понял, то это то, что тебе нужно.
Add(MainForm,13286583,315,168)
{
Width=476
Height=175
Caption="Использовать консоль в неконсольном приложении"
link(onCreate,16215071:doOpenConsole,[])
}
Add(InlineCode,16215071,385,182)
{
WorkPoints=#13:doOpenConsole|16:doWriteToConsole|13:doFreeConsole|
EventPoints=#7:onEvent|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|16:{ Event Points }|20:onEvent : THI_Event;|0:|15:{ Work Points }|54:Procedure doOpenConsole (var _Data:TData; Index:word);|57:Procedure doWriteToConsole (var _Data:TData; Index:word);|54:Procedure doFreeConsole (var _Data:TData; Index:word);|0:|5: end;|0:|14:implementation|15:{ Work Points }|67:Procedure THiAsmClass.doOpenConsole (var _Data:TData; Index:word);|5:Begin|16: AllocConsole;|76: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);|4:end;|70:Procedure THiAsmClass.doWriteToConsole (var _Data:TData; Index:word);|5:Begin|28: Writeln(ToString(_Data));|0:|4:end;|67:Procedure THiAsmClass.doFreeConsole (var _Data:TData; Index:word);|5:Begin|15: FreeConsole;|4:end;|0:|4:end.|
}
Add(Edit,12116807,266,203)
{
Left=20
Top=10
Width=405
Text="Type here your words and press ENTER"
link(onEnter,8145301:doCharset,[])
}
Add(Button,16245407,315,252)
{
Left=20
Top=80
Width=150
Caption="Закрыть консоль"
link(onClick,16215071:doFreeConsole,[(361,258)(361,202)])
}
Add(Charset,8145301,315,210)
{
Type=1
link(onCharset,16215071:doWriteToConsole,[(354,216)(354,195)])
}


Редактировалось 2 раз(а), последний 2023-09-29 17:34:49
карма: 15

0
Ответов: 769
Рейтинг: 167
#11: 2023-09-29 20:57:36 ЛС | профиль | цитата
Форум "сломался" во время написания сообщщения.

Пример - отправка и получение в/из консоли строковых данных.

Только поставите в свойствах консоли шрифт поддерживающий русский язык (например - Lucida Console)

Add(MainForm,2953706,203,77)
{
Width=476
Height=205
Caption="Использовать консоль в неконсольном приложении"
link(onCreate,10503466:doEvent1,[])
}
Add(InlineCode,16215071,350,98)
{
WorkPoints=#13:doOpenConsole|16:doWriteToConsole|17:doReadFromConsole|13:doFreeConsole|
EventPoints=#7:onEvent|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses Windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|16:{ Event Points }|20:onEvent : THI_Event;|0:|15:{ Work Points }|54:Procedure doOpenConsole (var _Data:TData; Index:word);|57:Procedure doWriteToConsole (var _Data:TData; Index:word);|58:Procedure doReadFromConsole (var _Data:TData; Index:word);|54:Procedure doFreeConsole (var _Data:TData; Index:word);|0:|5: end;|0:|14:implementation|15:{ Work Points }|67:Procedure THiAsmClass.doOpenConsole (var _Data:TData; Index:word);|5:Begin|16: AllocConsole;|22: SetConsoleCP(1251);|28: SetConsoleOutputCP(1251);|49: SetConsoleTitle( PChar( 'Консоль отладки' ) );|81: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);|4:end;|70:Procedure THiAsmClass.doWriteToConsole (var _Data:TData; Index:word);|5:Begin|28: Writeln(ToString(_Data));|4:end;|71:Procedure THiAsmClass.doReadFromConsole (var _Data:TData; Index:word);|4: var|13: s: string;|5:Begin|37: Write('Печатать текст здесь> ');|28: Readln(s); |27: _hi_OnEvent(onEvent,s);|4:end;|67:Procedure THiAsmClass.doFreeConsole (var _Data:TData; Index:word);|5:Begin|15: FreeConsole;|4:end;|0:|4:end.|
link(onEvent,3647522:doAdd,[])
}
Add(ArrayEnum,12358217,287,105)
{
link(onItem,16215071:doWriteToConsole,[])
link(onEndEnum,15767886:doWork2,[])
link(Array,690153:Array,[])
}
Add(StrList,690153,273,49)
{
Strings=#37: __ __ _ _____ _____ _____ |37: | | |_| _ | __| | |37: | | | |__ | | | | |37: |__|__|_|__|__|_____|_|_|_| |11: |0:|0:|90:Item | Description | Quantity | Unit | Price | Value | |89:-----------------------------------------------------------------------------------------|90:13930 | Double-action Quickstart II rem. L=740mm | 1 | PC | 98,66 | 98,66 | |90:13100201 | Spray gun for udder washer | 20 | PC | 17,77 | 355,4 | |90:13246007 | COMBI-cock ?51 mm cpl. | 10 | PC | 63,43 | 634,3 | |90:25643301 | Milk hose ? 24/14 x 2750 | 32 | PC | 9,76 | 312,32 | |90:14291 | Service no.1 RDS MAX double box | 1 | PC | 250,51 | 250,51 | |90:24144638 | Spiral spring for tube filter | 3 | PC | 43,2 | 129,6 | |90:22121763 | V-belt spz 1087 | 4 | PC | 5,91 | 23,64 | |90:MH0015 | Repair kit non-rotating cylinder ?40mm | 8 | PC | 14,3 | 114,4 | |0:|0:|
}
Add(Hub,10503466,252,91)
{
link(onEvent1,16215071:doOpenConsole,[(333,97)(333,104)])
link(onEvent2,12358217:doEnum,[(277,104)(277,111)])
}
Add(Memo,3647522,406,98)
{
Width=460
Height=166
Align=5
ScrollBars=3
}
Add(Button,12285898,287,147)
{
Left=265
Top=160
Align=4
Caption="Get text from console"
link(onClick,15767886:doWork3,[(333,153)])
}
Add(HubEx,15767886,329,112)
{
link(onEvent,16215071:doReadFromConsole,[])
}


Запуск консоли из программы.JPG

Редактировалось 4 раз(а), последний 2023-10-02 08:34:59
карма: 15

2
Голосовали:TheRenat, envoy_sky
Ответов: 99
Рейтинг: 4
#12: 2023-10-13 14:48:52 ЛС | профиль | цитата
Это именно то, что мне было нужно! Спасибо!
Было бы удобнее пользоваться компонентом конечно, так-что попробую превратить твой IC-шник в компонент.
карма: 0

0
Ответов: 99
Рейтинг: 4
#13: 2023-10-14 17:14:58 ЛС | профиль | цитата
Не буду вторым andrestudio, так что я всё же решил компонент выложить. Наслаждайтесь!

--- Добавлено в 2023-10-14 17:33:24

Небольшую ошибку допустил... Замените на строке 44 это:

Write(PChar(ReadString(_Data,_data_Str)));
На это:

Writeln(PChar(ReadString(_Data,_data_Str)));

Редактировалось 2 раз(а), последний 2023-10-14 17:33:24
карма: 0

0
файлы: 1ExtConsole.zip [1.3KB] [195]
Ответов: 300
Рейтинг: 26
#14: 2023-10-15 11:18:01 ЛС | профиль | цитата
TheRenat писал(а):
Небольшую ошибку допустил...

Нужно исправить, сделать пример для компонента, всё это в архив упаковать и оформить первый ваш паст как найденное решение, благодарность кто помог написать.
Тогда поиск на сайте станет легче а мир добрей.
Прошу отнестись с пониманием и не воспринимать как критику.
карма: 2
0
Ответов: 99
Рейтинг: 4
#15: 2023-10-17 08:46:28 ЛС | профиль | цитата
Теперь в этой теме: https://forum.hiasm.com/topic/68256
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)