# KkMenu 2.80

The original and primary purpose of the KkMenu was (and still is) to decrease the required number of icons docked in the Stardock Object Dock. During the time, a new major functionality has been added: Displaying the file system as a menu tree.

This document should help with the KkMenu installation and use.

This document covers the Stardock Object Dock version 0.95 and the KkMenu 2.80 only.

Please submit all KkMenu suggestions and/or bug reports to the KkMenu comments area at WinCustomize. I will try my best to answer there.

Before e-mailing to me and/or submitting a comment at the KkMenu comments area at WinCustomize, please read this document carrefully and go through the previous KkMenu comments.

Please e-mail any suggestions for improvements of this document to: JiriKrivanek@BetaControl.cz.

## Acknowledgments

- Thanks to Jairo Boudewyn and Luis Ballesteros for making the application icons.
Thanks to Luis Ballesteros for the beta testing and his hints and tips.
Thanks to all users for the feedback.
Thanks to Luis Ballesteros for the language correction of this document.
- Thanks to Luis Ballesteros for the default skin image.

## Content

- Legals
- Requirements
- Installation
- Creating new user defined menu
- Editing the existing user defined menu

- Adding a new menu
- Adding a new menu item
- Setting up the separator
- Setting up the submenu
- Setting up the shortcut
- Setting up the dynamic folder submenu
- Setting up the root dynamic folder
- Assigning the menu item image
- Moving and deleting

- Using with the Stardock Object Dock
- Command line arguments
- Performance hints
- What's new
- History
- To-Dos

## Legals

The KkMenu is still freeware but if you like the program, why don't you support the further development?

Until I discover any way of how to get the money into Czech Republic effectively (i.e. without a terrible bank fees), you can mail a registered letter with either the $10 or the 10EUR bank note in the envelope to this address:

`ing. Jiri Krivanek
Teyschlova 26
Brno - Bystrc
635 00
Czech Republic
`

## Requirements

The KkMenu will only work on Microsoft Windows 2000 or later systems. For more details, see please the Installation section.

## Installation

Please follow these steps to install the KkMenu.

- Download the latest release of the KkMenu from WinCustomize.

