мигать Диодами на клаве.
От: Аноним  
Дата: 30.08.05 14:01
Оценка:
Доброе время суток.
Стоит задача в winxp осуществить управления свето диодами на клавиатуре, мигать т.е.
Заранее благодарен.
Re: мигать Диодами на клаве.
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 30.08.05 14:30
Оценка: -4 :)
А>Доброе время суток.
А>Стоит задача в winxp осуществить управления свето диодами на клавиатуре, мигать т.е.
А>Заранее благодарен.

А зачем тебе? А то тут народ боевой
Автор:
Дата: 30.08.05
— не найдут "ни одной разумной причины" мигать светодиодами на клаве — тему в /dev/null, а тебя — в бан , так что, поаккуратней с темами топиков!
Re: мигать Диодами на клаве.
От: gear nuke  
Дата: 30.08.05 15:52
Оценка: 12 (2)
Здравствуйте, <Аноним>, Вы писали:

А>Доброе время суток.

А>Стоит задача в winxp осуществить управления свето диодами на клавиатуре, мигать т.е.
А>Заранее благодарен.

Выдрано из UnrealSpeccy.
Кое что нужно будет убрать, но идея, надеюсь, ясна .
#define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)

typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
    USHORT UnitId;              // Unit identifier.
    USHORT LedFlags;            // LED indicator state.
} KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;

#define KEYBOARD_CAPS_LOCK_ON     4
#define KEYBOARD_NUM_LOCK_ON      2
#define KEYBOARD_SCROLL_LOCK_ON   1

void ay_kbd()
{
   static unsigned char pA, pB, pC;
   static unsigned prev_keyled = -1;

   KEYBOARD_INDICATOR_PARAMETERS InputBuffer;
   InputBuffer.LedFlags = InputBuffer.UnitId = 0;

   if (comp.ay.reg[ 8] > pA) InputBuffer.LedFlags |= KEYBOARD_NUM_LOCK_ON;
   if (comp.ay.reg[ 9] > pB) InputBuffer.LedFlags |= KEYBOARD_CAPS_LOCK_ON;
   if (comp.ay.reg[10] > pC) InputBuffer.LedFlags |= KEYBOARD_SCROLL_LOCK_ON;

   pA = comp.ay.reg[8], pB = comp.ay.reg[9], pC = comp.ay.reg[10];

   DWORD xx;
   if (prev_keyled != InputBuffer.LedFlags)
      prev_keyled = InputBuffer.LedFlags,
      DeviceIoControl(hndKbdDev, IOCTL_KEYBOARD_SET_INDICATORS,
               &InputBuffer, sizeof(KEYBOARD_INDICATOR_PARAMETERS), 0, 0, &xx, 0);
}
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: мигать Диодами на клаве.
От: Andrew S Россия http://alchemy-lab.com
Дата: 30.08.05 18:52
Оценка: -1
А>>Доброе время суток.
А>>Стоит задача в winxp осуществить управления свето диодами на клавиатуре, мигать т.е.
А>>Заранее благодарен.

A>А зачем тебе? А то тут народ боевой
Автор:
Дата: 30.08.05
— не найдут "ни одной разумной причины" мигать светодиодами на клаве — тему в /dev/null, а тебя — в бан , так что, поаккуратней с темами топиков!


Дорогой Alxndr. Для шуток тут есть отдельный форум, для флейма — тоже. Если вам что есть сказать по теме этого топика — это очень хорошо, если вы не согласны с моими высказываниями в указанном вами топике — там и пишите. А то как то подленько получается, не находите
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: мигать Диодами на клаве.
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 31.08.05 08:12
Оценка: -1
Здравствуйте, Andrew S, Вы писали:

AS>Дорогой Alxndr. Для шуток тут есть отдельный форум, для флейма — тоже. Если вам что есть сказать по теме этого топика — это очень хорошо, если вы не согласны с моими высказываниями в указанном вами топике — там и пишите. А то как то подленько получается, не находите


