Главная страница
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
4-13525
sucer
2003-04-02 17:58
2003.06.05
Какой нужен код в процедуре обработке HOOK для отлова MAXIMIZE


3-13023
Брат
2003-05-16 12:41
2003.06.05
Округление в запросе значений DOUBLE до 2х знаков


1-13318
HardClubber
2003-05-25 10:43
2003.06.05
Параметры к приложению


9-12984
konstantionov
2002-12-27 23:25
2003.06.05
Статистика игроков


14-13470
GigoVich
2003-05-03 20:39
2003.06.05
Карточная Игра - Реально то что возможно...