WM_KEYDOWN, WM_CHAR и их LPARAM
От: SVV Беларусь  
Дата: 04.11.02 15:35
Оценка:
Привет всем.

Недавно понадобилось более глубоко копнуть в параметры сообщений из сабжа. Про LPARAM в MSDN прочитал, но остаются неясными биты 16-23:
Specifies the scan code. The value depends on the original equipment manufacturer (OEM).

Не могли бы вы помочь конкретной ссылкой где можно почитать по этому вопросу?
Т.е. в каких случаях какое значение использовать?

поиск в MSDN по 'scan code OEM' и 'scan code OEM table' полезных результатов не дал

Спасибо за внимание.
Re: WM_KEYDOWN, WM_CHAR и их LPARAM
От: Admiral Украина  
Дата: 04.11.02 16:23
Оценка:
Здравствуйте SVV, Вы писали:

SVV>поиск в MSDN по 'scan code OEM' и 'scan code OEM table' полезных результатов не дал


Scan Code, насколько я помню/знаю, — это физический код клавиши. Поищи просто по "scan code".
Re[2]: WM_KEYDOWN, WM_CHAR и их LPARAM
От: Admiral Украина  
Дата: 04.11.02 16:30
Оценка: 3 (1)
Здравствуйте Admiral, Вы писали:

A>Поищи просто по "scan code".

И лучше не в MSDN, а в Сети.

Удачи!
Re[2]: WM_KEYDOWN, WM_CHAR и их LPARAM
От: promko Украина  
Дата: 04.11.02 18:03
Оценка: 6 (1)
Здравствуйте Admiral, Вы писали:

A>Scan Code, насколько я помню/знаю, — это физический код клавиши. Поищи просто по "scan code".


A code number transmitted to a computer whenever a key is pressed or released. Each key on the keyboard has a unique scan code. This code is not the same as the ASCII code for the letter, number, or symbol shown on the key; it is a special identifier for the key itself and is always the same for a particular key. When a key is pressed, the scan code is transmitted to the computer, where a portion of the read-only memory basic input/output system (ROM BIOS) dedicated to the keyboard translates the scan code into its ASCII equivalent. Because a single key can generate more than one character—lowercase "a" and uppercase "A," for example—the ROM BIOS also keeps track of the status of keys that change the keyboard state, such as the SHIFT key, and takes them into account when translating a scan code.
Re: WM_KEYDOWN, WM_CHAR и их LPARAM
От: prl  
Дата: 04.11.02 23:11
Оценка: 3 (1)
Здравствуйте SVV, Вы писали:

SVV>Привет всем.


SVV>Недавно понадобилось более глубоко копнуть в параметры сообщений из сабжа. Про LPARAM в MSDN прочитал, но остаются неясными биты 16-23:

SVV>Specifies the scan code. The value depends on the original equipment manufacturer (OEM).

SVV>Не могли бы вы помочь конкретной ссылкой где можно почитать по этому вопросу?

SVV>Т.е. в каких случаях какое значение использовать?

SVV>поиск в MSDN по 'scan code OEM' и 'scan code OEM table' полезных результатов не дал


SVV>Спасибо за внимание.



PRL>> Если надо про сканкод(лучше используй виртуальные клавиши)приведу цитату:

"Скан-код OEM является кодом клавиатуры, генерируемым аппаратурой компьютера. (Если вы хорошо знакомы с программированием на языке ассемблера, то скан-код — это код, передаваемый программе в регистре AH при вызове прерывания 16H BIOS.) Приложения Windows обычно игнорируют скан код OEM, поскольку имеют более совершенные способы расшифровки информации от клавиатуры."
Re[2]: WM_KEYDOWN, WM_CHAR и их LPARAM
От: SVV Беларусь  
Дата: 05.11.02 07:49
Оценка:
Здравствуйте prl, Вы писали:

PRL>>> Если надо про сканкод(лучше используй виртуальные клавиши)приведу цитату:

prl>"Скан-код OEM является кодом клавиатуры, генерируемым аппаратурой компьютера. (Если вы хорошо знакомы с программированием на языке ассемблера, то скан-код — это код, передаваемый программе в регистре AH при вызове прерывания 16H BIOS.) Приложения Windows обычно игнорируют скан код OEM, поскольку имеют более совершенные способы расшифровки информации от клавиатуры."

Не могу сказать, чтоб я совсем не догадывался что такое скан код, но мне непонятно зачем мне нужно его знать, отправляя сообщение WM_CHAR, к примеру:
::SendMessage (hWin, WM_CHAR, VK_RETURN, (scancode<<16)+0001);

Я уже сказал системе что хочу проэмулировать Enter, что еще она хочет?

С ассемблером я знаком. И скан код клавиши откопать могу и еще какой-нибудь код, поэтому и усомнился в том, что же именно хочет здесь получить система, не может быть чтобы она дважны справшивала одно и тоже. Из вашего ответа так и не стало ясно что нужно передать: scan code или scan code OEM? и где их откопать...
Re[3]: WM_KEYDOWN, WM_CHAR и их LPARAM
От: SVV Беларусь  
Дата: 05.11.02 07:52
Оценка:
Здравствуйте Admiral, Вы писали:

A>Здравствуйте Admiral, Вы писали:


A>>Поищи просто по "scan code".

A>И лучше не в MSDN, а в Сети.
Классно, микрософт написала огромный MSDN (гиг с хреном), а искать нужно в сети...
Неужели этот огромный, напичканый всякой фигней МСДН не содержит нужной таблицы, хорошего описания? Нехорошо это...

A>Удачи!

Спасибо, она мне понадобится...
Re[3]: WM_KEYDOWN, WM_CHAR и их LPARAM
От: SVV Беларусь  
Дата: 05.11.02 08:03
Оценка:
Здравствуйте promko, Вы писали:

P>Здравствуйте Admiral, Вы писали:


A>>Scan Code, насколько я помню/знаю, — это физический код клавиши. Поищи просто по "scan code".


P>A code number transmitted to a computer whenever a key is pressed or released. Each key on the keyboard has a unique scan code. This code is not the same as the ASCII code for the letter, number, or symbol shown on the key; it is a special identifier for the key itself and is always the same for a particular key. When a key is pressed, the scan code is transmitted to the computer, where a portion of the read-only memory basic input/output system (ROM BIOS) dedicated to the keyboard translates the scan code into its ASCII equivalent. Because a single key can generate more than one character—lowercase "a" and uppercase "A," for example—the ROM BIOS also keeps track of the status of keys that change the keyboard state, such as the SHIFT key, and takes them into account when translating a scan code.


Вот это уже похоже на правду. А вы уверены, что в случае
::SendMessage (hWin, WM_CHAR, VK_RETURN, (scancode<<16)+0001);

системе нужен именно этот scan code? Насколько я помню, эти скан коды в основном 1 (ОК) и 2 (!) байтный — а система ждет scan code длиной 8 бит..., есть еще несколько 3х байтных и 1 4х байтный (print screen, на некоторых клавах)... Мне конечно не нужны такие экзотические клавиши, но мне кажется, что это повод для сомнений — то ли мы понимаем под scan code для этого случая...

Спасибо за помощь.

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