haiku-website/static/legacy-docs/bebook/TheKeyboard_KeyStates.html

26 lines
6.3 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Be Book - Special Topics - The Keyboard</title><link rel="stylesheet" href="be_book.css" type="text/css" media="all" /><link rel="shortcut icon" type="image/vnd.microsoft.icon" href="./images/favicon.ico" /><!--[if IE]>
<link rel="stylesheet" type="text/css" href="be_book_ie.css" />
<![endif]--><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><meta name="keywords" content="Access, BeOS, BeBook, API" /><link rel="start" href="index.html" title="The Be Book" /><link rel="up" href="TheKeyboard.html" title="The Keyboard" /><link rel="prev" href="TheKeyboard_KeyCodes.html" title="Key Codes" /><link rel="next" href="TheTracker.html" title="The Tracker" /></head><body><div id="header"><div id="headerT"><div id="headerTL"><a accesskey="p" href="TheKeyboard_KeyCodes.html" title="Key Codes"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a accesskey="u" href="TheKeyboard.html" title="The Keyboard"><img src="./images/navigation/up.png" alt="Up" /></a> <a accesskey="n" href="TheTracker.html" title="The Tracker"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="headerTR"><div id="navigpeople"><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div><div class="navigboxed" id="navigindex"><a accesskey="i" href="ClassIndex.html" title="Index">I</a></div><div class="navigboxed" id="naviglang" title="English">en</div></div><div id="headerTC">The Be Book - Special Topics - The Keyboard</div></div><div id="headerB">Prev: <a href="TheKeyboard_KeyCodes.html">Key Codes</a>  Up: <a href="TheKeyboard.html">The Keyboard</a>  Next: <a href="TheTracker.html">The Tracker</a></div><hr /></div><div class="section"><div xmlns="" xmlns:d="http://docbook.org/ns/docbook" class="titlepage"><div><div xmlns:d="http://docbook.org/ns/docbook"><h2 xmlns="http://www.w3.org/1999/xhtml" class="title"><a id="TheKeyboard_KeyStates"></a>Key States</h2></div></div></div><p>You can look at the state of all the keys on the keyboard at a given
moment in time. This information is captured and reported in two ways:</p><div class="orderedlist"><ol><li><p>As the <code class="varname">states</code> field in every
<code class="constant">B_KEY_DOWN</code> message, and</p></li><li><p>As the <code class="varname">key_states</code> bitfield reported by
<a class="link" href="TheInputServer_Functions.html#get_key_info" title="get_key_info()"><code class="function">get_key_info()</code></a>.</p></li></ol></div><p>In both cases, the bitfield is an array of 16 bytes,</p><pre class="programlisting example c">uint8 states[16];</pre><p>with one bit standing for each key on the keyboard. Bits are numbered
from left to right, beginning with the first byte in the array, as
illustrated below:</p><div class="mediaobject"><img src="./images/TheKeyboard/KeyboardKeyStates-2.png" alt="Info Icon" /></div><p>Bit numbers start with 0 and match key codes. For example, bit 0x3c
corresponds to the <span class="keycap">a</span> key, 0x3d to the <span class="keycap">s</span>
key, 0x3e to the <span class="keycap">d</span> key, and so
on. The first bit is 0x00, which doesn't correspond to any key. The first
meaningful bit is 0x01, which corresponds to the
<span class="keycap">Escape</span> key.</p><p>When a key is down, the bit corresponding to its key code is set to 1.
Otherwise, the bit is 0. However, for the three keys that toggle keyboard
locks—<span class="keycap">Caps Lock</span> (key 0x3b), <span class="keycap">Num Lock</span>
(key 0x22), and <span class="keycap">Scroll Lock</span>
(key 0x0f)—the bit is set to 1 if the lock is on and set to 0 if
the lock is off, regardless of the state of the key itself.</p><p>To test the bitfield against a particular key,</p><ul class="itemizedlist"><li><p>Select the byte in the <code class="varname">states</code> array that contains the bit for that
key,</p></li><li><p>Form a mask for the key that can be compared to that byte, and</p></li><li><p>Compare the byte to the mask.</p></li></ul><p>For example:</p><pre class="programlisting example c">if (<code class="varname">states</code>[<code class="varname">keyCode</code>&gt;&gt;3] &amp; (1 &lt;&lt; (7 - (<code class="varname">keyCode</code>%8)))) {
<span class="comment">/* the key is down */</span>
}</pre></div><div id="footer"><hr /><div id="footerT">Prev: <a href="TheKeyboard_KeyCodes.html">Key Codes</a>  Up: <a href="TheKeyboard.html">The Keyboard</a>  Next: <a href="TheTracker.html">The Tracker</a> </div><div id="footerB"><div id="footerBL"><a href="TheKeyboard_KeyCodes.html" title="Key Codes"><img src="./images/navigation/prev.png" alt="Prev" /></a> <a href="TheKeyboard.html" title="The Keyboard"><img src="./images/navigation/up.png" alt="Up" /></a> <a href="TheTracker.html" title="The Tracker"><img src="./images/navigation/next.png" alt="Next" /></a></div><div id="footerBR"><div><a href="http://www.haiku-os.org"><img src="./images/People_24.png" alt="haiku-os.org" title="Visit The Haiku Website" /></a></div><div class="navighome" title="Home"><a accesskey="h" href="index.html"><img src="./images/navigation/home.png" alt="Home" /></a></div></div><div id="footerBC"><a href="http://www.access-company.com/home.html" title="ACCESS Co."><img alt="Access Company" src="./images/access_logo.png" /></a></div></div></div><div id="licenseFooter"><div id="licenseFooterBL"><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" title="Creative Commons License"><img alt="Creative Commons License" style="border-width:0" src="https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png" /></a></div><div id="licenseFooterBR"><a href="./LegalNotice.html">Legal Notice</a></div><div id="licenseFooterBC"><span id="licenseText">This work is licensed under a
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative
Commons Attribution-Non commercial-No Derivative Works 3.0 License</a>.</span></div></div></body></html>