Получить состояние модификаторов клавиатуры (в консоли и вирт. терминалах)

Модератор: Модераторы разделов

Ответить
Hatred
Сообщения: 37
Контактная информация:

Получить состояние модификаторов клавиатуры

Сообщение Hatred »

Тут потребовалось сделать сабж, путем хитростей при помощи read и select получилось сделать неблокирующеся чтение ввода с клавиатуры без эха. Сразу возник вопрос, как получить состояние клавиш можификаторов, типа нажата ли Ctrl/Alt/Shift, включены ли всякие * Lock и т.д.

особо благодарен буду за куски кода

вот, кстати, так получаю состояние модификаторов для linux консоли:

Код: Выделить всё

#include <sys/ioctl.h>
#include <stdio.h>
#include <fcntl.h>

int fd;

int linux_bioskey(void)
{
 char c;
 int status;

 c = 6;
 status = 0;
 int ret = ioctl(fd, TIOCLINUX, &c);
 //printf("%d\n", ret);
 if ( ret == 0)
 {
  if (c & 0x01)
  {
   /* Right or left shift is pressed */
   status |= 0x03;
  }
  if (c & 0x04)
  {
   /* Control key is pressed */
   status |= 0x04;
  }
  if (c & 0x0A)
  {
   /* Alt key is pressed */
   status |= 0x08;
  }
 }
 return(status);
}

int main()
{
    int n;

    char *name = ttyname(0);
    fd = open(name, O_RDONLY);

    while(1)
    {
    n = linux_bioskey();
    if(n!=0)printf("%d\n",n);
    }

}

но данный способ не подходит для виртуальных терминалов (/dev/pts/)
Спасибо сказали:
Ответить