Xah Lee, 2009-11-08, 2009-12-05, 2010-01-28
Microsoft IntelliType is a keyboard software that comes with Microsoft keyboards, and works only with Microsoft keyboards. This page is some info on some of the tech detail on how the software works, for those tech geeks who like to customize their keyboards extensively.
As far as i know, there's no public documentation about how intellitype works. So, this writing is somewhat a reverse engineering documentation.
You may first read about Problems of Microsoft IntelliType, to become familiar with what can and cannot be done with IntelliType's interface, or the limit of IntelliType hacking described in this doc can achieve.
Note: This writing is not comprehensive. Its just some notes of my findings. To understand this document fully, you should have at least 1 hour experience in playing or setting up keys using intelliType. For example, you should know how to use IntelliType to remap keys. You should also be familiar with the basics of Windows Registry and XML file.
The tech info in this article should apply to all other Microsoft keyboards, but this article is particularly for using Microsoft Natural Ergonomic Keyboard 4000 with Microsoft Windows Vista. The IntelliType Pro driver version is “7.0.258.0”.
Microsoft IntelliType Pro for Windows.
IntelliType is free. It can be downloaded at Microsoft website at http://www.microsoft.com/hardware/download/download.aspx?category=mk. However, it works only with Microsoft keyboards.
The software can be launched under Control Panel, Keyboard.
The full name of the software is IntelliType Pro, but we'll just call it IntelliType.
IntelliType uses the Windows Registry to store its keymapping data. (If you are not familiar with registry, see: Microsoft Windows Registry Tutorial) When you add, remove, change a key definition using the IntelliType Pro software, the registry is updated.
The registery items for IntelliType is at: “HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro”.
Under the “IntelliType Pro” branch, there are these branches:
AppSpecific EventMapping Shortcuts SQM Zoom
The EventMapping is the generic key definition for your keys.
The “AppSpecific” holds key sets for each application. Each application will have a entry. For example, i have:
AppSpecific ... emacs.exe firefox.exe googleearth.exe notepad.exe ...
When you use IntelliType to create a new set of keys for a different software (Under the section “Custom Key Settings”, “Add...” button), it'll create a “EventMapping” branch under the app's name entry in “AppSpecific” . If you never defined keys specific to apps, it is safe to delete the whole AppSpecific entry. (it will be regenerated anyway. Do not delete the whole “IntelliType Pro” tree. If you do, next time you launch it, it'll complain of locating some file thinking that you might have pirated the software. But you can always download it again and reinstall.)
Am not sure what “Shortcuts” or “SQM” entries are for. They don't have any children and doesn't seem to be used.
The “Zoom” entry is for the Zoom slider on your keyboard. This entry will be created only if you have tried to disable the zoom using IntelliType (in the Zoom tab).
The “EventMapping”, regardless where it appears, is the main key data. Each of its children defines a key, and that key's action. The keys are identified by a numerical code.
Example of Key 31's content. Key 31 is the Calculator button. In this case, i've remapped it to launch iTunes.
| Key Code | Key/Button | Comment |
|---|---|---|
| 14 | Back | The special “Back” button, with a fat left arrow (⇦) icon on the button. |
| 15 | Forward | The special “Forward” button, with a fat right arrow (⇨) icon on the button. |
| 18 | Search | ◇ |
| 20 | Web/Home | ◇ |
| 21 | ◇ | |
| 25 | Play/Pause | ◇ |
| 28 | ? | ◇ |
| 29 | Media? | ◇ |
| 31 | Calculator | ◇ |
| 32 | ? | ◇ |
| 41 | New (F4)? | ◇ |
| 42 | F1 | with F Lock off |
| 45 | F4 | with F Lock off |
| 46 | F5 | with F Lock off |
| 47 | F6 | with F Lock off |
| 48 | F7 | with F Lock off |
| 49 | F8 | with F Lock off |
| 50 | F9 | with F Lock off |
| 51 | F10 | with F Lock off |
| 52 | F11 | with F Lock off |
| 53 | F12 | with F Lock off |
| 54 | F2 | with F Lock off |
| 55 | F3 | with F Lock off |
| 65 | Open (F5)? | ◇ |
| 66 | Close (F6)? | ◇ |
| 67 | ? | ◇ |
| 73 | Left Window key | ◇ |
| 74 | Menu/App key | ◇ |
| 75 | Caps Lock | ◇ |
| 75 | ? | ◇ |
| 78 | My Favorites 1 | ◇ |
| 79 | My Favorites 2 | ◇ |
| 80 | My Favorites 3 | ◇ |
| 81 | My Favorites 4 | ◇ |
| 82 | My Favorites 5 | ◇ |
| 83 | Volume? | ◇ |
todo: find the code for “My Documents”, “My Pictures”, “My Music”, “Mute”, “Media”, “Messenger”.
If you have not ever used IntelliType to remap a key, no registry entry will exist for that key. The default mapping of keys and actions is from “commands.xml” file (see explanation below.)
Each end node of “EventMapping” specify the key's action. For example, on my computer, i've set the Calculator button to launch iTunes. The Calculator button's code is 31, so in my EventMapping, there's a entry “31”, with the following content:
| Name | Type | Data |
| (Default) | REG_SZ | (value not set) |
| Arguments | REG_SZ | |
| Command | REG_DWORD | 0x00000320 (800) |
| Friendly | REG_SZ | iTunes |
| ShellExecute | REG_SZ | C:\Users\Public\desktop\iTunes.lnk |
The most important one that specify what kind of action to do for a key, is named “Command”, and its value is a integer. What the integer means can be found in the file “mscmdkey.xml” at “C:\Program Files\Microsoft IntelliType Pro”.
For example, if the value of Command is 800, and because 800 is associated with SHELL_EXECUTE_COMMAND in “mscmdkey.xml”, so the action for the key is to execute a shell command. The precise shell command to execute is specified in the value of the register entry “ShellExecute”.
Key action can be executing a shell command, or type some other key, or execute a keyboard macro, or disable a key, and others.
The following is all of the actions and their code from “mscmdkey.xml”. Note: however, they may not be complete. For example, if you use IntelliType to define “My Farovites 1” button to launch some app, then, in the registery you'll see the key “Command” having a value of “406”, but 406 is nowhere to be found in “mscmdkey.xml”.
| Command Name | Action Code | Comment |
|---|---|---|
| F1_HELP_COMMAND | 302 | ◇ |
| UNDO_COMMAND | 203 | ◇ |
| REDO_COMMAND | 204 | ◇ |
| NEW_COMMAND | 307 | ◇ |
| OPEN_COMMAND | 308 | ◇ |
| CLOSE_COMMAND | 309 | ◇ |
| MAIL_REPLY_COMMAND | 900 | ◇ |
| MAIL_FORWARD_COMMAND | 901 | ◇ |
| MAIL_SEND_COMMAND | 902 | ◇ |
| SPELL_COMMAND | 401 | ◇ |
| SAVE_COMMAND | 311 | ◇ |
| PRINT_COMMAND | 310 | ◇ |
| Command Name | Action Code | Comment |
| LAUNCH_MAIL_COMMAND | 801 | ◇ |
| LAUNCH_MEDIA_COMMAND | 802 | ◇ |
| LAUNCH_MESSENGER_COMMAND | 808 | ◇ |
| LAUNCH_CALCULATOR_COMMAND | 803 | ◇ |
| LAUNCH_CALENDAR_COMMAND | 809 | ◇ |
| Command Name | Action Code | Comment |
| WEB_SEARCH_COMMAND | 414 | ◇ |
| LAUNCH_MY_COMPUTER_COMMAND | 804 | ◇ |
| LAUNCH_MY_DOCUMENTS_COMMAND | 805 | ◇ |
| LAUNCH_MY_MUSIC_COMMAND | 807 | ◇ |
| LAUNCH_MY_PICTURE_COMMAND | 806 | ◇ |
| Command Name | Action Code | Comment |
| MEDIA_PREVIOUS_TRACK_COMMAND | 704 | Previous song (need to switch to your music player first) |
| MEDIA_NEXT_TRACK_COMMAND | 703 | Next song (need to switch to your music player first) |
| MEDIA_PLAY_PAUSE_COMMAND | 706 | ◇ |
| MEDIA_STOP_COMMAND | 705 | ◇ |
| VOLUME_UP_COMMAND | 700 | ◇ |
| VOLUME_DOWN_COMMAND | 701 | ◇ |
| VOLUME_MUTE_COMMAND | 702 | ◇ |
| Command Name | Action Code | Comment |
| APPS_COMMAND | 312 | The Menu key |
| LEFT_WINDOW_COMMAND | 313 | Left Windows Key |
| RIGHT_WINDOW_COMMAND | 314 | ◇ |
| F_LOCK_COMMAND | 402 | ◇ |
| CAPSLOCK_COMMAND | 403 | ◇ |
| NUM_LOCK_COMMAND | 404 | ◇ |
| SCROLL_LOCK_COMMAND | 405 | ◇ |
| Command Name | Action Code | Comment |
| SHELL_EXECUTE_COMMAND | 800 | Run a shell command |
| KEYSTROKE_COMMAND | 412 | Type some other key combo |
| DISABLE_COMMAND | 400 | Disable the key |
| INVALID_COMMAND | 0 | ◇ |
| UNASSIGNED_COMMAND | 2 | The default state of My Favorites buttons. |
| Command Name | Action Code | Comment |
| COPY_COMMAND | 201 | ◇ |
| CUT_COMMAND | 200 | ◇ |
| PASTE_COMMAND | 202 | ◇ |
| NEXT_WINDOW_COMMAND | 304 | ◇ |
| PREVIOUS_WINDOW_COMMAND | 305 | ◇ |
| SHOW_HIDE_DESKTOP_COMMAND | 303 | ◇ |
| ZOOM_IN_COMMAND | 319 | ◇ |
| ZOOM_OUT_COMMAND | 320 | ◇ |
| Command Name | Action Code | Comment |
| EXIT_COMMAND | 301 | ◇ |
| FIND_COMMAND | 315 | ◇ |
| BLANK_SCREEN_COMMAND | 1451 | ◇ |
| LOCK_WORKSTATION_COMMAND | 316 | ◇ |
| LOGOFF_COMMAND | 306 | ◇ |
| Command Name | Action Code | Comment |
| BROWSER_HOME_COMMAND | 106 | ◇ |
| BROWSER_BACK_COMMAND | 100 | ◇ |
| BROWSER_FORWARD_COMMAND | 101 | ◇ |
| BROWSER_FAVORITES_COMMAND | 105 | ◇ |
| BROWSER_REFRESH_COMMAND | 102 | ◇ |
| BROWSER_SEARCH_COMMAND | 104 | ◇ |
| BROWSER_STOP_COMMAND | 103 | ◇ |
| Command Name | Action Code | Comment |
| OFFICE_EXCEL_COMMAND | 1001 | ◇ |
| OFFICE_TASK_PANE_COMMAND | 1003 | ◇ |
| OFFICE_WORD_COMMAND | 1000 | ◇ |
| Command Name | Action Code | Comment |
| BATTERY_CRITICAL_COMMAND | 600 | ◇ |
| BATTERY_LOW_COMMAND | 601 | ◇ |
| BATTERY_GOOD_COMMAND | 602 | ◇ |
| BATTERY_UNKNOWN_COMMAND | 603 | ◇ |
| SIGNAL_VERY_POOR_COMMAND | 604 | ◇ |
| SIGNAL_POOR_COMMAND | 605 | ◇ |
| SIGNAL_GOOD_COMMAND | 606 | ◇ |
| SIGNAL_VERY_GOOD_COMMAND | 607 | ◇ |
| RSSI_SIGNAL_COMMAND | 608 | ◇ |
| RSSI_NOISE_COMMAND | 609 | ◇ |
| RSSI_SIGNAL_RESET_COMMAND | 610 | ◇ |
| RSSI_NOISE_RESET_COMMAND | 611 | ◇ |
| DISCONNECT_REQUEST_COMMAND | 408 | ◇ |
| VERTICAL_SCROLL_COMMAND | 1100 | ◇ |
| HORIZONTAL_SCROLL_COMMAND | 1101 | ◇ |
| NUMPAD_EQUALS_COMMAND | 1200 | ◇ |
| NUMPAD_LEFT_PAREN_COMMAND | 1201 | ◇ |
| NUMPAD_RIGHT_PAREN_COMMAND | 1202 | ◇ |
| MSPY_IME_COMMAND | 1300 | ◇ |
| Command Name | Action Code | Comment |
| FIRST_CONNECT_RADIO_RECOVERY_REQUEST_MESSAGE_COMMAND | 1500 | ◇ |
| FIRST_CONNECT_WIZARD_COMMAND | 1501 | ◇ |
| FIRST_CONNECT_UHE_MOUSE_DISCONNECT_REQUEST_MESSAGE_COMMAND | 1502 | ◇ |
| FIRST_CONNECT_BT_MOUSE_DISCONNECT_REQUEST_MESSAGE_COMMAND | 1503 | ◇ |
| FIRST_CONNECT_UHE_MOUSE_DISCONNECT_MESSAGE_COMMAND | 1504 | ◇ |
| FIRST_CONNECT_BT_MOUSE_DISCONNECT_MESSAGE_COMMAND | 1505 | ◇ |
| FIRST_CONNECT_UHE_KEYBOARD_DISCONNECT_REQUEST_MESSAGE_COMMAND | 1506 | ◇ |
| FIRST_CONNECT_BT_KEYBOARD_DISCONNECT_REQUEST_MESSAGE_COMMAND | 1507 | ◇ |
| FIRST_CONNECT_UHE_KEYBOARD_DISCONNECT_MESSAGE_COMMAND | 1508 | ◇ |
| FIRST_CONNECT_BT_KEYBOARD_DISCONNECT_MESSAGE_COMMAND | 1509 | ◇ |
| NEXT_GAMING_MODE_COMMAND | 1404 | ◇ |
The following are some other codes not found in the “mscmdkey.xml”, but can be seen in the registry.
| Code | Name in IntelliType | Purpose | Comment |
|---|---|---|---|
| 2159 | Keystroke | Type some key combo. | Not sure what's the diff with KEYSTROKE_COMMAND (412) |
| 406 | Opens the file or Web site that you sp... | Launch a app or open a file. | Not sure what's the diff with SHELL_EXECUTE_COMMAND (800) |
Todo ...
There is a file “commands.xml” at “C:\Program Files\Microsoft IntelliType Pro\”.
The purpose of the file “commands.xml” seems to be the same as the registry, but is used to as a fall back when IntelliType is installed the first time and there are no registry entries. According to blogger Joel Bennett, it seems that you can delete the whole EventMapping registry entry and simply modify commands.xml to define your key definitions.
In this way, i believe you delete the whole IntelliType registry at “HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro\EventMapping”, and “HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro\AppSpecific”. Then, modify the “commands.xml” file, then reboot the IntelliType processes to have your new keys.
I haven't explored this method of using IntelliType.
Here's the file's structure:
DPGCmd Copyright Version CHS Application Application Application ... ENG Application Application Application ... JPN ... ESP RUS ... ALL Application Application Application ...
Those CHS, CHT, ENG, JPN, PTB, PTI, ESP, RUS etc are languages. Presumably for the keyboard layout of that language. (keyboard layout can be chosen from Control Panel, Regional and Language Options). I don't know if it is safe to delete all these blocks and leave just the “<ALL>...</ALL>” block. The ALL seems to be the catch all section. Each “Application” tag is for that app. Below is a example from the ALL section:
<ALL> <Application UniqueName="StandardSupport"> <C309 Type="5" KeySeq="ctrl F4" /> <C201 Type="5" KeySeq="ctrl c" /> <C200 Type="5" KeySeq="ctrl x" /> <C301 Type="5" KeySeq="alt F4" /> <C302 Type="5" KeySeq="F1" /> <C202 Type="5" KeySeq="ctrl v" /> <C203 Type="5" KeySeq="ctrl z" /> <C205 Type="5" KeySeq="delete" /> <C100 Type="5" KeySeq="alt leftarrow" /> <C101 Type="5" KeySeq="alt rightarrow" /> <C103 Type="5" KeySeq="escape" /> <C300 Type="5" KeySeq="enter" /> <C319 Type="6" Activator="ScrollUp" /> <C320 Type="6" Activator="ScrollDown" /> <C1101 Type="6" Activator="HorizontalScroll" /> <C1003 Type="7" Subtype="0" /> </Application> ... </ALL>
Each line defines a key and its action. For example:
<C319 Type="6" Activator="ScrollUp" />
The “C319” is the Zoom slider at up position. The “Type” and the rest defines the behavior of the key. Here's what the type number means, based on Joel Bennett's blog:
| Type | Meaning |
|---|---|
| 0 | disables the key. |
| 5 | Type a key combo and or sequence. Used together with property “KeySeq”. |
| 6 | seems for continuous action, such as zoom and scroll. All type 6 has “Activator” as its property, and its property value is either scroll or zoom. |
| 1 | Sending window message? |
| 2 | Sending window message? |
| 3 | Sending window message? |
| 4 | Sending window message? |
| 7 | ? |
Here's all possible key codes that exist in commands.xml, and their meanings.
| Code | Key | Comment |
|---|---|---|
| C100 | ? | ◇ |
| C101 | ? | ◇ |
| C102 | ? | ◇ |
| C103 | ? | ◇ |
| C104 | ? | ◇ |
| C105 | ? | ◇ |
| C106 | ? | ◇ |
| C200 | ? | ◇ |
| C201 | ? | ◇ |
| C202 | ? | ◇ |
| C203 | F2 | ◇ |
| C204 | F3 | ◇ |
| C205 | ? | ◇ |
| C300 | ? | ◇ |
| C301 | ? | ◇ |
| C302 | F1 | ◇ |
| C307 | F4 | ◇ |
| C308 | F5 | ◇ |
| C309 | F6 | ◇ |
| C310 | F12 | ◇ |
| C311 | F11 | ◇ |
| C315 | ? | ◇ |
| C319 | Zoom slider up position | ◇ |
| C320 | Zoom slider down position | ◇ |
| C401 | F10 | ◇ |
| C900 | F7 | ◇ |
| C901 | F8 | ◇ |
| C902 | F9 | ◇ |
| C1003 | ? | ◇ |
| C1101 | ? | ◇ |
| C1451 | ? | ◇ |
IMPORTANT: If you do edit the file, make you your editor has admin privilege, otherwise Vista will actually just create a copy of a file at “$HOME\AppData\Local\VirtualStore\”. (for some detail about the VirtualStore, see: File Aliases Considered A Plague.) Also, you should be careful when you edit the file. It might cause IntelliType to crash. (according to some blog, IntelliType doesn't really read the file as xml, so don't think you know xml and start to add random things.)
The IntelliType processes are “itype.exe” and “dpupdchk.exe”, both located under “C:\Program Files\Microsoft IntelliType Pro\”.
The “itype.exe” is the core software. If this process is not running, then some special keys on your keyboard will not work. For example, the Zoom slider won't work, the My Favorites buttons won't work, the volumn increase/decrease or the Mute button won't display visual feedback (if you have turned on visual feedback). However, some of common special keys will still work. For example, the Web/Home button, Search button, Mail button, Calculator button, all still work but their actions will be system default, not whatever you have defined with IntelliType.
The “dpupdchk.exe” is a software update checker. It will be running only if you have turned on automatic software update check. (i don't remember where this setting is turned on. I think it was during the installation of IntelliType.)
It is safe to restart these processes.
To stop the process, you can use the Windows Task Manager, or Process Explorer.
To start them, you can simply go to control panel and launch Keyboard.
IntelliType has a keyboard macro feature. It lets you define keys to type a sequence of key combinations. However, the interface is not much documented in the Help file, and for some key combination it's not possible to program it correctly using the interface.
The Interface of IntelliType's Macro Editor
When you create a macro, the data is stored at for example: “C:/Users/xah/Documents/Microsoft Hardware/Macros”. Take a look of that folder. (if the folder doesn't exist, then create a macro first.) The folder contains files for macros you've created. If you have macros for specific applications (as done thru the interface menu named “Custom Key Settings” and “Automatic Program Settings”), a new folder is created for that application.
For example, here's my current directory tree of that folder:
C:/Users/xah/Documents/Microsoft Hardware/Macros Alt+Tab.mhm Ctrl+Alt+Tab.mhm Emerald show hide volumn.mhm show hide wireframe.mhm
The file names show up in the IntelliType interface as the macro names under the “Available Macros” box on the left. The “Emerald” folder holds macros for when i'm in the “Emerald” application. (Emerald is a viewer for Second Life.)
Each file is a XML file. When you use the IntelliType interface to create a macro, a xml file is automatically created for you. Once you created a macro thru the interface, you can edit the xml file to fine tune it. You can also just create a new xml file and it'll show up in IntelliType. When you relaunch IntelliType, the macro interface will show macros based on files in this folder.
For example, the following is the content of my macro “show hide volumn”, which is equivalent of “Ctrl+Alt+Shift+9” used for Second Life.
<?xml version="1.0" encoding="UTF-8"?><Macro> <KeyBoardEvent Down="true">29</KeyBoardEvent> <KeyBoardEvent Down="true">42</KeyBoardEvent> <KeyBoardEvent Down="true">56</KeyBoardEvent> <KeyBoardEvent Down="true">10</KeyBoardEvent> <DelayEvent>10</DelayEvent> <KeyBoardEvent Down="false">10</KeyBoardEvent> <KeyBoardEvent Down="false">42</KeyBoardEvent> <KeyBoardEvent Down="false">29</KeyBoardEvent> <KeyBoardEvent Down="false">56</KeyBoardEvent> </Macro>
The line “<KeyBoardEvent Down="true">29</KeyBoardEvent>” means the press down the key 29. The line “<DelayEvent>10</DelayEvent>” means put a delay of 10 micro seconds. The line“<KeyBoardEvent Down="false">29</KeyBoardEvent>” means release the key 29. You can find out key's code by using the interface to record keys and look at your xml file. Here's some code of the keys:
| code | key |
|---|---|
| 29 | Ctrl |
| 42 | Shift |
| 56 | Alt |
| 10 | 9 |
Here's a complete example for setting up keys for iTunes together with AutoHotKey.
Most Microsoft keyboards has a Play/Pause button. However, if you use iTunes, you will need to switch to iTunes first for that key to work. This is a pain. Also, the Microsoft Natural Ergonomic Keyboard 4000 does not have a previous/next song buttons. You might want the Favorite 4 and Favorite 5 buttons to do that. However, using IntelliType interface, it can only let you redefine Favorite button to launch folder or apps. With some registry hacking from info here, you could make them function as previous/next song buttons, however, you still need to switch to iTunes for them to work.
To solve this problem, you will need more advanced macro software, such as AutoHotKey.
How to make the Favorite 4 and Favorite 5 buttons do previous/next song?
Change the value of following registry keys:
Key: HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro\EventMapping\81\Command Value: “704” (decimal) Key: HKEY_CURRENT_USER\Software\Microsoft\IntelliType Pro\EventMapping\82\Command Value: “703” (decimal)
Then, restart the “itype.exe”. Note: if you are using iTunes, you still need to switch to iTunes first for the keys to work.
If you want it to switch song without having to switch to iTunes first, you'll need to use AutoHotKey. Use AutoHotKey to set a hotkey for iTunes, then, have your Favorite buttons send those keys.
Following is a complete standalone AutoHotKey setup. It will set your Media Previous and Media Next buttons to do previous/next song. (if your keyboard has those buttons) It will also set “Ctrl+‘numpad *’” for Play/Pause, and “Ctrl+‘numpad -’” for previou song, and “Ctrl+‘numpad +’” for next song. You do not need to switch to iTunes first for these hotkeys to work.
#SingleInstance force DetectHiddenWindows, on ;; next song button Media_Prev:: IfWinExist, ahk_class iTunes ControlSend, ahk_parent, ^{Left} Return ;; previous song button Media_Next:: IfWinExist, ahk_class iTunes ControlSend, ahk_parent, ^{Right} Return ;; Ctrl+“Numpad *” for play/pause $^NumpadMult:: IfWinExist, ahk_class iTunes ControlSend, ahk_parent, {Space} Return ;; Ctrl+“Numpad -” for prev song $^NumpadSub:: IfWinExist, ahk_class iTunes ControlSend, ahk_parent, ^{Left} Return ;; Ctrl+“Numpad +” for next song $^NumpadAdd:: IfWinExist, ahk_class iTunes ControlSend, ahk_parent, ^{Right} Return
Now, we want to set the Favorite 4 button to send the “Ctrl+‘numpad -’” signal, so that AutoHotKey will catch it and do previous song.
Following is a screenshot of Favorite 4 key setup for previous song.
You need also do similar for Favorite 5 button. (registry key 82) The “Keystroke” value should be 619 decimal, and “KeystrokeText”'s value should be “CTRL + NUM PLUS”.
The most easy way to find out what these registry values should be, is to use IntelliType interface to define the key you want thru its keystroke command, then look at the registry for that key. In fact, this is the only way. Because, for example, you can see that the key combo “Ctrl+‘numpad -’” has the code 621. You won't find 621 in any of the keycode tables here.
The next step is to redefine the Play/Pause key to send the “Ctrl+‘numpad *’” signal. This can be easily done using IntelliType interface.
Note: After a reboot of Windows, my Favorite 4 and 5 buttons stopped functioning as prev/next song for iTunes. I don't know why. The registry keys i made are still there. Haven't had time to investigate why. (after spending so many days to write this doc and hacking IntelliType, i find that the time is not worth it. Best solution is just use IntelliType for whatever features its interface provides, and use AutoHotKey separately.)
What happens to your keyboard if you don't install IntelliType?
The “itype.exe” is the core software. If this process is not running, then the special keys on your keyboard may not work. For example, the Zoom slider won't work, the My Favorites buttons won't work, the volumn increase/decrease or the Mute button won't display visual feedback (if you have turned on visual feedback). However, some of common special keys will still work, because the OS understand them. For example, the Web/Home button, Search button, Mail button, Calculator button, all still work but their actions will be system default, not whatever you have defined with IntelliType.
How to swap Cap Lock and Control?
You cannot do it with IntelliType. But you can do so using AutoHotKey. (todo: show how) See: How To Create Your Own Keybinding In Microsoft Windows, How to Swap Modifier Keys on OS X, Why You Should Not Swap Caps Lock With Control.
How to make the zoom slider do zoom in Firefox?
Add the following text:
<Application UniqueName="MozillaUIWindowClass" AppName="Firefox">
<C319 Type="5" KeySeq="ctrl add" />
<C320 Type="5" KeySeq="ctrl subtract" />
</Application>
In the “<ALL>...</ALL>” section of the file “commands.xml”. Make sure that you are editing the actual “C:\Program Files\Microsoft IntelliType Pro\commands.xml” file, not a virtualized copy at “$HOME\AppData\Local\VirtualStore\”.
How to make the Zoom slider do scroll?
They do scroll by default in FireFox. The following solution is gathered from all blogs and comments.
Open the file “commands.xml” at “C:\Program Files\Microsoft IntelliType Pro\”, then change any line:
<C319 Type="6" Activator="ZoomIn" />
to
<C319 Type="6" Activator="ScrollUp" />
and change
<C320 Type="6" Activator="ZoomOut" />
to
<C320 Type="6" Activator="ScrollDown" />
Then, restart the process “itype.exe”.
There are also lines like this for some applications:
<C319 Type="6" Activator="OutlookZoomIn" /> <C319 Type="6" Activator="IllustratorZoomin" /> <C319 Type="6" Activator="WebEditorPrintPrvZoomIn"/>
You might want to change those too.
If you want the zoom to be page up/down instead, change them into this:
<C319 Type="5" KeySeq="pageup" /> <C320 Type="5" KeySeq="pagedown" />
(Note: “Type="6"” means that the slider will function continuously, such as for zoom or scroll. “Type="5"” means it's more like one-time key press, such as page down.)
Note: C319 is for pushing the slider up (C320 is down). C319 is usually set to zoom in, but however, in the “commands.xml” file, some app have the zoom direction reversed. That is, they have C319 set to zoom out, with lines like this:
<C319 Type="6" Activator="ZoomOut" /> <C320 Type="6" Activator="ZoomIn" />
So, this means, when you replace the zoom lines in the text to scroll, you have to match these lines too.
How to have one of the Favorite key open the Control Panel
The Control Panel folder is a virtual folder. When you are asked for a path, simply give “Control Panel”.
Note, i have not mastered how IntelliType works. But after 5 months of keyboard hacking here and there on the Windows platform, i find that it's much better to spend time with AutoHotKeys instead, because it is more powerful and more complete in keyboarding features.
IntelliType allows you to remap keys to pre-defined actions. Most of the pre-defined actions are actually just key sequences. (for example, when you assign some key for undo, then press the key, then IntelliType actually sends the “Ctrl+z” keypress to the software. It does not in some way directly call a undo command in the software.) It does not let you define complicated actions that needs "if then else" statements. For example, you want a key that closes the current window, tab, dialog box, or program, or hide it. All these are similar concepts but different apps have different keys for it. Some app support “Alt+F4”, some “Ctrl+F4”, some “Ctrl+w”, and dialog windows usually support “Esc”. Some support a combination of them, some none. You want to be able to know what is the current app or window name, and choose a key combo based on that. So, you need a “if then else” on the current window's name. That is not possible with hacking IntelliType's registry or its xml files. (For more detail, see: Problems of Microsoft IntelliType)
If you are using a Microsoft keyboard, then IntelliType software is still necessary, for mapping the various special buttons and knobs on the keyboard. But for the core key actions, AutoHotKeys is much more flexible. See AutoHotKey Basics.
The most reliable way i find so far to make many of special buttons on Microsoft keyboard to work with AutoHotKeys, is to use IntelliType to map those buttons to special key combo, such as “Ctrl+Alt+F10”, then use AutoHotKey to interpret the combo “Ctrl+Alt+F10” for actions based on the current app name, window name, etc. When you make a key work as pressing key combo, just use the IntelliType interface. If IntelliType interface does not let you remap the key, such as the My Favorites buttons, then just don't use those keys. Hacking the registry is not worth while.
todo:
• find the codes/key correspondence used in “commands.xml”. In particular, find the fav buttons, play/pause, the web/home, search buttons.
Some people have blogged about IntelliType. Thanks to them, in particular Joel Bennett, which made my research easier.
This guy, Ryan (aka hihihihihi), actually saw'd off the number pad portion of the keyboard. Now, that's a hack! Source