- Unzip the contents of the `KKMENU280.ZIP` archive into the following directory:
  `C:\Program Files\KkMenu\`
  Notes:
  In case the directory does not exist, please create a new one.
  In case of a non-standard system (i.e. when the system is installed on other drive than `C:`), please replace the `C:` with the appropriate letter (e.g. `D:`, `E:`, etc.).
- In Microsoft Windows 2000 only (i.e. in case of MS Windows XP, please skip this step) ensure that the `gdiplus.dll` file exists in your computer. It must be placed in the same directory where the `kkmenu.exe` is located.
  The `gdiplus.dll` can be downloaded from the Microsoft website for free. More, the `gdiplus.dll` is a part of the Stardock Object Dock installation.
  For more PC experienced users: The `gdiplus.dll` actually does not need to be placed in the same folder but the system must be able to locate it either in the system directories (like `C:\WINNT`) or in the current directory or on the `PATH`.

- The proper installation of the KkMenu should look like that:
  The directory contains three executables:
  KkMenu.exe ... the KkMenu main program.
  KkMenuEditor.exe ... the user defined menus designer.
  KkSkinner.exe ... the KkMenu skins editor utility.

- To test if the KkMenu is working properly, simply double-click the `test.bat` file. Something like this should appear:
  In any case that this simple test fails, please supply me with the error message to: JiriKrivanek@BetaControl.cz. Before mailing me please check if the error message contains the `gdiplus.dll` text (for the solution see please the steps above in this section).

## Creating new user defined menu

To create a new menu simply run the `KkMenuEditor.exe` program (please note that the `KkMenuEditor.exe` remembers the last edited menu) and press the "New menu" button.
The `KkMenuEditor.exe` should look like this:
For the instructions regarding the menu editing, see please the Editing the existing user defined menu section.

After editting your new menu, please save it:

- Press the "Save menu" or the "Save menu as" button. The following dialog appears:

- Go to the directory where you installed the KkMenu (for more details see please the Installation section) and the MENU sub-directory.
  Note: The menu `.ini` files must always be placed in the directory where you installed the KkMenu or any of its sub-directories, otherwise the `KkMenu.exe` will be unable to load it.

- Choose the title of your new menu (which will be used as the first argument of the `KkMenu.exe`, for more details see please the Command line arguments and the Using with the Stardock Object Dock sections) and press the "Save" button.

## Editing the existing user defined menu

To initiate the editing of the existing menu please (this example will regard the default `KkMenuDrives.ini`, which is included in the `KKMENU280A.ZIP` archive):

- Pop-up the menu you would like to edit and right-click it at any place. The `KkMenuEditor.exe` should automatically launch on the desired `.ini` file.
- Or you can start the `KkMenuEditor.exe`, press the "Load menu" button, go to the directory where you installed the KkMenu (for more details see please the Installation section) and the MENU sub-directory.
  Finally pick the .ini file with the menu you would like to edit.

Anyway, the following window of the `KkMenuEditor.exe` finally appears:
Please do not forget, that generally, all changes has to be saved prior closing the `KkMenuEditor.exe`.

### Adding a new menu

To add a new menu, please highlight the root (i.e. Menus) item in the menu tree and press the "Add" button (please note that the "Add" button is context sensitive - i.e. it adds different kind of item according to the highlited one). The New Menu appears:
Now, please highlight the New Menu and enter the desired menu name into the "Name" edit-box:

### Adding a new menu item

To add a new menu item, please highlight any menu item in the menu tree (e.g. My New Menu) and press the "Add" button (please note that the "Add" button is context sensitive - i.e. it adds different kind of item according to the highlited one). The New Menu appears:
Now, please highlight the New Menu Item and enter the desired menu item name into the "Name" edit-box:

### Setting up the separator

To setup the menu separator, please simply check the "Separator" radio button:

### Setting up the submenu

To setup the sub-menu, please check the "Submenu" radio button and select the required submenu in the drop down list below:

### Setting up the shortcut

To setup the shortcut menu item, please check the "Shortcut" radio button and fill in the necessary informations about your shortcut in the boxes below:
The general rules for entering the command line parameters are exactly the same as with the other system tools. The individual command line parameters are space separated. If you need to enter a single command line parameter containing one or more spaces, please enclose it with quotes (e.g. `C:\Program Files\` will be parsed as two command line parameters - `C:\Program` and `Files\` but `"C:\Program Files\"` will be parsed as a single parameter).
If you would like to explore the various parts of the windows system, please enter the `explorer.exe` into the "Shortcut" edit-box and one of the following into the "Parameters" edit-box:

- My Computer: `::{20D04FE0-3AEA-1069-A2D8-08002B30309D}`
- Recycle Bin: `::{645FF040-5081-101B-9F08-00AA002F954E}`
- Desktop: `::{00021400-0000-0000-C000-000000000046}`
- Control Panel: `::{21EC2020-3AEA-1069-A2DD-08002B30309D} (see note)`
- Printers: `::{2227A280-3AEA-1069-A2DE-08002B30309D}`
- Dial-up networking: `::{A4D92740-67CD-11CF-96F2-00AA00A11DD9}`
- Fonts: `::{BD84B380-8CA2-1069-AB1D-08000948F534}`
- Internet Explorer: `::{871C5380-42A0-1069-A2EA-08002B30309D}`
- Microsoft Outlook: `::{00020D75-0000-0000-C000-000000000046}`
- Network Neighborhood: `::{208D2C60-3AEA-1069-A2D7-08002B30309D}`
- Inbox: `::{00020D76-0000-0000-C000-000000000046}`
- Subscriptions: `::{F5175861-2688-11d0-9C5E-00AA00A45957}`
- URL History Folder: `::{FF393560-C2A7-11CF-BFF4-444553540000}`
- Briefcase: `::{85BBD920-42A0-1069-A2E4-08002B30309D}`
- Internet Cache Folder: `::{7BD29E00-76C1-11CF-9DD0-00A0C9034933}`
- ActiveX Cache Folder: `::{88C6C381-2E85-11D0-94DE-444553540000}`
- Control Panel: `::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}`

Please note, that I have taken the list above from the Aqua-Soft discussions (thanks to hydrostereo and fireball) and I have never tested if all of the items do really work. Please e-mail me in case of any inconveniences to: JiriKrivanek@BetaControl.cz.