Прошу прощения, если задел, но это действительно шутка, там даже смайлик стоял

AS>... если вы не согласны с моими высказываниями в указанном вами топике — там и пишите.

В указанном мною топике влепил Вам минус — что это, как не выражение моего несогласия
Добавить к тому, что Вам там ответили по этой теме — мне нечего.

То, что Вы так болезненно восприняли эту "шуточку" ИМХО говорит о том, что Вы и сами понимаете — палку Вы в той теме перегибаете.
Прошу прощения, что отвечаю в этой ветке.
Флейм, начиная с моего ответа, предлагаю снести — в /dev/null ли, в юмор ли — мне все равно.
Re[2]: мигать Диодами на клаве.
От: Аноним  
Дата: 01.09.05 06:33
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


А>>Доброе время суток.

А>>Стоит задача в winxp осуществить управления свето диодами на клавиатуре, мигать т.е.
А>>Заранее благодарен.

GN>Выдрано из UnrealSpeccy.

GN>Кое что нужно будет убрать, но идея, надеюсь, ясна .
GN>
GN>#define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
GN>#define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
GN>#define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)

GN>typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
GN>    USHORT UnitId;              // Unit identifier.
GN>    USHORT LedFlags;            // LED indicator state.
GN>} KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;

GN>#define KEYBOARD_CAPS_LOCK_ON     4
GN>#define KEYBOARD_NUM_LOCK_ON      2
GN>#define KEYBOARD_SCROLL_LOCK_ON   1

GN>void ay_kbd()
GN>{
GN>   static unsigned char pA, pB, pC;
GN>   static unsigned prev_keyled = -1;

GN>   KEYBOARD_INDICATOR_PARAMETERS InputBuffer;
GN>   InputBuffer.LedFlags = InputBuffer.UnitId = 0;

GN>   if (comp.ay.reg[ 8] > pA) InputBuffer.LedFlags |= KEYBOARD_NUM_LOCK_ON;
GN>   if (comp.ay.reg[ 9] > pB) InputBuffer.LedFlags |= KEYBOARD_CAPS_LOCK_ON;
GN>   if (comp.ay.reg[10] > pC) InputBuffer.LedFlags |= KEYBOARD_SCROLL_LOCK_ON;

GN>   pA = comp.ay.reg[8], pB = comp.ay.reg[9], pC = comp.ay.reg[10];

GN>   DWORD xx;
GN>   if (prev_keyled != InputBuffer.LedFlags)
GN>      prev_keyled = InputBuffer.LedFlags,
GN>      DeviceIoControl(hndKbdDev, IOCTL_KEYBOARD_SET_INDICATORS,
GN>               &InputBuffer, sizeof(KEYBOARD_INDICATOR_PARAMETERS), 0, 0, &xx, 0);
GN>}
GN>


Здорово только хочется еще это побыстрее скомпилить и запустить,
Я конечно могу вычислить все дедуктивным методом...

Но было бы здорово узнать заранее что нужно приинклюдить и залинковать.
NTDDK у меня есть.
Re[3]: мигать Диодами на клаве.
От: gear nuke  
Дата: 01.09.05 07:38
Оценка: 5 (2)
Здравствуйте, <Аноним>, Вы писали:

А>Здорово только хочется еще это побыстрее скомпилить и запустить,

А>Я конечно могу вычислить все дедуктивным методом...

А>Но было бы здорово узнать заранее что нужно приинклюдить и залинковать.

А>NTDDK у меня есть.

Спасибо за вопрос, код выше был не совсем полный.
NTDDK не нужен, вот мимимальный пример.
#include <windows.h>

#define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)

typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
    USHORT UnitId;              // Unit identifier.
    USHORT LedFlags;            // LED indicator state.
} KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;

/** /
#define KEYBOARD_CAPS_LOCK_ON     4
#define KEYBOARD_NUM_LOCK_ON      2
#define KEYBOARD_SCROLL_LOCK_ON   1
/**/

