Saturday, November 14, 2009

How to Use a Microsoft Natural Keyboard Pro in Windows 7/Vista

When Microsoft released an update to its IntelliType keyboard software to coincide with the launch of Windows Vista, it conspicuously dropped support for one if its keyboard models: the Microsoft Natural Keyboard Pro (pictured). When you select the keyboard model on Microsoft's keyboard software download page, the latest operating system supported is Windows XP. At first glance, Vista and Windows 7 users would appear to be out of luck.

While the standard keys will work without any special software in any version of Windows, the IntelliType software is required to make full use of the extra "media keys" at the top of the Natural Keyboard Pro. These extra keys control music and video playback, web browser navigation, and some other convenient functions. Some clever users quickly realized they could get partial functionality by selecting a similar keyboard model instead ("Internet Keyboard", "Natural Ergonomic Keyboard 4000" or "Natural MultiMedia Keyboard"), but that method is an incomplete solution: the media keys will then work with their default behavior but can't be reprogrammed. Whereas in Windows XP you could set the Media key to open iTunes (for example), in Vista or Windows 7 the button would only launch Windows Media Player.

I was OK with this limitation as a Vista user, but with the awful changes in Windows 7's Windows Media Player 12, I was inspired to find a way to reprogram the Media button to launch a more sensible music program. Good news for Natural Keyboard Pro owners: the instructions below describe an easy way to restore full functionality for the keyboard under Windows Vista and Windows 7, including programmable media keys. As with certain other Microsoft hardware, this seems to be a case of Microsoft phasing out support for a perfectly functional product for questionable reasons.

Instructions

Follow the steps below to set up the Microsoft IntelliType Pro software with your Microsoft USB Natural Keyboard Pro on Windows Vista or Windows 7 (32-bit or 64-bit).

1. Download IntelliType Pro

Download the appropriate version of Microsoft IntelliType Pro for your edition of Windows:
If Microsoft has released a newer version of IntelliType since this article was written, your results may vary. The current version as of this writing (according to the installer filename) is 7.00.260.0. It's possible that future versions may include changes that make these instructions obsolete. If you decide to install a newer version of IntelliType and run into trouble, uninstall it and use the version linked above instead.

2. Install IntelliType Pro

Run the installer you downloaded. When asked to select your keyboard model, choose "Natural MultiMedia Keyboard." You will also be asked if you would like the software to automatically check for new versions. I suggest you disable automatic updates: a new version of the software could undo the changes you will be making here.

3. Duplicate some IntelliType files

You will be modifying some of the files that come with the IntelliType software. First, locate each of the files listed below and make a duplicate copy in another location, such as on your Desktop.
  • 32-bit Windows users:
    • C:\Program Files\Microsoft IntelliType Pro\ITypeDevices.xml
    • C:\Program Files\Microsoft IntelliType Pro\Driver\type32\type32.inf

  • 64-bit Windows users:
    • C:\Program Files\Microsoft IntelliType Pro\ITypeDevices.xml
    • C:\Program Files\Microsoft IntelliType Pro\Driver\type64\type64.inf

4a. 32-bit users only: Modify type32.inf

(64-bit users, go to Step 4b.)

Now find the duplicate copy you made of type32.inf. Double-click the file to open it in Notepad. Then scroll down to locate the section of the file that looks like this:
; =================== Section for Windows Vista ===========================

[MsMfg.NT.6.0]

;========= Microsoft USB Internet Keyboard (IntelliType Pro)
%HID\VID_045E&PID_002D&MI_00.DeviceDesc%=MicrosoftKBD_Dev_Vista,HID\VID_045E&PID_002D&MI_00


Now add the following lines right after [MsMfg.NT.6.0]. (When you hover over the text below, a "copy to clipboard" button will appear.)
;========= Microsoft USB Natural Keyboard Pro (IntelliType Pro)
%HID\VID_045E&PID_001D&MI_00.DeviceDesc%=MicrosoftKBD_Dev_Vista,HID\VID_045E&PID_001D&MI_00


Next, scroll down to locate the section of the file that looks like this:
; ======================== Strings ==========================

[Strings]

Microsoft="Microsoft"
IntelliTypeProCD="Microsoft IntelliType Pro CD"
DeviceDesc="Microsoft Keyboard IntelliType Pro Driver"

