Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 91
от 23.03.2005, 07:30

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 8


Вопрос № 18431: Никто не подскажет как отлавливать нажатие Ctrl, желательно без одновременного нажатия с другими клавишами...
Вопрос № 18434: Уважаемые эксперты! Как в файле ресурсов rc установить среди нескольких иконок иконку для exe файла? ...

Вопрос № 18431
Никто не подскажет как отлавливать нажатие Ctrl, желательно без одновременного нажатия с другими клавишами
Отправлен: 18.03.2005, 00:21
Вопрос задал: Master135 (статус: 1-ый класс)
Всего ответов отправлено: 6

Отвечает: Стас
Здравствуйте, Master135!
Я так понимаю речь идет о DOS?
Тогда свой вешаешь обработчик на Int9 и ждешь нажатия Ctrl.
Когда нажали ставишь флаг.
При следующем входе в "свой обработчик" проверяешь и если это Ctrl отпустили, то - это твоя ситуация, а если нет сбрасываем флаг (вероятно нажимают CTRL+...).
Вообщем, уже много раз обсуждалось, посмотри архив рассылки.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 18.03.2005, 00:55
Оценка за ответ: 4

Отвечает: DSota
Здравствуйте, Master135!
1. Если нужен ДОС - переопределяешь int9 и там сомтришь нажатие-отпускание кнопок Ctrl (см. в вопросах)
2. В Виндовс используеться SetWindowsHookEx(WH_KEYBOARD,(int(__stdcall*)())KeyboardProc,(HINSTANCE)NULL,GetCurrentThreadId());
Ответ отправил: DSota (статус: Студент)
Отправлен: 18.03.2005, 09:41
Оценка за ответ: 4

Отвечает: Котиев Зураб
Здравствуйте, Master135!
отлавливай прерывание 09h
Ответ отправил: Котиев Зураб (статус: 2-ой класс)
Отправлен: 18.03.2005, 11:58

Отвечает: Dark_Lord
Здравствуйте, Master135!
Самый простой (с точки зрения универсальности, а не простоты исполнения, это использовать DirectInput, который видет клавиатуру не как множество букв стрелок и т.д., а как массив клавиш, которые имеют два состояния, "нажато" или нет.
Второй способ, поставить хук на нажатие клавиши...
Третий, это перехватвывать сообщение WM_KEYDOWN/WM_KEYUP твоего окна, wParam в этом случае содержит код виртуальной клавиши, в нашем случае перехватывать нужно VK_CONTROL.
Ответ отправил: Dark_Lord (статус: Профессионал)
Отправлен: 18.03.2005, 15:36
Оценка за ответ: 5

Отвечает: Bob Johnson
Здравствуйте, Master135!
Когда нажимается любая клавиша (в том числе и ctrl), твое окно получает сообщение WM_KEYDOWN. Проверить же состояние клавиши в любом месте кода можно с пом. GetKeyState, например.

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 19.03.2005, 01:03

Отвечает: Евгений Иванов
Здравствуйте, Master135!
прерывание номер 9.
;------------------------
; Обработчик 9 прерывания
proc Int9Entry
push eax ds DataWork
sub eax,eax
pop ds
in al,96
mov [LastKey+dat],al
jmp wptr [cs:eax*2+tKeysJump]
ExitInt9:
in al,97
mov ah,al
or al,128
out 97,al
mov al,ah
jmp $+2
out 97,al
mov al,32
pop ds
out 32,al
pop eax
iret
endp
;Клавиатура
tKeysJump label word
dw kNULL
dw kEsc
dw k1
dw k2
dw k3
dw k4
dw k5
dw k6
dw k7
dw k8
dw k9
dw k0
dw kTire
dw kPlus
dw kBackSpace
dw kTab
dw kQ ;10h
dw kW
dw kE
...
kNULL:
jmp ExitInt9
kEsc:
jmp ExitInt9
k1:
and bptr [Array8KeyLine+dat+3],not 1
jmp ExitInt9
k2:
and bptr [Array8KeyLine+dat+3],not 2
jmp ExitInt9
k3:
and bptr [Array8KeyLine+dat+3],not 4
jmp ExitInt9
k4:
and bptr [Array8KeyLine+dat+3],not 8
jmp ExitInt9
k5:
and bptr [Array8KeyLine+dat+3],not 16
jmp ExitInt9

k6:
and bptr [Array8KeyLine+dat+4],not 16
jmp ExitInt9
k7:
and bptr [Array8KeyLine+dat+4],not 8
jmp ExitInt9
k8:
and bptr [Array8KeyLine+dat+4],not 4
jmp ExitInt9
k9:
and bptr [Array8KeyLine+dat+4],not 2
jmp ExitInt9
k0:
and bptr [Array8KeyLine+dat+4],not 1
jmp ExitInt9
kTire:
and bptr [Array8KeyLine+dat+7],not 2 ;Symbol shift
and bptr [Array8KeyLine+dat+6],not 8
jmp ExitInt9
kPlus:
and bptr [Array8KeyLine+dat+7],not 2 ;Symbol shift
and bptr [Array8KeyLine+dat+6],not 2
jmp ExitInt9
kBackSpace:
and bptr [Array8KeyLine+dat],not 1 ;Caps shift
and bptr [Array8KeyLine+dat+4],not 1
jmp ExitInt9
......
k_Ins0:
jmp ExitInt9
k_DelPoint:
jmp ExitInt9
Array8KeyLine db 8 dup(?) ;"8 линий адресов от клавиатуры"
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 19.03.2005, 04:19
Оценка за ответ: 5


Вопрос № 18434
Уважаемые эксперты! Как в файле ресурсов rc установить среди
нескольких иконок иконку для exe файла?

Приложение:

Отправлен: 18.03.2005, 02:26
Вопрос задал: Александр А.А. (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Gibbel
Здравствуйте, Александр А.А.!
При отображении .exe файла эксплорером (и некоторыми другими программами) ему будет присвоена первая встретившаяся иконка в блоке ресурсов. Соответственно, просто ставишь первой иконкой нужную тебе.
P.S.: многие компиляторы .rc файлов упорядочивают ресурсы по возростанию их имен/идентификаторов.
Ответ отправил: Gibbel (статус: *Админ)
Отправлен: 18.03.2005, 10:39
Оценка за ответ: 5

Отвечает: Котиев Зураб
Здравствуйте, Александр А.А.!
200 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "ICON1.ICO"
поставь ее первой
Ответ отправил: Котиев Зураб (статус: 2-ой класс)
Отправлен: 18.03.2005, 12:09
Оценка за ответ: 4
Комментарий оценки:
MOVEABLE PURE LOADONCALL DISCARDABLE - что это?


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное