![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Програмное нажатие клавиш в DOS-приложении из Delphi [D5, Win95/98]
Apollo © (2003-03-21 11:49:00)Подскажите пожалуйста, как можно эмулировать нажатия клавиш в Dos-приложениях? Скачал компонент sendkeys, для Win-приложений работает отлично, но для DOS не эмулируются нажатия клавиш курсора (может быть даже и PgUp и PgDown тоже). :о(
Apollo (2003-04-03 14:15:00) [1]Большое спасибо. В принципе я понял про скан-коды. Но я не знал как передавать скан-коды функциональных клавиш. (Тот самый
KEYEVENTF_EXTENDEDKEY). Спасибо.
Almaz (2003-04-02 02:02:00) [2]
> 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;
Удачи.
Song (2003-04-01 11:33:00) [3]Никак.
Apollo (2003-04-01 11:17:00) [4]Вероятно никто не знает :о( А жаль.