Insert the following line right after the text shown above. (When you hover over the text below, a "copy to clipboard" button will appear.)
HID\VID_045E&PID_001D&MI_00.DeviceDesc = "Microsoft USB Natural Keyboard Pro (IntelliType Pro)"

Save the file and proceed with Step 5.

4b. 64-bit users only: Modify type64.inf

Now find the duplicate copy you made of type64.inf. Double-click the file to open it in Notepad. Then scroll down to locate the section of the file that looks like this:
; =================== Section for Windows Vista (NTamd64.6.0) ===========================

[MsMfg.NTamd64.6.0]

;========= Microsoft USB Internet Keyboard (IntelliType Pro)
%HID\VID_045E&PID_002D&MI_00.DeviceDesc%=MicrosoftKBD_Dev_Vista,HID\VID_045E&PID_002D&MI_00


Now add the following lines right after [MsMfg.NTamd64.6.0]. (When you hover over the text below, a "copy to clipboard" button will appear.)
;========= Microsoft USB Natural Keyboard Pro (IntelliType Pro)
%HID\VID_045E&PID_001D&MI_00.DeviceDesc%=MicrosoftKBD_Dev_Vista,HID\VID_045E&PID_001D&MI_00


Next, scroll down to locate the section of the file that looks like this:
; ======================== Strings ==========================

[Strings]

Microsoft="Microsoft"
IntelliTypeProCD="Microsoft IntelliType Pro CD"
DeviceDesc="Microsoft Keyboard IntelliType Pro Driver"

Insert the following line right after the text shown above. (When you hover over the text below, a "copy to clipboard" button will appear.)
HID\VID_045E&PID_001D&MI_00.DeviceDesc = "Microsoft USB Natural Keyboard Pro (IntelliType Pro)"

Save the file and proceed with Step 5.

5. Modify ITypeDevices.xml

Now find the duplicate copy you made of ITypeDevices.xml and open it in Notepad. Then scroll down to the very end of the file and examine the last 2 lines:
  </Device>
</MicrosoftHardwareDevices>

You will copy and paste a long section of text after </Device>. To keep the instructions readable, I am including the text in an appendix at the bottom of this article. Copy the text from the appendix and paste it into the file after the </Device> line.

Save the file and close Notepad.

6. Copy your modified files back to the IntelliType folder

Now copy the 2 files you modified in the previous steps back into the IntelliType folder, overwriting the original copies. You may wish to make another backup copy of the originals before replacing them.
  • 32-bit Windows users:
    • Copy ITypeDevices.xml to C:\Program Files\Microsoft IntelliType Pro
    • Copy type32.inf to C:\Program Files\Microsoft IntelliType Pro\Driver\type32

  • 64-bit Windows users:
    • Copy ITypeDevices.xml to C:\Program Files\Microsoft IntelliType Pro
    • Copy type64.inf to C:\Program Files\Microsoft IntelliType Pro\Driver\type64

You may receive a message saying "You'll need to provide administrator privileges to copy to this folder." If so, be sure to confirm by clicking "Continue".

7. Close IntelliType

Now you will need to temporarily close the IntelliType software, which runs in the background:
  • Right-click on the Windows taskbar
  • Choose "Start Task Manager"
  • Click the "Processes" tab
  • Highlight the itype.exe process
  • Click "End Process"
  • Confirm by clicking "End process" again
  • Close Windows Task Manager

8. Update your keyboard driver

Open your Control Panel, choose the "Hardware and Sound" category, and open the Device Manager. Find the "Keyboards" item in the device list and expand it to show your "Microsoft USB Natural Keyboard Pro", like this:



Right-click the keyboard item and choose "Update Driver Software...". You'll see this window:



Click "Browse my computer for driver software" to proceed to the next step:



Click "Let me pick from a list of device drivers on my computer". In the next step, click "Have Disk..." and browse to the appropriate driver folder:
  • 32-bit Windows users: C:\Program Files\Microsoft IntelliType Pro\Driver\type32
  • 64-bit Windows users: C:\Program Files\Microsoft IntelliType Pro\Driver\type64
Click "OK" and verify that the IntelliType Pro driver is now listed, like this:



Click "Next" and you will receive a driver warning:



Choose "Install this driver software anyway" and you should receive confirmation that the driver was updated:



