C key combinations
3 отговора
162 прегледа
C key combinations
Kak da nakaram C (DOS) programata mi da reagira na opredeleni ot men klavishni kombinacii kato naprimer CTRL+S ALT+Q SHIFT+Z i tn.
Thanks predvaritelno.
Thanks predvaritelno.
Re: C key combinations
s pot na cheloto :)
potursi w google - Ralph Brown interruptite,
ima nachin da proverjawash direktno za natisnat klavish (mislja che beshe port[$60] ili $80 - weche sum zabravil) - kato tova go pravish na wsjako 18-to prekuswane - ili neshto ot tozi rod.
na port[$60] ti idwat direktno klavisihite
tirulirutatuutuu
potursi w google - Ralph Brown interruptite,
ima nachin da proverjawash direktno za natisnat klavish (mislja che beshe port[$60] ili $80 - weche sum zabravil) - kato tova go pravish na wsjako 18-to prekuswane - ili neshto ot tozi rod.
na port[$60] ti idwat direktno klavisihite
tirulirutatuutuu
Re: C key combinations
така е наистина, прехващаш прекъсването и проверяваш какво ти е сервирало на порт 60. имай впредвид че на порта клавишите излизат в позиционен код - така например ескейп е 1 а не 27. няма нищо общо с аски. при натискане получаваш кода, при отпускане получаваш кода +128, т.е. най-старшия бит ти показва дали клавиша е натиснат или отпуснат. правиш си масив от 128 елемента и ги сетваш/ресетваш с индекс кода и стойност най-старшия бит.
номера с порта върви и под windows до 98. става за авариен изход от time critical section дето прекъсването се забранява и съобщенията спират да бачкат. ех, мамка им на новите виндовси...
номера с порта върви и под windows до 98. става за авариен изход от time critical section дето прекъсването се забранява и съобщенията спират да бачкат. ех, мамка им на новите виндовси...
Re: C key combinations
Ако не си намерил начин за твоя проблем ти предлагам друг, слабо ефектвен, но работещ начин.Аз използвам един друг метод (по-прост). Дкларирам две променливи от тип char. Само, че трябва да програмираш за ДОС и компилатора да ти поддържа функциите getch() и getche()!
char a,b;
a = getch();
if(a == '\0')
b = getch();
Когато се натисне напр. CTRL + S (за сейф например), ДОС връща 0, и ако е така на b се присвоява стойност (връщана от ДОС), т.е. първия път ДОС не връща нищо, но втория - връща АСКИ символ.
АСКИ символите може да ги видиш в HELP-a на FREE PASCAL за Keyboard под формата на таблица и пише "KEY SCAN CODES"; мога да ти протя и по и-мейла
ако те интересува.
Who Wants To Live Forever?
char a,b;
a = getch();
if(a == '\0')
b = getch();
Когато се натисне напр. CTRL + S (за сейф например), ДОС връща 0, и ако е така на b се присвоява стойност (връщана от ДОС), т.е. първия път ДОС не връща нищо, но втория - връща АСКИ символ.
АСКИ символите може да ги видиш в HELP-a на FREE PASCAL за Keyboard под формата на таблица и пише "KEY SCAN CODES"; мога да ти протя и по и-мейла
ако те интересува.
Who Wants To Live Forever?