Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

Аналог KeyPressed() в Console Application...   Найти похожие ветки 

 
Jolik   (2004-08-04 15:23) [0]

Здравствуйте!
Вот раньше было время цикл программы состоял из:

if not KeyPressed then begin
...
end;

Как бы такой сделать в консольном приложении под Дельфями?
Спасибо!


 
Юрий Зотов ©   (2004-08-04 16:02) [1]

Посмотрите описание ReadConsoleInput. Там в конце есть такое примечание:

Remarks

If the number of records requested in the nLength parameter exceeds the number of records available in the buffer, the number available is read. The function does not return until at least one input record has been read.

A process can specify a console input buffer handle in one of the wait functions to determine when there is unread console input. When the input buffer is not empty, the state of a console input buffer handle is signaled.

==================================================

Вот и целых два ответа на Ваш вопрос. Выбирайте более подходящий.


 
Jolik   (2004-08-05 13:29) [2]

Спасибо!


 
Jolik   (2004-08-05 14:56) [3]

а где взять HANDLE hConsoleInput для передачи в функцию?


 
Игорь Шевченко ©   (2004-08-05 16:54) [4]


> а где взять HANDLE hConsoleInput для передачи в функцию?


GetStdHandle (STD_INPUT_HANDLE) ?


 
Jolik   (2004-08-05 17:27) [5]

Спасибо, попробую!


 
Jolik   (2004-08-05 20:46) [6]

Если кому интересно - ниже консольный аналог Win32 для DOS програм типа

while not KeyPressed then begin
...
end;

ЗЫ: Исходный текст на С содрал в инете - каюсь :((( Ссылку потерял - если вдруг хозяин объявится :)))



uses Windows
 // переменные поддержки чтения с клавиатуры в консольном приложении
 ir                    : INPUT_RECORD;
 hCon                  : THandle;
 NumOfEvents           : Cardinal;
 NumOfEventsRead       : Cardinal;
 i                     : integer;
 done                  : boolean;

begin
 try
   writeln("Press Esc to Exit.");

   done := FALSE;

(********* основной цикл работы (до нажатия ESC) **************)

   while (not done) do begin

     // читаем Windows сообщения нашему приложению
     if not GetNumberOfConsoleInputEvents(hCon, NumOfEvents) then
       raise EInOutError.CreateFmt(
        "GetNumberOfConsoleInputEvents failed %s", [SysErrorMessage(GetLastError)]);

     // перебираем в поисках наджатия ESC
     for i := 0 to NumOfEvents-1 do begin
       if (not ReadConsoleInput(hCon, ir, 1, NumOfEventsRead)) then
         raise EInOutError.CreateFmt(
          "ReadConsoleInput failed %s", [SysErrorMessage(GetLastError)]);

       if (NumOfEventsRead = 1) then
         done := (ir.EventType = KEY_EVENT) and
                 ir.Event.KeyEvent.bKeyDown and
                 (ir.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE);
     end;
   end;

 except
   on E : Exception do begin
     writeln(Format("Exception: %s", [E.Message]));
   end;
 end;




Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
14-1094118093
Sergey_Masloff
2004-09-02 13:41
2004.09.19
арбузы


14-1093971859
Колян
2004-08-31 21:04
2004.09.19
А в Москве снова гремят взрывы...


14-1093691577
ИМХО
2004-08-28 15:12
2004.09.19
Слово о Роберте Де Ниро


1-1094116820
Till
2004-09-02 13:20
2004.09.19
ABC компоненты


3-1092993457
Lizka
2004-08-20 13:17
2004.09.19
как вытащить значение запроса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский