title: C++ WINAPI: How to use SendMessage/PostMessage WM_KEYDOWN lparam
body: <p>As an amateur to anything lower than VB/VBS (C++ WINAPI is a nightmare for someone of my experience) I have no idea how to go about constructing the long lParam for a simple KEYDOWN message in C++ and have probably spent more time looking for a decent explanation than is worth, would someone be able to describe exactly how to go about this? </p>
  
  <p>It seems that almost every response to this question in other forums has been "why" or "use SendInput instead", without actually answering the question; I'm guessing that it's far too elementary for people to explain. Anyway here's the description from msdn, would very much appreciate a decent explanation or link to one, and a worked example if possible: </p>
  
  <blockquote>
    <p>The repeat count, scan code,
    extended-key flag, context code,
    previous key-state flag, and
    transition-state flag, as shown...</p>
    
    <p>0-15  The repeat count for the current
    message. The value is the number of
    times the keystroke is autorepeated as
    a result of the user holding down the
    key. If the keystroke is held long
    enough, multiple messages are sent.
    However, the repeat count is not
    cumulative. 16-23 The scan code. The
    value depends on the OEM.</p>
    
    <p>24    Indicates whether the key is an
    extended key, such as the right-hand
    ALT and CTRL keys that appear on an
    enhanced 101- or 102-key keyboard. The
    value is 1 if it is an extended key;
    otherwise, it is 0. 25-28 Reserved; do
    not use</p>
    
    <p>29    The context code. The value is 1 if
    the ALT key is down while the key is
    pressed; it is 0 if the WM_SYSKEYDOWN
    message is posted to the active window
    because no window has the keyboard
    focus.</p>
    
    <p>30    The previous key state. The value
    is 1 if the key is down before the
    message is sent, or it is 0 if the key
    is up.</p>
    
    <p>31    The transition state. The value is
    always 0 for a WM_SYSKEYDOWN message.</p>
  </blockquote>