Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
14-13435
Jiming
2003-05-19 16:10
2003.06.05
Експерт а VSS для


1-13160
KIE
2003-05-14 15:41
2003.06.05
Delphi и и Excel


8-13332
Adil
2003-02-23 10:23
2003.06.05
Autorun programmi


8-13325
greenrul
2003-02-19 12:15
2003.06.05
Как сохранить Canvas в bmp файл?


3-13052
Fuelfire
2003-05-16 09:10
2003.06.05
Как сделать, чтобы данные с формы редактирования сохранялись?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский