Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Консольное приложение на Delphi 7

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

victorpr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как в консольном приложении на Delphi добиться широко используемого эффекта:
Выполнение приложения останавливается до тех пор, пока не нажата Any Key  
(Any Key - это не только Enter). При этом никакого эхо-вывода на консоль не должно происходить. На СИ я бы написал что-то вроде
 
GetConsoleMode(hStdin, &fdwOldMode)  
fdwMode = fdwOldMode &  ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT);  
SetConsoleMode(hStdin, fdwMode);
ReadFile(hStdin, chBuffer, 1, &cRead, NULL);
SetConsoleMode(hStdin, fdwOldMode);
 
На Delphi попытки изменить режим консоли с помощью виндового API ни к чему хорошему у меня не приводят.
Паскалевских функций типа KeyPressed, ReadKey в Delphi естественно нет.
 
Может кто-то сталкивался с такой проблемой? Хелп плз!

Всего записей: 147 | Зарегистр. 13-02-2003 | Отправлено: 17:48 22-05-2003
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
victorpr напиши свою типа readkey )

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 02:31 23-05-2003
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
victorpr
Попробуй повесить стандартный Hook на аппликацию. Но сдаётся мне, что это не поможет, приложение консольного агента не отчитывается перед виндузой. В любом случае Delphi работает с консолью, как с файлом, что является характеристикой Паскаля, но DOS ей не нужен. INT 16H (keypressed) - это в дельфи не пройдёт. Если нужны INT, то попробуй Bloodshed Dev-Pascal, или у них на сайте библиотеки для Delphi.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 11:56 23-05-2003
victorpr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
woffer

Цитата:
напиши свою типа readkey

Совет, конечно, - хороший. Однако, мой вопрос: как это сделать, когда управление в консольную прогу попадает только после нажатия на Enter?
Pinocchio

Цитата:
у них на сайте библиотеки для Delphi

по-моему, это единственно умное, что я могу сделать в такой ситуации... грустно...

Всего записей: 147 | Зарегистр. 13-02-2003 | Отправлено: 14:18 23-05-2003
Dod



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi 7. Для вывода вывода графики в режиме консольного приложения написал такой модуль:
  procedure GraphInit(ScreenColor: TColor);
  { Вход в графический режим }
  begin
    ScreenDC := GetDC(0);
    Canvas := TCanvas.Create();
    Canvas.Handle := ScreenDC;
    Canvas.Brush.Color := ScreenColor;  // цвет фона
    // сохраним экран в файл 'fon.bmp'
    BitMap := TBitMap.Create();
    BitMap.Height := Screen.Height;
    BitMap.Width := Screen.Width;
    RectScr := Rect(0, 0, Screen.Width, Screen.Height);
    BitMap.Canvas.CopyRect(RectScr, Canvas, RectScr);
    BitMap.SaveToFile('fon.bmp');
    Rectangle(ScreenDC, 0, 0, Screen.Width, Screen.Height); // чистка экрана
    RectCur := Rect(0, 0, 0, 0);        // фиксация курсора
    ClipCursor(@RectCur);
    Canvas.Font.Color := $000000FF;     // текст
    Canvas.Font.Size := 16;
    Canvas.TextOut(Screen.Width-120, Screen.Height-35, 'Выход - Esc');
  end;
Беда в том, что при движении курсора мыши наверх всплывают кнопки лежащих ниже окон. Поэтому приходится фиксировать курсор, а это неудобно, если приходится что-то показывать собеседнику на экране (не пальцем же тыкать). Подскажите, пожалуйста, как решить эту проблему.

Всего записей: 51 | Зарегистр. 25-09-2002 | Отправлено: 11:18 21-09-2011
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
victorpr
_http://www.silicontaiga.ru/home.asp?artId=5757
 
Здесь всё про консольные приложения в Delphi. В том числе и ваш вопрос.

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 12:04 21-09-2011
Dod



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
silicontaiga - это шедевр!  
Спасибо за подсказку.

Всего записей: 51 | Зарегистр. 25-09-2002 | Отправлено: 18:12 17-10-2014
drimplex



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если вы делаете стандартный проект Console Application:
READLN; //и прога будет висеть в ожидании нажатия любого ввода с клавиатуры
 
+Можно сделать стандартное консольное приложение, перехватить нужные хендлы через API и делать с ним что нужно.

Всего записей: 28 | Зарегистр. 25-08-2007 | Отправлено: 11:06 31-12-2014
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
READLN; //и прога будет висеть в ожидании нажатия любого ввода с клавиатуры  


Цитата:
victorpr: Any Key - это не только Enter). При этом никакого эхо-вывода на консоль не должно происходить.

С новым годом!

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 19:39 31-12-2014 | Исправлено: landy, 19:41 31-12-2014
drimplex



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy: благодарю. пропустил условие.
 
victorpr: Any Key - это не только Enter).  
можно сделать апи-хук на клавиатуру.

Всего записей: 28 | Зарегистр. 25-08-2007 | Отправлено: 14:26 01-01-2015
rrromano



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Спасибо за подсказку.

На здоровье. С Новым годом всех! ).

Всего записей: 283 | Зарегистр. 20-09-2006 | Отправлено: 16:38 01-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
drimplex

Цитата:
можно сделать апи-хук на клавиатуру.

1) Поскольку я писал свой собственный сниффер, для слежения за женой, заметил, что кнопки нажимаемые в консоли - например FAR Manager, не снифярятся. То есть дело скорее всего не в привилегиях, а просто апи-хук консоли невозможен. По моему для Delphi я видел проект - DOS-BOX, там много всего для консоли.
 
2) Зачем старьё вытаскиваете? Ответ буратины был 23-05-2003. Моё мнение - KeyPressed - это бантики, в консольной программе можно обойтись и readln с надписью перед ним - нажмите Enter. Enter можно отправить в консоль не пользуясь клавиатурой, а вот пока KeyPressed не произойдёт - прога будет висеть. Не стоит морочить себе голову всякими бантиками при написании CONSOLE.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 07:51 05-01-2015
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
заметил, что кнопки нажимаемые в консоли - например FAR Manager, не снифярятся

1. Сниферы обычно работают на более низком уровне (заодно и маскируясь получше)
2. Представь себе FAR (консольная ведь программа), управляемый только readln.
 
 

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:40 05-01-2015
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
landy

Цитата:
1. Сниферы обычно работают на более низком уровне

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

Цитата:
2. Представь себе FAR (консольная ведь программа), управляемый только readln.

На счёт консоли - это верно, но на счёт FAR тут не правда, он веть знает какой у него размер консоли - пихает туда (в память текстового знакогенератора) символы которые надо рисовать чтобы были панельки с файлами (это я знаю точно, так как он FAR ещё не забыл, как переключаться из графического режима Windows в простой текстовый режим BIOS если он у вас текстовый). Да и клавишу F1 он обрабатывает сам. так что не readln в FAR, но readln для FAR cmd Console.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 13:47 05-01-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Консольное приложение на Delphi 7


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru