статус клавиш num, caps и scroll lock

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

22 апр 2008, 09:41

Alex_Burn писал(а):Хм...
а ваш код тоже под винду не пашет?
А то созданная программа никак не влияет на индикаторы клавы. :(
Попробовал под Win2000 - не "зажигает". Под Win98 - нормально отрабатывает.

Может, под виндами в таком случае через WinAPI, через SetKeyboardState? (Не знаю, насколько необходимо сделать это все через ассемблер).
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

22 апр 2008, 09:47

В MSDN-е в описании ф-ии keybd_event наткнулся на пример, который как раз переключает NUM LOCK.

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

[b]Example Code[/b]
The following sample program toggles the NUM LOCK light by using keybd_event() 
with a virtual key of VK_NUMLOCK. It takes a Boolean value that indicates whether the 
light should be turned off (FALSE) or on (TRUE). The same technique can be used for 
the CAPS LOCK key (VK_CAPITAL) and the SCROLL LOCK key (VK_SCROLL). 

  #include <windows.h>

   void SetNumLock( BOOL bState )
   {
      BYTE keyState[256];

      GetKeyboardState((LPBYTE)&keyState);
      if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
          (!bState && (keyState[VK_NUMLOCK] & 1)) )
      {
      // Simulate a key press
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | 0,
                      0 );

      // Simulate a key release
         keybd_event( VK_NUMLOCK,
                      0x45,
                      KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                      0);
      }
   }

   void main()
   {
      SetNumLock( TRUE );
   }
А, вот еще примечание для keybd_event:
Windows NT/2000/XP: This function has been superseded. Use SendInput instead.
Аватара пользователя
Alex_Burn
Сообщения: 145
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

22 апр 2008, 13:39

&quot писал(а): Не знаю, насколько необходимо сделать это все через ассемблер
Ну желательно конечн в АСМе
&quot писал(а):Под Win98 - нормально отрабатывает.
Где же я 98-ю Винду-то возьму?.. :(

Пардон за тупой вопрос, но как проги из под DOS запускать? (Просто я этого никогда не делал)
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

22 апр 2008, 14:17

Alex_Burn писал(а):Пардон за тупой вопрос, но как проги из под DOS запускать? (Просто я этого никогда не делал)
Вопрос не совсем ясен. Уточните.
Аватара пользователя
Alex_Burn
Сообщения: 145
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

22 апр 2008, 14:43

Ну, г-н airyashov писал что прога пашет под чистый DOS.

Вот я и подумал, возможно ли не запускать винду, а заходить через DOS (в смысле, через загрузочную дискету, если, конечно данное действие возможно)

Я пытался решить данную проблему следующим путем:

Скачал эмулятор DOS. Но он почему-то не работает. Можно работать только на виртуальной дискете, а на HDD заходить не хочет, говорит что-то типа 'Invalid Drive C:'. Правда я пытался эмулировать DOS на ноуте, где у меня гибкого дисковода нет, может в этм проблема. Хотя, виртуалбно он есть.

В общем, мне хочется увидеть работоспособность проги, но пока не выходит... :-(
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

22 апр 2008, 16:55

DOS Box 0.72 в помощь...
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Alex_Burn
Сообщения: 145
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

22 апр 2008, 17:22

&quot писал(а): DOS Box 0.72 в помощь...
Пробовал, прога из поста 4 данной темы на индикаторы не влияет
Аватара пользователя
Alex_Burn
Сообщения: 145
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

22 апр 2008, 19:57

Пробовал запускать через DOSBox и код любезно предоставленный airyashov, и код уважаемого BBB, но, к сожалению, никакого эффекта программы на индикаторы клавы. :(
Может быть, у кого-нибудь будут еще мысли по данному вопросу? :confused:
Я пока пошел вешаться... :(
airyashov
Сообщения: 416
Зарегистрирован: 02 ноя 2007, 10:31

23 апр 2008, 08:56

чистый DOS - это загрузочная дискете, либо какой-нить реанимационный диск, либо NERO создайте загрузочный CD с DOS. Загружаете компутер с такого носителя и проверяйте программы.
Аватара пользователя
Alex_Burn
Сообщения: 145
Зарегистрирован: 13 апр 2007, 17:49
Контактная информация:

23 апр 2008, 09:03

&quot писал(а): чистый DOS - это загрузочная дискете, либо какой-нить реанимационный диск, либо NERO создайте загрузочный CD с DOS. Загружаете компутер с такого носителя и проверяйте программы.
Нельзя ли по подробней как это осуществить.
Ну, загрузочную дискету я уже создал.
Можно ли описать мне мои дальнейшие действия?
Ответить