### Setting up the dynamic folder submenu

To setup the dynamic folder sub-menu, please check the "Folder" radio button and fill the desired folder path into the "Folder" edit-box below:
Please never forget to finish the folder path with the backslash character (i.e. `'\'`).

### Setting up the root dynamic folder

To setup the root dynamic folder, please create a new menu (see please the Creating new user defined menu section), then add a single new menu (see please the Adding a new menu section) and finally enter a special menu name consisting of:

- the asterisk character (i.e. `'*'`) denoting the dynamic folder and
- the desired folder path

(e.g. `*C:\`):

Notes:

- Never forget to prefix the folder path with the asterisk character to achieve the dynamic root menu functionality (and never do it otherwise).
- Never forget to finish the folder path with the backslash character (i.e. `'\'`).
- All other menus and items of the root dynamic folder will be ignored.

### Assigning the menu item image

After you selected the desired menu item kind, you can choose an image. To assign the menu item image, please highlight the desired menu item in the menu tree (e.g. My New Menu Item) and press the ellipsis button behind the "Image" edit-box:
Using the following dialog, locate and pick the the image. Please note that the KkMenu currently supports only the PNG image formats (other formats, such as ICO, BMP, JPG, GIF etc. might also be loaded but may look crappy).
In case you selected the image which is located out of the directory where your `menu.ini` is saved, you will be prompted with the following question:
Now you have to decide if you want to gather all images of the particular menu in the same directory with your `menu.ini` file, or not. The recommended answer is "Yes". In case you answer "Yes", you will be informed about successfull copying of the image file:
Finally, the KkMenuEditor displays your new image:

### Moving and deleting

To move any menu or item, please highlight the desired item and use the "Move up" and "Move down" buttons to move it.
To delete any menu or item, please highlight the desired item and use the "Remove" button to remove it.

## Using the KkMenu with the Stardock Object Dock

To popup the KkMenu by clicking a Stardock Object Dock icon please follow the steps below.

The default skin named `KkSkinMenuAlfonso.ini` and the default menu named `KkMenuDrives.ini` are expected. Both files are included in the `KKMENU280A.ZIP` archive.

- To create a new dock shortcut, please right-click on the Dock and select the following menu:
  The new shortcut appears in the dock:

- To edit the new dock shortcut, please right-click its icon and select the following menu:
  The "Dock Item Properties (Shortcut)" dialog appears:

- Change the item image and the title to desired values.

- Press the "Browse..." button and using the following dialog pick the KkMenu.exe program:

- Finally write the following text into the "Arguments" edit-box:
  `KkMenuDrives.ini KkSkinMenuAlfonso.ini`
  Please note that there might be three more arguments supplied with the "Arguments" edit-box. For more details see please the Command line arguments section.

- Thus the "Dock Item Properties (Shortcut)" dialog now appears like this:

- To test your new shortcut simply left-click its icon. If everything went well then the following menu appears:

- Similarly, any menu can be added to this Dock icon.

## Command line arguments

The KkMenu command line looks like this (for the working example see explore please the content of the `test.bat` file):

`KkMenu.exe menu_file.ini skin_file.ini [delay [x y]]`

This means that the KkMenu has two mandatory and up to three optional arguments:

`menu_file.ini skin_file.ini [delay [x y]]`

This is a comprehensive description of all arguments:

- `menu_file.ini` ... is the mandatory reference to a file which contains the user menu specification.

- `skin_file.ini` ... is the mandatory reference to a file which contains the skin-to-be-used specification.

- `delay` ... is the optional time in tenths of milliseconds (i.e. *10ms) of the submenu auto-opening delay.
  Please note that the folder submenu can take quite long time to load (depends on the computer speed and the number of files and directories in the folder).
  If not supplied then the default value of 400ms takes place.

- `x y` ... is the optional explicit specification of the root menu position.
  If not present then the menu automatically places to the current mouse cursor position.
  Please note that if present then the `delay` parameter MUST be also specified.

## Performance hints

There are two bottlenecks in the KkMenu performance. Both of them has to be considered separately.

1. The KkMenu loading time.
   This depends on the overall speed of your PC as well as on the amount of your RAM.
   The KkMenu does not reside in the memory; in other words, it completely reloads everytime you want to pop it up. Just try to imagine what the KkMenu must do before showing the menu to you:
   - Load and parse the `menu.ini` file.
   - Load and prepare all the images of your menu items.
   - Load and parse the `skin.ini` file.
   - Load and prepare the skin image.
   - Load and prepare the sounds.
   - More, in case of the dynamic folder menu, all the files and sub-directories of the requested directory must be scanned.
   - Even more, in case of the dynamic folder menu, every particular file and directory has its icon which needs to be obtained from the MS Windows Shell. Actually I significantly optimized this by internal cashing of the images.
   This simply consumes a time. See please the To-Dos section to learn my plans of how to speed this up.

2. The KkMenu re-drawing speed.
   The KkMenu uses some special feature called Layered Windows. The Layered Windows was originally intended for a small but smooth graphical animations. Every animation frame expects the repainting of the entire Layered Window. KkMenu uses the Layered Windows a bit different. I.e. the KkMenu is not a small graphic, actually it can be quite large - and consequently slow. Please note that without Layered Windows there would be impossible to implement the shadows and transparency effects which make the KkMenu so eye-candy (no! I have not omitted the DirectDraw which is terribly complicated to use and more, which is unstable, unreliable and not-easy-to-port to other PCs). The graphical performance would probably be much better on XP based PCs equipped with the graphic card supporting the HW accelerated per-pixel alpha blending.

## What's new in Kk Menu 2.80 - 2003-07-18

- Included tutorials.
- Added folders opening with mouse double clicks.
- In case of zero shadow width, drawing the texts using standard methods (instead of beautified). This should enable the Type 1 fonts to be drawn correctly.
- Added three new (optional) command line parameters. For more details see please the Command line arguments section.
- The menu item separator can also have an image.
- Added the "execute in directory" parameter to the shortcut. It still needs to be tested, let me know if it does not work properly.
- The dynamic (folder) menu can now be placed in the root. To create the dynamic root menu see please the Creating the user defined menu section.
- The submenu does not close if the border of any menu is pointed to any more.
- The "access violation" bug has been removed. As the bug was not regularly reproducible, this still needs to be tested by the users.
- The dropdown list of installed fonts added to the KkSkinner.
- Fixed a number of bugs as well as brought new bugs with new functions.

## History

### Kk Menu 2.70 - 2003-06-27

- The menu texts can have various shadows.
- The menu content scrolling now supports the mouse wheel and normal left-clicking.
- The KkSkinner now supports the "reset canvas offset" feature.
- The KkSkinner now draws the frame selections correctly.
- The submenu auto-opening is delayed.
- Added sounds support (to disable it simply remove/rename wav files).
- Improved shadows of my aqua skin.
- Fixed some other bugs (including WWW shortcuts) as well as raised new bugs with new functionality.

### Kk Menu 2.50 - 2003-06-25

- Added the dynamic folders.
- Fixed number of bugs.
- Many new bugs raised by adding a new feature.

### Kk Menu 2.01 - 2003-06-18

- Added the simple menu editor.
- The image files need not be located at the menu directory any more.
- Fixed number of bugs.

### Kk Menu 2.00 - 2003-06-16

- Updated the skin engine.
- Added support for submenus.
- Slightly tweaked the graphics performance.
- Added a simple skin editor.

## To-Dos

The following problems still have to be solved and the new features still have to be implemented.

- Solve the problem with crapy XP icons (still do not know how to).
- Enable to configure the show/hide dynamic menus icons.
- Add the menu caption.
- Try to speedup the dynamic menu openning by keeping the icons database (this may help but may not).
  Another reason for creating the database would be the possibility to "replace" the system icons with the user supplied icons.
- Try to speedup the dynamic menu openning by some sort of a sophisticated folders tree preloading.
- Generally, as soon as the Object Dock plugins are available the KkMenu should be converted into the plugin which:
  - Should shorten the loading time as the KkMenu will be pre-loaded (i.e. loaded all the time, since the Stardock Object Dock startup).
  Will bring many new problems (including less stability of both the KkMenu and the OD as both of them will share a single program space).
  Will increase the memory requirements as the KkMenu will be loaded all the time.

- May be, implement some sort of plugin interface into the KkMenu.
- Add the keyboard support.
- Repai the crappy icon of the `KkMenu.exe`.