9. Open the Key Settings control panel

  • Windows Vista users:
    • Open Control Panel
    • Open the "Hardware and Sound" category
    • Click "Keyboard"

  • Windows 7 users:
    • Open Control Panel
    • Open the "Hardware and Sound" category
    • Open the "Devices and Printers" category
    • Right-click the keyboard icon and choose "Keyboard settings"

This will automatically restart the IntelliType software, which you closed in Step 8. You should now see the IntelliType settings like this:



(Your settings box won't show the model as "Natural Keyboard Pro" until after the next step.)

10. Change your keyboard model to Natural Keyboard Pro

In the IntelliType settings, click the "Change..." button. The Natural Keyboard Pro should now be listed as an option. (Note that you will not see a photo of the keyboard, but that's OK.) Select the keyboard model and click "OK". The list of media keys should now correspond to the buttons on your Natural Keyboard Pro.

Reprogram a media key to test the software. For example, change the Calculator button to launch another program and make sure it works as expected.

You're done. Enjoy!

Technical Notes

I found the hardware details for the Natural Keyboard Pro by examining the .INF file from IntelliType Pro 5.5, the last version of IntelliType (released for Windows XP) which supported that model.

I created the media key definition (the text added to ITypeDevices.xml) using the other keyboard models in that file as an example, and by cross-referencing with mscmdkey.xml (another configuration file found in the IntelliType folder). The Device ID I chose (1001) has no special significance, except that it was not already used elsewhere in the file. The same is true of the OemAbbreviation "NKP".

It's difficult not to be suspicious of Microsoft's motives here. From all appearances, they could have simply left the Natural Keyboard Pro lines in the driver and it would have continued to work perfectly with Windows Vista and Windows 7. Instead, the company went to the effort of specifically deleting that model from the driver, possibly hoping owners would surrender in frustration and buy Microsoft's top-of-the-line model instead. Perhaps Microsoft should start thinking of reliable products that work for many years as a selling point and a mark of pride, rather than a burden on their future hardware sales.

Appendix: Text to add to ITypeDevices.xml in Step 5

(When you hover over the text below, a "copy to clipboard" button will appear.)

  <Device ID='1001' Type='Keyboard'>
    <Name>Natural Keyboard Pro</Name>
    <OemAbbreviation>NKP</OemAbbreviation>
    <HWID Type='PID'>
      0x001D
      <CollectionList>
        <Collection>
          <CollectionId>1</CollectionId>
          <CollectionFeature>KEYBOARD</CollectionFeature>
        </Collection>
      </CollectionList>
    </HWID>
    <PCImageFile></PCImageFile>
    <EventList>
      <Event>
        <Id>BROWSER_BACK_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_BACKWARD</DisplayName>
        <EventIcon>IDI_BROWSER_BACKWARD</EventIcon>
        <DefaultCommand>BROWSER_BACK_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_FORWARD_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_FORWARD</DisplayName>
        <EventIcon>IDI_BROWSER_FORWARD</EventIcon>
        <DefaultCommand>BROWSER_FORWARD_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_STOP_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_STOP</DisplayName>
        <EventIcon>IDI_BROWSER_STOP</EventIcon>
        <DefaultCommand>BROWSER_STOP_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_REFRESH_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_REFRESH</DisplayName>
        <EventIcon>IDI_BROWSER_REFRESH</EventIcon>
        <DefaultCommand>BROWSER_REFRESH_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_SEARCH_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_SEARCH</DisplayName>
        <EventIcon>IDI_BROWSER_SEARCH</EventIcon>
        <DefaultCommand>BROWSER_SEARCH_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_FAVORITES_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_FAVORITES</DisplayName>
        <EventIcon>IDI_BROWSER_FAVORITES</EventIcon>
        <DefaultCommand>BROWSER_FAVORITES_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>BROWSER_HOME_KEY_EVENT</Id>
        <DisplayName>IDS_KN_BROWSER_HOME</DisplayName>
        <EventIcon>IDI_BROWSER_HOME</EventIcon>
        <DefaultCommand>BROWSER_HOME_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>MAIL_KEY_EVENT</Id>
        <DisplayName>IDS_KN_LAUNCH_MAIL</DisplayName>
        <EventIcon>IDI_LAUNCH_MAIL</EventIcon>
        <DefaultCommand>LAUNCH_MAIL_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>MUTE_KEY_EVENT</Id>
        <DisplayName>IDS_KN_VOLUME_OSD</DisplayName>
        <EventIcon>IDI_VOLUME_UP_DOWN</EventIcon>
        <DefaultCommand>VOLUME_MUTE_COMMAND</DefaultCommand>
        <Capability Name='UserAssignable'/>
        <Capability Name='CantDisable'/>
      </Event>
      <Event>
        <Id>VOLUME_UP_KEY_EVENT</Id>
        <DisplayName>IDS_KN_VOLUME_OSD</DisplayName>
        <EventIcon>IDI_VOLUME_UP_DOWN</EventIcon>
        <DefaultCommand>VOLUME_UP_COMMAND</DefaultCommand>
      </Event>
      <Event>
        <Id>VOLUME_DOWN_KEY_EVENT</Id>
        <DisplayName>IDS_KN_VOLUME_OSD</DisplayName>
        <EventIcon>IDI_VOLUME_UP_DOWN</EventIcon>
        <DefaultCommand>VOLUME_DOWN_COMMAND</DefaultCommand>
      </Event>
      <Event>
        <Id>PLAY_PAUSE_KEY_EVENT</Id>
        <DisplayName>IDS_KN_MEDIA_PLAY_PAUSE</DisplayName>
        <EventIcon>IDI_MEDIA_PLAY_PAUSE</EventIcon>
        <DefaultCommand>MEDIA_PLAY_PAUSE_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>MEDIA_STOP_KEY_EVENT</Id>
        <DisplayName>IDS_KN_MEDIA_STOP</DisplayName>
        <EventIcon>IDI_MEDIA_STOP</EventIcon>
        <DefaultCommand>MEDIA_STOP_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>PREVIOUS_TRACK_KEY_EVENT</Id>
        <DisplayName>IDS_KN_MEDIA_PREVIOUSTRACK</DisplayName>
        <EventIcon>IDI_MEDIA_PREVIOUSTRACK</EventIcon>
        <DefaultCommand>MEDIA_PREVIOUS_TRACK_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>NEXT_TRACK_KEY_EVENT</Id>
        <DisplayName>IDS_KN_MEDIA_NEXTTRACK</DisplayName>
        <EventIcon>IDI_MEDIA_NEXTTRACK</EventIcon>
        <DefaultCommand>MEDIA_NEXT_TRACK_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>MEDIA_KEY_EVENT</Id>
        <DisplayName>IDS_KN_LAUNCH_MEDIA_SELECT</DisplayName>
        <EventIcon>IDI_LAUNCH_MEDIA_SELECT</EventIcon>
        <DefaultCommand>LAUNCH_MEDIA_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>MY_COMPUTER_KEY_EVENT</Id>
        <DisplayName>IDS_KN_LAUNCH_APP1</DisplayName>
        <EventIcon>IDI_LAUNCH_APP1</EventIcon>
        <DefaultCommand>LAUNCH_MY_COMPUTER_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>CALCULATOR_KEY_EVENT</Id>
        <DisplayName>IDS_KN_LAUNCH_APP2</DisplayName>
        <EventIcon>IDI_LAUNCH_APP2</EventIcon>
        <DefaultCommand>LAUNCH_CALCULATOR_COMMAND</DefaultCommand>
        <Capability Name='CanRemap'/>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>LEFT_WINDOW_KEY_EVENT</Id>
        <DisplayName>IDS_KN_LWIN</DisplayName>
        <EventIcon>IDI_LWIN</EventIcon>
        <DefaultCommand>LEFT_WINDOW_COMMAND</DefaultCommand>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>RIGHT_WINDOW_KEY_EVENT</Id>
        <DisplayName>IDS_KN_RWIN</DisplayName>
        <EventIcon>IDI_RWIN</EventIcon>
        <DefaultCommand>RIGHT_WINDOW_COMMAND</DefaultCommand>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>APPS_KEY_EVENT</Id>
        <DisplayName>IDS_KN_APPS</DisplayName>
        <EventIcon>IDI_APPS</EventIcon>
        <DefaultCommand>APPS_COMMAND</DefaultCommand>
        <Capability Name='UserAssignable'/>
      </Event>
      <Event>
        <Id>CAPSLOCK_KEY_EVENT</Id>
        <DisplayName>IDS_KN_CAPITAL</DisplayName>
        <EventIcon>IDI_CAPITAL</EventIcon>
        <DefaultCommand>CAPSLOCK_COMMAND</DefaultCommand>
        <Capability Name='UserAssignable'/>
      </Event>
    </EventList>
  </Device>