Автор Тема: Вопрос для прогеров на С  (Прочитано 3702 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн XAVER

  • Пользователь
  • Сообщений: 86
    • Просмотр профиля
Вопрос для прогеров на С
« : 05 Октябрь 2006, 18:42:15 »
Преподал задал что бы в менюшке кнорка выхода была shift как это реализовать понятия не имею а завтра лаба (((.
Если вопрос переформулировать то какой код у клавишы shift?

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Вопрос для прогеров на С
« Ответ #1 : 05 Октябрь 2006, 19:40:44 »
Цитата: XAVER
какой код у клавишы shift

Расширенный если не ошибаюсь. Если под дос кодишь то:

Цитата

INT 16h, AH = 02h, 12h, 22h — Считать состояние клавиатуры

Ввод: АН = 02h (83/84-key), 12h (101/102-key), 22h (122-key)
Вывод: AL = байт состояния клавиатуры 1
АН = байт состояния клавиатуры 2 (только для функций 12h и 22h)


Байт состояния клавиатуры (этот байт всегда расположен в памяти по адресу 0000h:0417h):

Бит 7: Ins включена
Бит 6: CapsLock включена
Бит 5: NumLock включена
Бит 4: ScrollLock включена
Бит 3: Alt нажата (любая Alt для функции 02h, часто только левая Alt для 12h/22h)
Бит 2: Ctrl нажата (любая Ctrl)
Бит 1: Левая Shift нажата
Бит 0: Правая Shift нажата


как пользоваться _asm{} знаешь ?

Оффлайн XAVER

  • Пользователь
  • Сообщений: 86
    • Просмотр профиля
Вопрос для прогеров на С
« Ответ #2 : 05 Октябрь 2006, 21:14:05 »
Ни чо не понял (((

Оффлайн Йобан Матич

  • Emu-Land Team
  • Сообщений: 2593
  • Пол: Мужской
    • Просмотр профиля
Вопрос для прогеров на С
« Ответ #3 : 05 Октябрь 2006, 21:43:22 »

#include

main(){

  for(;;){

    l1:_asm{
       mov ah, 0x12   //klava 102 knopki
       int 0x16       //poluchit rezultat
       test al, 2     //test 2go bita (leviy shift)
       jnz l2         //esli nazhata to.. vashi deystviya na l2
       jmp l1         //ne nazhata?? nu togda na l1
    }

    l2:{
printf(" \t\t Shift nazhat!!!\n");
return 0;
    }

  }
}



проверял на Borland C++ (HE BUILDER) 3.0.
работает только в Досе, ибо int 0x16.
Для винды не знаю как =(
« Последнее редактирование: 05 Октябрь 2006, 21:46:17 от Йобан Матич »