void start()
{
    HANDLE hndKbdDev;

    DefineDosDevice(DDD_RAW_TARGET_PATH, "Kbd_flasher", "\\Device\\KeyboardClass0");
    hndKbdDev = CreateFile("\\\\.\\Kbd_flasher", GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
//    if (hndKbdDev == INVALID_HANDLE_VALUE) return;
    
    KEYBOARD_INDICATOR_PARAMETERS InputBuffer = {0};
    for ( int i = 0; ; i++ )
    {
        InputBuffer.LedFlags = i & 7;
        DWORD xx;
        DeviceIoControl(hndKbdDev, IOCTL_KEYBOARD_SET_INDICATORS,
               &InputBuffer, sizeof(KEYBOARD_INDICATOR_PARAMETERS), 0, 0, &xx, 0);
        Sleep(500);
    }
}

#pragma comment(linker, "/subsystem:console")
#pragma comment(linker, "/entry:start")
#pragma comment(lib,    "kernel32.lib")
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: мигать Диодами на клаве.
От: Ямаха. Россия  
Дата: 01.09.05 10:32
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


А>>Здорово только хочется еще это побыстрее скомпилить и запустить,

А>>Я конечно могу вычислить все дедуктивным методом...

А>>Но было бы здорово узнать заранее что нужно приинклюдить и залинковать.

А>>NTDDK у меня есть.

GN>Спасибо за вопрос, код выше был не совсем полный.

GN>NTDDK не нужен, вот мимимальный пример.
GN>
GN>#include <windows.h>

GN>#define IOCTL_KEYBOARD_SET_INDICATORS        CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0002, METHOD_BUFFERED, FILE_ANY_ACCESS)
GN>#define IOCTL_KEYBOARD_QUERY_TYPEMATIC       CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
GN>#define IOCTL_KEYBOARD_QUERY_INDICATORS      CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)

GN>typedef struct _KEYBOARD_INDICATOR_PARAMETERS {
GN>    USHORT UnitId;              // Unit identifier.
GN>    USHORT LedFlags;            // LED indicator state.
GN>} KEYBOARD_INDICATOR_PARAMETERS, *PKEYBOARD_INDICATOR_PARAMETERS;

GN>/** /
GN>#define KEYBOARD_CAPS_LOCK_ON     4
GN>#define KEYBOARD_NUM_LOCK_ON      2
GN>#define KEYBOARD_SCROLL_LOCK_ON   1
GN>/**/

GN>void start()
GN>{
GN>    HANDLE hndKbdDev;

GN>    DefineDosDevice(DDD_RAW_TARGET_PATH, "Kbd_flasher", "\\Device\\KeyboardClass0");
GN>    hndKbdDev = CreateFile("\\\\.\\Kbd_flasher", GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
GN>//    if (hndKbdDev == INVALID_HANDLE_VALUE) return;
    
GN>    KEYBOARD_INDICATOR_PARAMETERS InputBuffer = {0};
GN>    for ( int i = 0; ; i++ )
GN>    {
GN>        InputBuffer.LedFlags = i & 7;
GN>        DWORD xx;
GN>        DeviceIoControl(hndKbdDev, IOCTL_KEYBOARD_SET_INDICATORS,
GN>               &InputBuffer, sizeof(KEYBOARD_INDICATOR_PARAMETERS), 0, 0, &xx, 0);
GN>        Sleep(500);
GN>    }
GN>}

GN>#pragma comment(linker, "/subsystem:console")
GN>#pragma comment(linker, "/entry:start")
GN>#pragma comment(lib,    "kernel32.lib")
GN>



Класно, все заработало.
я бы еще добавил для полного счастья еще пару строк в это послание


#define FILE_DEVICE_KEYBOARD            0x0000000b
#define FILE_ANY_ACCESS                 0 
#define METHOD_BUFFERED                 0


чтобы совсем все было.

Спасибо.
Смысл жизни в том что его можно выбрать по своему вкусу, в любой момент...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.