Форум: "Система";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];
ВнизПрограмное нажатие клавиш в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.018 c