Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

Програмное нажатие клавиш в DOS-приложении из Delphi   Найти похожие ветки 

 
Apollo ©   (2003-03-21 11:49) [0]

Подскажите пожалуйста, как можно эмулировать нажатия клавиш в Dos-приложениях? Скачал компонент sendkeys, для Win-приложений работает отлично, но для DOS не эмулируются нажатия клавиш курсора (может быть даже и PgUp и PgDown тоже). :о(


 
Apollo ©   (2003-04-01 11:17) [1]

Вероятно никто не знает :о( А жаль.


 
Song ©   (2003-04-01 11:33) [2]

Никак.


 
Almaz ©   (2003-04-02 02:02) [3]


> Song © (01.04.03 11:33)
> Никак.

И ЭТО говорит МАСТЕР ??? Уважаемый Song, если вы чего-то не знаете, это не ставит проблему в раздел неразрешимых. Если не знаете - не стесняйтесь - промолчите, а то спрашиваюший человек поверит вашему авторитету и не решит проблему.


> Apollo © (21.03.03 11:49)
> Подскажите пожалуйста, как можно эмулировать нажатия клавиш
> в Dos-приложениях? Скачал компонент sendkeys, для Win-приложений
> работает отлично, но для DOS не эмулируются нажатия клавиш
> курсора (может быть даже и PgUp и PgDown тоже). :о(

Все дело в том, что SendKey предназначен для работы с Win32 приложениями, и как следствие, посылает виртуальные коды клавиш. Однако, для DOS приложений эти, специфичные для Windows, коды не более чем пустой звук. DOS приложения хотят получать scan-коды клавиш (их прекрасно помнят те, кто начинал программировать в DOS"е :) Для посылки scan-кодов используется все та же функция keybd_event, только параметры необходимо передавать другие.
Рассмотрим пример посылки клавиши "Стрелка вниз" в DOS приложение:

var
HWnd: THandle;
begin
// Для начала получим ссылку на окно DOS приложения
HWnd := FindWindow(nil, "Мое DOS приложение");
// Теперь сделаем это окно активным
SetForegroundWindow(HWnd);
// Теперь, собственно посылаем нажатие
keybd_event(0,$50,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(0,$50,KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY,0);
end;


Первый параметр функции = 0, т.к. виртуальные коды мы не передаем.
Второй параметр равен $50 - это scan-код клавиши "Стрелка вниз"
Константа KEYEVENTF_EXTENDEDKEY говорит функции о том, что передаваемый scan-код является кодом функциональной клавиши.
Ну и в качестве заключения, таблица некоторых scan-кодов:

const
SC_INS = $52;
SC_HOME = $47;
SC_PAGEUP = $49;
SC_PAGEDOWN = $51;
SC_UP = $48;
SC_DOWN = $50;
SC_LEFT = $4B;
SC_RIGHT = $4D;


Удачи.


 
Apollo ©   (2003-04-03 14:15) [4]

Большое спасибо. В принципе я понял про скан-коды. Но я не знал как передавать скан-коды функциональных клавиш. (Тот самый KEYEVENTF_EXTENDEDKEY). Спасибо.



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

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-13479
Pat
2003-05-20 19:42
2003.06.05
---|Ветка была без названия|---


3-13048
Lamer
2003-05-16 12:41
2003.06.05
Access violation при sql-запросе


6-13364
Garmahis
2003-04-04 22:02
2003.06.05
Почта по HTTP


1-13312
Кен
2003-05-23 03:25
2003.06.05
А нет ли такой функции, чтобы преобрзовывать class в string ?


3-12998
Аноним
2003-05-19 01:00
2003.06.05
Кэширование изменений