<<<<<<<<<<<<<<<<< HOOK Hot-Key Router & Macro Facility >>>>>>>>>>>>>>>>>> >>>> Contents of README.1st <<<< Information for HOOK vs 4.0 Mon 11-06-95 ------------------------------- INSTALLATION ------------------------------- From the directory containing the UNZIPPED files as the current directory type INSTALL and follow the directions and prompts from the Install Program. !! DO NOT install this into the same directory as any current version !! !! of HOOK. If you wish to retain the same name for the directory in !! !! which to Install, then move the current content to another directory. !! !! or rename the directory containing the earlier the current version. !! !!! AFTER HOOK is installed DO NOT rename the directory or any of the !!! !!! files relating to HOOK. When HOOK is installed it copies the name !!! !!! of the directory into which it is installed into HOOK.EXE and that !!! !!! information is required when HOOK is loaded, !!! I believe this version has all the problems with switching to loaded Hot Key programs fixed as well as the maintenance of the files HOOK.INI and HOOK.HKY. It has modified the way PM type programs are handled and includes new HOOK window messages and display behavior. I have included a section in HOOK.INF (HOOK.TXT) on how HOOK works. This is a significantly Updated Version and you should read the documentation before Installing or Using It. A SIGNIFICANT new CAPABILITY has been added to HOOK. Hot Keys may now be SCHEDULED for AUTOMATIC EXECUTION at USER SELECTED TIMES on SELECTED DAY(s) of the WEEK. At the selected time on the selected day(s) the Hot Key Assignment is executed just as if the Hot Key combination had been entered from the KeyBoard. SCHEDULE Hot Keys Option This is a completely new addition which allows the user to Schedule any assigned Hot Key for execution at a specified time (hh:mm AM or PM) on any, all or selected days of the week. At the specified time the program is executed just as if the Hot Key key strokes had been entered at the Keyboard. HOOKQDLL.DLL HAS BEEN CHANGED. The change is required to accomodate a new configuration parameter. See below for those additions. HOOK.INI HAS BEEN CHANGED. In order to save the additional configuration parameters HOOK.INI has increased in size. In addition some reserve bytes have been added for potential future use. HOOK DISPLAY WINDOW Now displays messages when HOOK is loading/switching programs. Message indicates that a program is being loaded or if switching the technique used for Switching (SwitchList Handle or Task List title). USER ASSIGNABLE HOT-KEYS ADDED Two new user assignable Hot Keys have been added. This results in HOOK.HKY increasing in size by 2*278 bytes. They are 2-Char Hot-Keys Alt-Pause and Shift-Pause. In HOOK.DAT they may entered as Pse-A and Pse-S for assignment. DEFINE HOT KEYS ENTRY SCREEN This has been significantly changed to display current assignments of a Hot Key for Editing. HOOK.HKY BINARY FILE STORING HOY-KEY INFORMATION. Automatically read in when HOOK loaded and saved when HOOK unloaded. If you want to read this, use a HEX editor. BE sure and use the new one and use HOOK.DAT to read old settings back in. HOT-KEY TASK MODIFIED:Shift-Alt-UpArrow Shift-Alt-UpArrow no longer reads in HOOK.DAT. It now reads in HOOK.HKY from disk. NEW BUILT IN HOT-KEY:Shift-Ctl-UpArrow HOOK.DAT is now read in by Shift-Ctl-UpArrow. In addition HOOK.DAT is NOT automatically read in when HOOK is loaded but may be read in as indicated above. Any assignments in HOOK.DAT will overwrite those currently in effect. NEW BUILT IN HOT-KEY:Alt-Ctrl-Esc In this version of HOOK, when HOOK is loaded the 3-Key sequence Ctrl-Alt-Del that is used for rebooting is disabled (by using a DosDevIOCtl Command). In its place this Hot-Key will display a message asking "Do You Really want to REBOOT ?" and informing you that if the answer is Yes, it will re-enable Ctl-Alt-Del BUT that no HOOK files will be saved. I have included this option because the Built in Hot-Keys Shift-Alt-End and Shift-Alt-Del may sometimes be inadvertenlty hit as Ctrl-Alt-Del ( I have one it on some occasions) and this then will not allow that to happen and any attempt to reboot will give you a warning message. NB. DISABLING Ctl-Alt-Del also DISABLES Alt-Home which in a DOS window allow switching between a DOS window and DOS Full Screen. NEW CONFIGURATION OPTIONS in Shift-Alt-F2 ACTIVATED MENU. Message Display KeyPad Use Options An additional option to toggle OFF/ON the BEEP when HOOK is loaded. New Menu Option for DLL Toggle OFF/ON how HOOKQDLL treats WM_CHAR messages. Currently WM_CHAR messages indicating a Hot-Key entered from KeyBoard are NOT PASSED on to System Message Queue. This option allows that behavior to be changed. Display Scheduled Hot Keys This lists on the screen the Hot Keys that are currently scheduled and the specifics of the Schedule for that Hot Key. (see above for that new option) This version is backward compatible with earlier versions except as noted above with respect to the files HOOKQDLL.DLL, HOOK.INI and HOOK.HKY . The INSTALL program has been modified to copy the readme.1st file to the target directory as well as the two DLL files. The DLL files are now no longer in \OS2\DLL but in the directory specified as the target directory to hold the HOOK files. The only REQUIREMENT for LIBPATH is that the first entry should be ".;" , i.e. the default directory. Users booting OS/2 from a logical drive and with multiple versions existing should no longer have any problems. Just be sure that the active CONFIG.SYS has in its LIBPATH command ".;" as the first entry. All of these aspects and many more are detailed in the either of the two documenting files below. The two files HOOK.TXT and HOOK.INF contain the same information but HOOK.TXT is an ASCII text file and can be displayed with any Text Editor, List command or the DOS type command. HOOK.INF is an OS/2 PM file and can be viewed with the OS/2 view.exe program. That program is by default in the \os2 directory on the drive on which OS/2 is installed and \OS2 is almost certainly in the Path listing. To view HOOK.INF with VIEW just enter from an OS/2 command line where the default directory has HOOK.INF View hook. Either file contains instructions on Installation of HOOK as well as details about its use. If you want to use the assignments in an existing HOOK.DAT file, after this new version is installed, copy that file to the directory holding HOOK.EXE. When HOOK is loaded use Shift-Ctrl-UpArrow to read in that file. Then use Shift-Alt-DnArrow to save the assignments just readin into HOOK.HKY. Mon 11-13-95 Morton F. Kaplon >>>> END - Contents of REAME.1st - END <<<< Contents of HOOK34.ZIP FileName Description of File DOSERDLL.DLL Dynamic Load MOdule - For DOS API Error Messages HOOKQDLL.DLL Dynamic Load Module - intercepts system message queue (Updated) HOOK.DAT Sample Optional data file for hot-key assignments - read by HOOK.EXE HOOK.EXE Executable File - Executes According to Key Combinations Struck HOOK.INI Binary file read by HOOK; has configuration data for HOOK. HOOK.INF INF file displayed by VIEW.EXE - has Help/Information for HOOK HOOK.HKY Binary File Maintained by HOOK - has Hot Key Assignments HOOK.SKD Binary File Maintained by HOOK - has Hot Key Schedule Assignments HOOK.TXT ASCII File with instructions on installing and using HOOK INSTALL.EXE Complete Install of HOOK including target drive and directory. OBJOPEN.EXE Program that opens Folders from Command Line OBJOPEN.DOC Document File for OBJOPEN.EXE PLAYBACK.EXE PlaysBack Hook created Macros from Command Line PLAYBACK.DOC Document File for PLAYBACK.EXE PLAYKEYS.EXE PlaysBack Hook created KB Macros from Command line PLAYKEYS.DOC Document File for PLAYKEYS.DOC README.1ST Readme File with brief listing of changes in Vs. 4.0 TASKLIST.EXE Displays Total Content of Switch Control Structure THUNKER.DLL DLL Needed for TASKLIST.EXE - User Should Copy to \os2\dll The INSTALL program copies the 7 files hook.* listed above, the two DLL files and README.1st to the Directory and Drive specified by you at Install Time. The 6 files listed below it are 3 special programs and their documentation files. These carry out specific tasks. You should copy them to a directory of your choice (which could of course be the directory you install HOOK into). The file TASKLIST.EXE displays the content of the Switch List Control structure maintained by OS/2.Since it displays data for programs that have had the Not Visible Flag set in the structure, it will contain more listings than the Task List displayed by Ctrl-Esc. For it to be used the file THUNKER.DLL must be in the \os2\dll directory. The user should copy it to that directory. Install.EXE copies the 6 files named HOOK, the two DLL files and Readme.1st to X:\HOOKDir\ where X: is the drive ID entered into the Install Window and HOOKdir is the directory name entered (C:HOOK is default). HOOK.EXE can be started from an OS/2 command Line as X:\Hookdir\hook where X and HOOKdir are as defined above. DLL files. An additional requirmeent is that the LIBPATH statement in CONFIG.SYS must have ".;" as the first entry in it. This should be the default setting but check it nonetheless. Some users have multiple versions of OS/2 and in some cases may BOOT one of these from a Logical drive. In that case you must be sure that the CONFIG.SYS file used on the boot drive has ".;" as the first entry in the LIBPATH statement. AN OVERALL VIEW ------------------- What HOOK does and How HOOK Works ----------------------- HOOK is a program that has two major functions. HOTKEY FUNCTION:In this role, when a certain combination of Keystrokes is entered at the Keyboard, HOOK either starts a program associated (by the user via a Screen Dialogue) with that Keystroke combination OR if that program was already started by HOOK, it Switches to it to make that the active program. HOOK will open or switch to a Full Screen program from the Desktop but will not switch back from the FullScreen to the DeskTop. The user must activate the Task List (Ctrl-Esc) to return to the DeskTop from Full Screen for HOOK to be effective. The HotKeys are of two types: 1-Set by the HOOK program to effect specified tasks - these are not available to the user for assignment. 2-Assignable by the user to open/switch to any of the following types of programs: OS/2 VioType Programs Windowed or FullScreen* (text type) OS/2 PM Programs. Inherently windowed. OS/2 CMD Programs. These must be passed as a command line parameter to the OS/2 command processor. DOS Programs Windowed or FullScreen*. Includes COM EXE and BAT files, and Windows 3.x * Note the comment in the preceeding paragraph. HOOK will not Switch Back directly from FullScreen. The user must use Ctrl-Esc to get to the DeskTop from which HOOK is active or for DOS programs Alt-Home will window a Full Screen program (if it is compatible with a Windowed Session). The Keystroke combinations HOOK offers for Assignment of Programs are: (X is 0,1,.....8,9 A,B,....Y,Z) Shift-Alt-X denoted as Alt-X 36 Key combinations Shift-Ctl-X denoted as Ctl-X 36 Key combinations Alt-Ctl-X denoted as Qac-X 36 Key combinations Alt-Pause denoted as Pse-A 1 Key combination Shift-Pause denoted as Pse-S 1 Key combination Total Assignable 110 Key combinations MACRO FUNCTION:In this role, HOOK starts recording ALL Keystroke, mouse and other activity producing messages and storing it in memory. When the user indicates that recording should stop HOOK presents the User with the option of storing the data recorded in 2 files representing the data in both Binary and ASCII format; the user assigns the file prefix and the extensionns are HEX/MAC for the binary/ASCII version. A given Macro can be replayed by HOOK by loading it from Disk to Memory or by using the included program PLAYBACK.EXE to playback the Macro by using it as PLAYBACK MACRONAM.HEX either from the Command Line or assigned to a Hot Key. To accomplish these functions HOOK utilizes 2 execution units, HOOK.EXE and HOOKQDLL.DLL referred to hereafter as HOOK and DLL respectively and uses several additional files to store configuration options, the actual user defined HotKey assignments and the macro files. HOOK.INI Binary format,stores user selected configuration parameters. HOOK.HKY Binary format, stores HotKey assignments made by the user from an on Screen Dialog. HOOK.DAT ASCII file, the user may use to enter HotKey assignments. It exists for compatibility with earlier versions. UsrName.HEX Binary format, stores data for a given Macro. UsrName.MAC ASCII format, stores data for a given Macro. The DLL is the equivalent of a DOS TSR program. When HOOK is started, it loads the DLL into memory and the two functions indicated above are carrried out cooperatively by the DLL and HOOK. When HOOK is exited, the DLL is unloaded from memory. The DLL is primarily a DETECTION unit whose principal function is to monitor the system message queue and inform HOOK when certain parameters are detected in a message. HOOK is primarily an Execution unit carrying out tasks based on what the DLL detected. The DLL and HOOK communicate with each other in several ways. 1-Way Paths: from DLL -> HOOK using the System Message Queue. 2-Way Paths: a-Shared memory space between the DLL and HOOK; b-HOOK calls functions residing in the DLL passing parameters to it in registers; the DLL returns values to HOOK in registers. ------------------------------ The DLL ------------------------------- DLL means Dynamic Link Library. In this application it can be thought of as the equivalent of a TSR in DOS. That is, it is loaded into memory by HOOK when the program is called and remains there until HOOK is exited, when it is unloaded. The DLL intercepts the system message Queue. HOTKEY FUNCTION:Is the default action. It examines messages with MessageID = WM_CHAR, since it is these that carry all information about Keyboard activity and messages with MessageID = 2F43H (an undocumented message described below). MessageID = WM_CHAR For each WM_CHAR message the DLL determines the following: Did there exist any of the following Key Stroke Combinations : Shft-Alt-X X is any key with a valid Scan code Shft-Ctl-X X is any key with a valid Scan code Alt-Ctl-X X is any key with a valid Scan code Alt-Pause Shft-Pause If any of those combinations is detected the DLL Posts a Message to HOOK using MessageID = WM_USER+300H, with parameters indicating which of the 5 Key combinations was struck; the parameters are defined as: --HotKey-- --MessageID- Parm1 ----Parm2------------ Shft-Alt-X WM_USER+300H 0000H ScanCode of X Key Shft-Ctl-X WM_USER+300H 0001H ScanCode of X Key Alt-Ctl-X WM_USER+300H 0002H ScanCode of X Key Alt-Pause WM_USER+300H 0003H ScanCode of Pause Key Shft-Pause WM_USER+300H 0103H ScanCode of Pause Key It then DISCARDS that WM_CHAR message. That is, it does not pass it along to the next Queue. The reason for this is that almost all programs use Hot Key combinations of the form Alt-X and/or Ctl-X . IF the WM_CHAR messages for the Hot Key combinations above were passed along to the message queue, then every time you entered a Hot Key combination, if the active window at that time used Alt-X or Ctl-X of the Hot Key Combination, it would be activated for that program in addition to activating the HotKey and that is not a very comfortable environment in which to function. Nonetheless I have included a Configuration Option which allows the user to Toggle DISCARDING the WM_CHAR messages OFF/ON, the default being DISCARD ON. MessageID = 2F43H For each 2F43H message the DLL detects it Posts a Message to HOOK with parameters as follows: ----Parm1--- ----Parm2---- -------Parm3------ -------Parm4------ HOOK_Handle WM_USER+305H Parm3 of 2F43H msg Parm4 of 2F43H msg 2F43H is an undocumented message (in existence and unchanged since vs. 2.0) that is sent to the TaskList / SwitchList. (I use the names interchangeably). It informs the TaskList when a Program is activated and added to the TaskList and when a Program is closed and removed from the TaskList. In each case the TaskList Handle of the program is contained in Parm4 of the message and the value in Parm3 indicates what the action is for the program associated with that TaskList Handle. The relevant parameters used by HOOK are: MessageID TargetWindow --Parm3-- --Parm4-- -------Meaning-------- 2F43H TaskList 00000001H TLHandle Program Added to TaskList 2F43H TaskList 00010001H TLHandle Program Added to TaskList 2F43H TaskList 00000002H TLHandle Issued after above Case 2F43H TaskList 00000003H TLHandle Program Removed from TaskList These messages are used by HOOK to obtain the TaskList and Window Handles of newly loaded programs as well as the titles for PM type programs. When the message indicating Program Removal from the TaskList is received the asssociated HotKey has both its TaskList Handle and Window Handle set to NULL. PM Programs that are added to the Switch List with Parm3 = 00000001H use that as the basis for obtaining the Title from the Task List. PM Programs that are added to the Switch List with Parm3 = 00010001H in addition wait until a 2F43H message is received with Parm3 = 2 to update the Title from the Task List again. MACRO FUNCTION:Initiated and concluded by signal from HOOK. In addition to WM_CHAR messages it stores all messages but WM_TIMER in the shared Memory area. (These are so numerous that they would quickly exhaust that space.) MACRO RECORDING:Initiated when the DLL receives a signal from HOOK. HOOK ON sends that signal when the User hits the Keystroke combination Shift-Ctl-LeftArrow or Shift-Ctl-[. All messages in the system message queue except those with ID WM_TIMER are stored in the Common memory area by the DLL. MACRO Recording:Concluded when the DLL receives a signal from HOOK. HOOK OFF sends that signal when the User hits the Keystroke combination Shift-Ctl-RightArrow or Shift-Ctl-]. The DLL returns to HOOK the number of Messages recorded. ------------------------------ HOOK ------------------------------- Initialization:When HOOK is loaded it performs the following tasks: 1-Creates a Message Queue for HOOK. 2-Sets directory for HOOK as that where HOOK.EXE is. (this is why LIBPATH must have "." as first directory so that the DLL's are accessable) 3-Loads a DLL for Error messages from OS/2 DOS functions 4-Reads in from Disk HOOK.HKY to Memory and initializes certain parameters in the assignments therein. 5-Reads in HOOK.INI and sets configuration accordingly. 6-Determines the Command Processor used for OS/2 7-Creates a Thread for displaying messages from HOOK primarily related to Startup and Macros. 8-Creates Thread for displaying HOOK window containing Date and Time and used for Messages relating primarily to HotKey related activities. 9-Loads HOOKQDLL.DLL and establishes link with it. 10-Establishes the Input HOOK for the DLL. 11-Exchanges Initialization data with DLL. 12-Starts the Message Loop for the Queue used by HOOK. HOTKEY FUNCTION:Programs are loaded using the DOS API DosStartSession with parameters as defined by the user in an On Screen Menu when the Hotkey assignment is made and stored in a data structure. Active programs are switched to using properties of the SwitchList Control Structure maintained by OS/2. Since HOOK makes intensive use of the TaskList it is worth making some comments about the SwitchList. -- BEGIN : SwitchList Control Structure and Task List -- OS/2 for PM maintains a Data Structure called the Switch List Control Structure. There is an entry in this data structure for each ACTIVE program amd Icom-Views (Open Folders) started by OS/2 PM. This data structure's visible representation is in the so called Task List, the listing of running programs and Icon-Views, presented when Ctrl-Esc is struck. However not all active programs are visible in the Task List becauuse one of the parameters a PM program may set is it's Visibility in the Task List. Many of the programs used by OS/2 are not Visible in the task list and thus not listed. (Included in the HOOK ZIP file is a program TASKLIST.EXE that displays a listing of ALL the programs in that structure, Visible or Not in the Task List ). When a program is started it is added to the Switch List Control Structure and a variety of parameters relating to it are set. One of these of particular interest to HOOK is the Switch List Entry Handle. This handle can be used to Switch To the program if it is in the Switch List Control Structure and make it the active program. Another parameter is the program Title that appears in the Task List. This title can be Set by the program and if no title is set by the program, OS/2 uses the Name of the EXE program as the Title in the Task List Listing. For ALL but PM type programs, once the Title is set when the program is loaded, it cannot be changed. PM type programs can change the Title listing at any time and many do. PM programs may take a significant time to load, and the Task List Title entered for them is not finalized into the Switch List Control Structure until loading is complete. In fact some programs may change the title several times and even dynamically. This aspect poses a problem for HOOK which is handled by updating the Title of PM programs just prior to the unloading of HOOK as an active program. The Switch List Handles assigned by OS/2 are re-usable. The Switch List handle assigned by OS/2 to a program becomes available for re-assignment when that program is unloaded just as Window Handles are. OS/2 uses an undocumented message MessageID = 2F43H whose parameters were indicated earlier. This message informs the Task List when a program is first loaded and when it is Unloaded and contains its Task List Handle as one of its parameters. HOOK uses that information to set values in its record base for Hot Keys as indicated in a table listed above. -- END : SwitchList Control Structure and Task List -- HOOK maintains a Data Structure containing the information entered by the user when assigning Programs to HotKeys as well as Information it obtains relative to an entry from other sources. This structure consists of 110 records, each 278 bytes long. This structure is saved in HOOK.HKY. The records for Shft-Alt-X Shft-Ctl-X Alt-Ctl-X are in consecutive blocks of 36 records. The last two records are Alt-Pause and Shift-Pause in that order. The three main blocks of data are in order Shft-Alt-X Shft-Ctl-X Alt-Ctl-X. These four record blocks are referred to respectively as SAX, SCX, ACX and ALP. The elements of the Structure with their offsets into each record are: Ofst S_TotDescr 000 I ;Address for DosStartSession S_HKID 004 U ;The Hot Key X character *S_Desc 006 U ;Program Description S_AppType 060 P ;From DosQuery AppTyhpe using Prog Name and Path S_FlagByte0 061 ;Reserved S_FlagByte1 062 ;Reserved S_FlagByte2 063 ;Reserved S_Program 064 U ;Program Name and Path S_CmdLine 128 U ;Command Line Parms S_WorkDir 192 U ;Working directory S_WHandle 252 I :Window Handle of Loaded Program S_TLHandle 256 I ;TaskList Handle Obtained When Prog 1st Loaded S_Winx 260 U ;X coord Lower Left WindowCorner in Pixels S_Winy 262 U ;Y coord Lower Left WindowCorner in Pixels S_WinWidth 264 U ;Width of Window in Pixels S_WinHeight 266 U ;Height of Window in Pixels S_SessType 268 U ;Session type S_ProgFlag 270 P ;0/'P' No/Yes Program entered S_HKSTatus 271 P ;Hot Key STatus 0/'A' = Not/Yes Assigned *S_DescFlag 272 P ;0=No Desc,'D'/'3'= Desc|TaskListTitle for PM apps S_WDirFlag 273 P ;'Z' if Working Dir entered else 0 S_CLFlag 274 P ;'C' if Command Line entered else 0 275 ;Reserved 276 ;Carriage Return Line Feed Record Terminator U means Entered by User P means determined by HOOK from parameters entered I means internal Information obtained by HOOK *For PM type programs where the Task List Title may be altered by the program, this will be updated from the initial value (if the program is still active) when HOOK is activated. Event Sequence When HOOK receives a message with ID = WM_USER+300H that messeage is from the DLL and has information on the parameters of a HotKey combination. HOOK first determines if the HotKey combination is one of those used by HOOK itself and if so carries out that predefined action and awaits another message. IF the HotKey combination is not one of those used by HOOK it may be a User Assignable one. HOOK uses the Parm1 (HotKey Type) and Parm2 (KB ScanCode) to determine the offset into the record structure for that Hot Key. It checks a FLag set in the data structure (S_ProgFlag) for that HotKey to see if an assignment has been made to it. If not it does nothing, otherwise it obtains the Switch List Handle and does the following in sequence: 0-If the handle is zero it Loads the program assigned to the Hot Key and Sets a FLag indicating a Program is being Loaded by DosStartSession and the HOOK window will display the message "KB¨ Prog_Load". The actions detailed in 3 below then occur. 1-Uses the SwitchList Handle to try to switch to the program. If successful a message will be displayed in the top line of the HOOK window "KB¨ TL-Handle". 2-If the SwitchList Handle does not switch to the program it looks for a match between the TaskListTitle for that program in the Record Struucture and that in the Task List. If one is found it attempts to switch to that program. If successful a message will be displayed in the HOOK window "KB¨ TL-Title" . For PM programs the match is done for the first 8 characters of the Title strings. This is done to allow for the dynamic change of PM titles, (In all cases I am familiar with the Program name is first and text after that reflects dynamic change). The Title is used principally for those cases where HOOK was unloaded and Programs loaded by HOOK are still active. When HOOK is reloaded it will switch to those using the Task List Title. 3-If the above two actions FAIL, HOOK assumes the HotKey combination is that for a program Not Yet Loaded and uses the API DosStartSession to start the program with the parameters contained in the Data Structure. If that fails due to an error in any of the parameters an Error message is displayed, otherwise the Program is loaded and the message "KB¨ Prog_Load" is displayed in the HOOK window and a Flag is set indicating a Program has just been loaded. When any Program is loaded and added to the Task List the system sends the Task List window the message with MessageID = 2F43H with parameters as noted earlier. IF the Flag indicating HOOK loaded a program is SET, and HOOK receives a message WM_USER + 305H indicating a Program has been added to the Task List, it copies the Switch List handle obtained in Parm4 of the message to the appropriate location in the Hot Key Data Stucture. It next obtains the Task List Title for this entry and copies that to the Hot Key structure and then resets the Flag indicating loading. There is a class of PM programs that take a long time to load and/or change their titles dynamically. The title copied for those programs may not reflect the title listed in the Task List. This will not affect HOOK's behavior with respect to this HotKey while the program is active. If HOOK is unloaded and the program is active its Task List Title is uupdated so that when HOOK is reloaded it can switch to that Program. 4-Program Loaded by HOOK is unloaded. HOOK receives the message with ID WM_USER+305H with Parm3 = 3 and Parm4 = SwitchListHandle of Program Just closed. HOOK goes thru HotKey records seeking Match with Handle and sets it and its Window Handle both to NULL. MACRO FUNCTION: Initiated when User Presses Shft-Ctl-LeftArrow or Start Recording Shft-Ctl-[. The user is first presented with a message informing him/her to move to the desired starting position using either the Cursor or Mouse. When the user Presses Enter in response to the Message, then a Message "KB¨ Recording" appears in the HOOK window on the top line indicating that recording is active. HOOK calls the DLL passing parameters to it and indicating that Macro recording should begin. Keystroke and Mouse activity are recorded until Shft-Ctl-RightArrow or Shft-Ctl-] is pressed. End Recording When either of the HotKeys indicating Macro Recording should stop is received, the "KB¨ Recording" is removed from the HOOK window and HOOK calls the DLL passing parameters to it that indicate Stop Recording and receiving back the number of records recorded. A dialogue box is then presented the User requesting input for the file name prefix for the Macro just recorded. The user may choose not to save the Macro to file by selecting the Cancel option or may enter a File Name. Two files, containing the binary record (UserName.HEX) and the ASCII record (UesrName.MAC) of the Macro are then saved to disk in the directory chosen (default is the directory containing HOOK). At the end of the file dialogue a Message is displayed on the screen informing the user that the Macro (still in memory) may be played back by the HotKey combination Shft-Ctl-Ins. Saving a Macro A macro remains in memory until a new Macro is recorded. in Memory If the user decides that he would like to save that Macro, the Hot Key combination Shft-Ctl-PgDn brings up a file dialogue as above to obtain informaiton on the File Name and directory in which to store it. Play Back Macro The built in HotKey Shft-Ctl-PgUp presents the user with a file dialog box to obtain the Name of the Macro file to Load Into memory. When the user chooses the Macro and presses the OK button on the dialogue Box, the Macro is loaded into memory. It is then played back by pressing the HotKey combination Shft-Ctl-Ins. While the playback occurs the message "KB¨ PlayBack" appears in the HOOK window. When the Playback is concluded, the message is removed from the window. A Macro may also be played back using the executable file PLAYBACK.EXE by passing the name of the macro binary file (MACRONAME.HEX) to it as a command line parameter. This combination may be assigned to a Hot Key for convenience. --------------------- Content of the saved Macro Files --------------------- For each message saved by the DLL a record is created that contains the following information (in binary) stored in memory. Each of the parameters below is 32 bits (4 bytes) long and is the content of each Message in the Queue. Handle MessageID m sgParam1 msgParam2 msgTime X_ScreenP Y_ScreenP For UserName.HEX the content of the memory is saved in binary form to that disk file. For UserName.MAC each of the parameters above is converted to a Hex Number and stored as ########H. Additionally the Handle for that record is used as an input to the OS/2 API WinQuerySwitchList to get the Title (if any) from OS/2's Task List and is stored as a 24 byte string. Each message is separated from the following by a Carriage Return and Line Feed. The file contains as its first record the HEADER string: WinHandle MessageID msgParam1 msgParam2 msgTime X_ScreenP Y_ScrrenP TaskListName Handle is the Handle of the Window to whom the message is directed. MessageID defines the type of information (WM_CHAR,WM_COMMAND,etc ) msgParam1 and msgParam2 are data uniquely associated with that MessageID. msgTime is the time of the message. X_ScreenP and Y_ScreenP are the coordinates of the Pointer. ------------------------- How the PlayBack is Done ------------------------- To play back a Macro, the Macro file in HEX format (UserName.HEX) is read into memory and each message is interrogated by HOOK. What HOOK does is to take action on a limited nuymber of Message ID's. It does look at and attempt to interpret the following message IDs WM_CHAR WM_MOUSEMOVE WM_MOUSELAST WM_BUTTON1DOWN WM_BUTTON1UP WM_BUTTON1DBLCLK WM_BUTTON1CLICK WM_BUTTON1MOTIONSTART WM_BUTTON1MOTIONEND WM_BUTTON2DOWN WM_BUTTON2UP WM_BUTTON2DBLCLK WM_BUTTON2CLICK WM_BUTTON2MOTIONSTART WM_BUTTON2MOTIONEND WM_BEGINDRAG WM_ENDDRAG WM_OPEN WM_CLOSE WM_SYSCOMMAND WM_COMMAND WM_CONTROL WM_PAINT WM_USER+300h --- ID for HOOK.EXE as target WM_SIZE WM_MINMAXFRAME TaskList This is the ID for the Task List determined dynamically. The problem is that many messages associated with Mouse movements depend on the location of the Mouse Pointer on the screen. These coordinates are in the recorded message data, but unless the DeskTop is set up exactly as it was when the message was recorded, their playback can be meaningless or misleading. In a similar vein, other messages such as WM_PAINT, WM_COMMAND, WM_SYSCOMMAND,WM_CLOSE,WM_CONTROL, WM_CLOSE have in the recorded message a specific WindowHandle as their target. But those window handles are not valid at this juncture so in interpreting the Macro I have just used the window with the focus. To do a really totally faithful job of Macro Recording and Playback one would have to, at the time of Recording, obtain the precise state of the system with respect to Programs loaded, and what is on the Desktop and reinstate that condition before playing back the Macro. I have not done that. But what I have done, does do a reasonable job with respecvt to WM_CHAR messages and some mouse actions. Why HOOK ?? HOOK was designed to alleviate the need to clear up the Desktop of OS/2 in order to obtain access to Icons to load programs and to facilitate switching from one active program to another. I found myself all too frequently having to to minimize some of my active programs in order to access the Desktop to load another program that was required. Additionally I wanted a quicker way of switching to another program than using Alt-Esc to move through active programs until I came to the desired one or by accessing the Task List to select the program or my using the Mouse to activate an Icon. Conceptually then, HOOK is akin to a DOS TSR. Whereas a DOS TSR is resident in Memory, HOOK works through DLLs, DOSERDLL and HOOKQDLL.DLL are loaded into memory when HOOK is loaded. DOSERDLL contains information for display if an Error occurs using an OS/2 DOS function. HOOKQDLL monitors the message queue for WM_CHAR messages, the equivalent of a TSR hooking the KB interrupt. WM_CHAR messages contain information on Keyboard activity and HOOKQDLL, depending on the Keyboard Activity sends messages to HOOK which executes according to the key combinations struck as defined in the file HOOK.HKY (new feature) which is maintained by HOOK.EXE. OS/2 itself by default assigns a variety of actions to Keystrokes. For instance F1 brings up HELP, Alt-F4 closes an active program, Ctrl-Esc brings up the Task List,Alt-Esc and Tab-Esc switch to the next program in the Task List, Alt-F7 moves a Window, Alt-F8 resizes, Alt-F10 maximizes, Alt-F5 restores and so on. In addition each program as a rule has its own set of dedicated Keystrokes to accomplish certain actions. Editors and Word Processors are very rich in such keystroke assignments. If a Hot-Key type program is to be useful, it should be as unobtrusive as possible and not interfere with programmatic hot-keys. I originally chose the triple key combination of Shift-Alt-X, Shift-Ctrl-X, where X can be 0,....9,A,B,.....Y,Z (case insensitive) for the Hot-Keys since in my experience to date, they had been almost unused. I also used those combinations with X being keys on the Key_Pads for Hard Coded actions relating to tasks involving HOOK itself. A configuration option exists that allows these hard coded assignments to be active only on the Numeric Key Pad. I have recently added the combination Alt-Ctrl-X to the Hot Keys increasing the capability by 50 %. And at the request of a user I added Alt-Pause, and at the same time added Shift-Pause as well. These may be assigned from either the Hot Key Define Menu or from HOOK.DAT. Now for some CAVEATS. There are some editors, the E.EXE OS/2 Editor for instance as well as the Editors built into many Compiler programs that use the Shift-Ctrl-Cursor_Pad keys very heavily for Block activities and thus I have added a Toggle key, Shift-Alt-5(On KeyPad) to HOOK that allows the user to temporarily toggle its trapping actions OFF so that the total Keyboard is available to the user. That same Toggle key then re-activates HOOK so that Hot-Key switching is back ON. PM programs also make use of Mnemonic Keys when the Menu bar is active (menus accessible with Alt-F, Alt-H, etc.). If a PM program uses mnemonic keys ( Help is an example) and you have H assigned as a HOT-Key, say Shift-Alt-H, then when you press Shift-Alt-H you will get the Menu Key Option for H, but pressing it a second time will bring up the Hot-Key assignment. In addition PM programs may also use assignments to Ctrl-X (as the E edior does for X=F for the Find option). If you have a Hot-Key assigned to Shift-Ctrl-X, where X is a program defined key, then the Hot-Key will bring up that option. A quick repeat of the Hot-Key will produce its desired action. These kinds of problems do not bother non-PM programs (ASCII text editors) and similar TEXT based Non-PM programs. I have built into HOOK a configuraton option (changeable while HOOK is in use) that can modify the above behavior. HOOK works through HOOKQDLL.DLL which intercepts the message queue and looks at each WM_CHAR message. Each message has a flag that indicates whether it is a PM type application or not and the DLL tests that flag. The configuraiton option allows the DLL to take an action depending on whether that flag is set for a given WM_CHAR message. The default option is to ignore the flag. This has the consequence that the program entering key strokes and thus using Hot-Keys has the KB focus and will activate any PM program user defined keys - as noted this can be quickly overridden by entering the Hot-Key again. But one can change that behavior with the DLL configuration option so that when a PM program has the KB focus, when a Hot-Key sequence is hit, it switches the focus to the DeskTop so that the PM program's defined keys are not accessed. Whether this is desireable or not depends on the particular PM program, how one uses it and so forth. In general I find the default setting of no resetting the focus the most useful, since re-entering the hot-key if required is not very onerous and you do not lose access to a programs built in keystrokes. End of CAVEATS There are two classes of hot-key assignments in HOOK. One class is hard coded and cannot be changed by the user. The other is under the user's control and allows the user to assign specific actions to a given key combination. That assignment may be done in one of two ways. The default (new) is by filling in parameters into a menu activated by Shift-Alt-F3. An optional method is to fill in a (user maintained) ASCII Text file (HOOK.DAT) which HOOK can read in on command activated by Shift-Alt-UpArrow when HOOK is active. This method is that user by earlier versions of HOOK prior to 3.01. These two methods are not exclusive and both may be used. The HOOK.DAT file is backwardly compatible with earlier versions of HOOK. The Hot Keys assigned by filling in the parameters into the Menu are saved in the file named HOOK.HKY which is re-read every time HOOK is loaded. Any assignments read in from HOOK.DAT are saved in the same structure saved by HOOK.HKY and are thus not lost when HOOK is exited. Current values may be saved by using the Alt-Shift-DnArrow to read them to HOOK.HKY HOOK has an additional feature. It can (with some limitations) save a sequence of Keyboard and Mouse Actions so that they may be replayed. I have found this useful for establishing certain DESKTOP environments that I use repeatedly. These "Macros" may be saved to Disk and restored From disk to memory for replay. When saved to disk, the user is prompted for the name under which to save the macro and two files are saved in X:.\HOOKdir. One with the extension HEX which is the file that can be played back when loaded into memory and the other a Text file with extension MAC. The latter contains the information in the Message queue for the sequence of commands that are in the Macro. These macros may also be played back from the command line (or assigned to Hot Keys to play them back) by using PLAYBACK.EXE for general macros and PLAYKEYS.EXE for those macros containing only KB strokes. In that case the DLL setting should correspond to the Active Window having the KB focus, otherwise your playback does not go where you intend it to. HOOK communicates with the user via a small window on the desktop. I have found it useful to have this window contain the current date and time as well as to display messages from the program. The window appears as: ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ KB¨ hh:mm:ss ³ ³ Day mm-dd-yy ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The time is updated every second and the updates are maintained via a separate thread started from HOOK . There is an option in the On Line configuration to make the Window Invisible as well as options to change its size, location and colors (if Visible).The default location is the lower right corner. Messages are displayed on the first line of the display temporarily overwriting the current time. When HOOK is carrying out some special activity it will display a message in the Window reflecting that on the first line of the widow. When a Program is being switched to it will display a message indicating the method HOOK used to do that; either the Switch List Handle (TL-Handle) or the Switch List Title (TL-Title). When a Program is being loaded it will display the message Prog_Load. If a PM type program is being loaded for the FIRST time the window will flash for a period of 20 seconds (allowing time for the load to complete and to copy its Task List title). During that time HOOK will not allow you to aload another PM program or to switch back to the program being loaded if you have switched away from it. INSTALLING THE HOOK To use the Install.exe program, be sure it is in the same directory as the rest of the files included in the ZIP file. If you are installing from a floppy, make the floppy drive the active directory and be sure that OS/2 is active. You should do this from an OS/2 window. IF a PREVIOUS VERSION IS ACTIVE, UNLOAD it before installing this version. INSTALL.EXE installs this version in a directory named \HOOKdir on a drive (X:) both modifiable by the user in a Menu Entry Field. The Install program verifies the validity of the Drive selected and the length of the name entered for the directory (no longer than 8 characters). To use INSTALL just enter INSTALL from the command line where the current directory contains INSTALL,EXE and the other unzipped files. The files will be copied to the appropriate directory and if it does not exist it will be created. What INSTALL.EXE does in detail: A menu is presented with an input field of C:\hook prompting the user to accept the parameters as given or to edit them to meet his/her requirements. Both the drive letter and the length of the directory name are validated (directory name length <= 8 chars.). IF X:\HOOK\ (or the drive:\name chosen) does not exist, it will be created. If HOOK.DAT exists in X:\HOOKdir\ it will be renamed to HOOK.DAX. IF HOOK.HKY exists in X:\HOOKdir\ it will be renamed to HOOK.HKX. HOOK.DAT, HOOK.EXE, HOOK.HKY, HOOK.INF, HOOK.INI, HOOK.TXT, DOSERDLL.Dll, HOOKQDLL.DLL and README.1ST will be copied to X:\HOOKdir\. !!! FOR USERS OF VERSIONS PREVIOUS TO 3.01 !!! You should delete any current version of HOOKQDLL.DLL before beginning the installation of this version. This new version is backward compatible with HOOK.DAT BUT its primary, and the DEFAULT method of entering HOT Key Assignments is by the use of an ON SCREEN menu system, activated by Alt-Shift-F3. If you prefer to use the former method of assigning Hot Keys (i.e. via HOOK.DAT) its assignments must now be manually read in after HOOK is loaded by using the Hot-Key Shift-Ctl-UpArrow (changed from prevous versions) or making a selection from the Menu (activated by Alt-Shift-F2). After completing the installation you may substitute your current HOOK???.DAT file by copying it to X:\HOOKdir and renaming it as HOOK.DAT. BUT before doing that look at the header to the default DAT file which comments its structure for calling programs. Current DAT files can be used but there are enhancements that you may find useful. It would probably be wiser to just edit HOOK.DAT to reflect your current usage. STARTING HOOK Assume that HOOK is installed on drive X: in the directory HOOKdir. To start the program, from an OS/2 command line give the command X:\HOOKDir\HOOK or Start X:\HOOKDir\hook You could have this commandsin a CMD file as a means of starting HOOK or you could also have it in your STARTUP file. CONFIGURING THE HOOK There are various configuration parameters for the program which are stored in the file HOOK.INI which is read in by the program when it is started and which remain in effect unless changed from the configuration menu. In addition HOOK.HKY which has the User Defined Hot-Key Assignments is also read in when the program is started . User Assignments may be modified when the program is active as may the other configuration options. Hot-Key Assignments are modified by using Shift-Alt-F3 to access the Hot-Keys Menu Screen to add new assignments, delete current assignments or edit(new) current assignments. Hot-Key Assignments may also be modified by altering HOOK.DAT and then re-reading it into memory using Shift-Ctl-UpArrow. The program window may be resized and relocated by using the Mouse Pointer at the window edges to change window dimensions, thus effectively resizing and relocating the window. The ability to save those changes for the next startup are among the configuration options for the program. These options for the program are available by placing the mouse pointer anywhere on the display window and pressing the right mouse button or by pressing the key combination Shift-Ctrl-5 or Shift-Alt-F2. Either brings up the menu displayed below: HOOK Version 4.00 Quit KeyBoard Hook Select Editor to use for DAT File Edit Edit HOOK.DAT File (Updates HOOK when Edit HOOK.DAT exited) (To UPDATE while Editing : Save File then Shift-Ctl-UpArrow ) Assign Hot Keys Read In HOOK.DAT assignments for Hot Keys Save Current Hot Key Assignments to HOOK.HKY Get HOOK.HKY Assignments for Hot Keys CoPy Active PM Task List Titles to Hot-Key Descriptions Change Colors Window Options Message Display and KeyPad Use Options DLL Option Set Window Focus for PM Programs DLL Option PASS/DONT_PASS HotKey Messages ON in Message Queue Display Scheduled Hot Keys Use Ctl-Alt-Del Option Explanations: Quit KeyBoard Hook Closes the program in an orderly fashion. Select Editor to use for DAT File Edit Allows user to enter the filespec of the editor to use for editing the DAT file or to change the filespec of the default editor (E.EXE) if it is not in X:\os2\. The editor selected is saved in HOOK.INI. Edit HOOK DAT File By default uses the E.EXE editor of OS/2. It is assumed that editor is located in C:\os2. The filesper may be changed using the option listed above. (Updating the EXE file occurs when the Editor Above is Closed) The DAT file is automatically re-read into the EXE file and the appropriate buffers updated when the Editor used to modify the DAT file is closed. If one does not use this option to modify the DAT file, then the EXE may also be dynamically updated with the Key combination Shift-Alt-UpArrow. Assign Hot Keys Activates the Define Hot-Keys Menu (same as Shift-Alt-F3) Read In HOOK.DAT assignments for Hot Keys Same as using Shift-Ctl-UpArrow to read in current HOOK.DAT File Save Current Hot Key Assignments to HOOK.HKY Saves all Current Hot-Key Assignments to disk in HOOK.HKY Get HOOK.HKY Assignments for Hot Keys Reads in HOOK.HKY from Disk. This will override all current assignments in place. This is same as Shift-Alt-UpArrow. CoPy Active PM Task List Titles to Hot-Key Descriptions Many PM programs modify the Task List Title established by HOOK when the program is loaded. HOOK uses the Task List title to switch to loaded programs. Using this option will copy the Task List title established by a PM program to the Description for that program maintained by HOOK. This enables HOOK to switch to that program if other methods fail. Change Colors Presents the user with a menu allowing the selection of Foreground and Background Colors from a group of 16 options Using Push Buttons. The changes are effected immediately and are saved in HOOK.INI. þF WHITE þB þF DARKGRAY þB þF BLACK þB þF DARKBLUE þB þF BLUE þB þF DARKRED þB þF RED þB þF DARKPINK þB þF PINK þB þF DARKGREEN þB þF GREEN þB þF DARKCYAN þB þF CYAN þB þF BROWN þB þF YELLOW þB þF PALEGRAY þB Default Foreground = Blue Default Background = White In the Menu the Actual Colors are displayed instead of the Text indicating the colors. Window Options Selecting the Window Options presents 8 push buttons in 3 separate group indicated below. Select Window Options ----- Comment ----- o Window Bottom Left o Window Bottom Center o Window Bottom Right Default o Use Current Win Size/Position o Window Visibile Default o Window Not Visible o Window NotJumpable Default o Window Jumpable The choices grouped together in each of the 3 groups are mutually exclusive and only one may be chosen. The first group of 4 offers selection for the placement of the HOOK information window ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ KB¨ hh:mm:ss ³ ³ Day mm-dd-yy ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The first three place the window at the bottom of the screen at one of the three locations indicated. The fourth choice is meant to be used if none of the first three are acceptable. The user may reposition and resize the window by using the pointer to drag the sides to new locations and to resize the window accordingly. After it is positioned to your liking that selection will copy the data for the new window position to HOOK.INI and it will be used on starting up again. The second group of two is the option for the Visibility of the window. If Invisible is chosen, it is temporarily made visible to display any messages in the window. The last group sets the response to the Alt-Esc / Alt-TAb Key stroke actions. Not Jumpable means the window is not made active in response to those key strokes. Message Display and KeyPad Use Options Hook may be unloaded (Shift-Alt-Del) or unloaded and OS/2 Closed down (Shift-Alt-End). The DEFAULT is to display a Message Box for either case asking if you want to continue. This may be changed to no Message Box display with this option. Some computers have 2 Sets of Key Pads . One has numeric keys and is referred to as the W(hite) pad and the other has cursor keys and is referred to as the G(rey) Pad. The DEFAULT configuration is to have both key pads respond to the Built In Hot-Key Assignments which use the Key Pad in conjunction with the Shift-Alt/Ctrl keys. That may be changed to use only the Numeric Key pad with this option. BEEP sounded when HOOK loaded. Some users have requested this option to turn Off/On the BEEP signal when HOOK is loaded. DLL Option Set Window Focus for PM Programs The DEFAULT configuration does not change the KB Focus of the program entering Hot-Keys. This means that if a PM program has defined Alt-X or Ctrl-X combinations and you enter a Hot-Key combination that has Alt-X or Ctrl-X in it, it will activate that built in option; repeating the Hot-Key will then activate its desired action, closing the program defined action. Retaining this setting also means that Keyboard Macros will be entered into the current window as it has the KB focus. The other option changes the KB focus from the window that had the focus to the DeskTop. This means that no repeat Hot-Keys need be entered, but also playback of KB macros does not work, nor does the user have access to the programs defined option keys. In general the DEFAULT option of Window retaining the KB focus is the most useful and flexible. DLL Option PASS/DONT_PASS HotKey Messages ON in Message Queue The default setting is for HOOKQDLL not to pass the WM_CHAR messages that contain the KeyStroke Combinations Shift-Alt-X Shift-Ctrl-X ALt-Ctrl-X Alt-Pause Ctrl-Pause where X is a valid Keyboard Scan Code, to the next Message Queue. This is because when a Shift-Alt-X for example, is activated, there is also activated an Alt-X and many programs have built in Hot-Keys sensitive to such assignments. If the message were not discarded, every time you used a Hot Key containing such a combination that the Program with the Keyboard Focus (Active Program) used, you would activate that also and it is a most uncomfortable environment to work in. It is recommended that if this gives a problem for some programs, then just temporarily deactivate HOOK with the Off/On toggle initiated by Shift-Alt-5. Display Scheduled Hot Keys This option will display a Screen listing ALL the Hot Keys which have been scheduled in the format (X means not scheduled that day and hh:mm aare the hour and minutes after the hour as Scheduled) : ------------- Comment ------------- * Alt-X hh:mm AM on S M T W T F S S-A-X scheduled AM on All days of week * Ctl-X hh:mm PM on X M X W T F X S-C-X scheduled PM on Mon,Wed,Thu,Fri * Qac-X hh:mm PM on X X X W X F X A-C-X scheduled PM on Wed,Fri Pse-A hh:mm AM on X X X X X F X Alt-Pause scheduled AM on,Fri Pse-S hh:mm PM on S X X X X X S Shft-Pause scheduled PM on Sun,Sat * X : 0,1,.....9,A,B,......Z The display option allows for the display of 44 Scheduled Hot Keys. Use Ctl-Alt-Del Option This option deals with the Alternate REBOOT Option. The default value is to USE the Alternate REBOOT Option. That is, the Ctl-Alt-Esc key REBOOTS the system. When this option is ON, the Ctl-Alt-Del key sequence is disabled. This menu option will offer the User the option to Turn OFF the implementation IF it is ON and to turn it ON if the implementation is OFF. Changes made from this Menu remain in effect thru the remainder of the session while HOOK is active. When the session is ended, via Shift-Alt-End or Shift-Alt-Del the current values of these parameters are saved in HOOK.INI and these are restored for use when the program is next loaded. SELECTING THE EDITOR FOR EDITING THE DAT FILE As noted the default editor used for editing the DAT file is the E.EXE editor that is included with OS/2. The assumption is made that this is located in C:\os2 where it is placed when installing OS/2 2.0 / 2.1 or WARP. If this editor is not satisfactory or the assumption is incorrect then use this option to enter the correct drive and directory for e.exe or the editor of your choice. REBOOT Option HOOK uses the DosDevIOCTL Keyboard category, function 56H to toggle the Alt-Ctrl-Del key combination OFF/On. The first time it is called it is toggled OFF, the next time ON,etc. I have found that I sometimes inadvertently hit the Alt-Ctrl-Del sequence and have no way to recover. HOOK toggles Alt-Ctrl-Del OFF when it is loaded and ON when it is Unloaded (Shift-Alt-Del). In this version the Alt-Ctl-Esc key is a built-in Hot Key that displays a message "Do You Really Want to REBOOT ?"and gives you a Yes - No choice. IF you choose YES, then Alt-Ctl-Del is Toggled ON and HOOK is exited without saving any HOOK files (in the spirit of REBOOTING). I have found that I sometimes inadvertently hit Alt-Ctl-Del when I meant to hit Alt-Shift-Del and so I installed this SAFEGUARD. NB. Toggling OFF the Ctl-Alt-Del sequence has a side effect. The Alt-Home key combination, which in a DOS session allows switching between a window and Full Screen, is DISABLED. HOT-KEY ASSIGNMENTS-FIXED BY PROGRAM The fixed key assignments are all related to the functioning of HOOK and with one exception use the Shift-Alt or Shift-Ctrl keys in combination with the Numeric or cursor pad (default option). HARD CODED ASSIGNMENTS Explanations Shft-Alt-? Display User Defined HotKeys for Shift-Alt-X ** Shft-Ctl-? Display User Defined HotKeys for Shift-Ctl-X ** Alt-Ctl-? Alt-(Ctl-X) / Pause Hot Key Assignments ** Shft-Alt-\ Display Prog Defined HotKeys (this listing) Shft-Ctl-Esc REBOOT Option Shft-Alt-Del Unload HOOK Shft-Alt-End Unload HOOK and ShutDown System Shft-Alt-UpArrow Read HOOK.HKY into Memory Shft-Alt-DnArrow Save Current Hot Keys to HOOK.HKY Shft-Ctl-UpArrow Read HOOK.DAT into Memory Shft-Alt-Ins Open Small OS/2 Window Shft-Ctl-LeftArrow Start Macro Recording Shft-Ctl-[ Start Macro Recording * Shft-Ctl-RghtArrow End Macro Recording and Save to Disk File Shft-Ctl-] End Macro Recording and Save to Disk File * Shft-Ctl-Ins PlayBack Macro Currently in Memory Shft-Ctl-PgDn Save Current Loaded Macro to DiskFile Shft-Ctl-PgUp Load Selected Macro from Disk to Memory Shft-Alt-5(KeyPad) Toggle Hot-Keys Off/On Shft-Ctl-5 Activate PopUpMenu for Configuration Options Shft-Alt-F1 Activate On LIne Reference Window Shft-ALt-F2 Activate PopUpMenu for Configuration Options Shft-Alt-F3 Activate Hot Key Assignment Menu Right Mouse Button(On HOOK Window) PopUpMenu for Configuration Options Shft-Alt-5(KeyPad) ... Toggle Hot-Keys Off/On Press or to Exit * These options exist for use when recording macros in the E and EPM editors and similar ones which use Shift-Left|Right Cursor to Start and End copy and paste operations of text. **This display reflects the current Active Hot-Key assignments. If HOOK.DAT is read in with new assignments or new assignments are made from the Hot-Key Menu those are automatically reflected in this listing. No user intervention is required for these file displays (this is changed from earlier versions which required the user to create these displays) HOT-KEY ASSIGNMENTS-USER DEFINED There are two methods that may be used to assign Hot-Keys. The first is NEW, and employs an On Screen Menu titled Define Hot-Keys This menu is activated by the Hot-Key Alt-Shift-F3 or by selecting the Assign Hot Keys choice from the User Menum Activated by Shift-Alt-F2. The other method is backward compatible with that used in earlier versions of HOOK. It involves filling in an entry in the text File HOOK.DAT that defines the Hot Key Assignment. This file is read into HOOK by using the Hot-Key Shift-Alt-UpArrow (in earlier versions this was automatically read into HOOK when it was loaded). The Hot-Key assignments that are in place when HOOK is exited are automatically saved in the file HOOK.HKY and these are automatically read into HOOK when it is loaded. (There are options in the menu activated by Alt-Shift-F2 to save the current Hot-Keys to HOOK.HKY and to re-read HOOK.HKY into memory.) The active Hot-Key assignments are in a Record Format in HOOK.EXE, where there is a separate record for each of the possible Hot-Key Assignments. When HOOK.DAT is read into HOOK it fills out only those records for which a Hot-Key is assigned in HOOK.DAT. If an assignment exists it is over written. If HOOK.HKY is read into memory it completely overwrites the current records so that they are lost. If you want to maintain different sets of Hot-Key assignments then a given set should be Read Out to HOOK.HKY and that saved by renaming it. To read it back it would then have to be renamed back to HOOK.HKY. Alterately you could save different sets in a series of HOOK.DAT files (stored in a different directory) and copy the one you want to be active to the directory where HOOK.EXE is stored. THE DEFINE HOT-KEYS MENU SCREEN o = radio button [ ] = Entry Field [[ ]] = Push Button { } = Check Box For A/S Pause ID = A/S for Alt/Shft ------------ Hot Key type --------------- --- ID for Selected Type ---- o Shft-Alt o Shft-Ctl o Alt-Ctl o A/S-Pause ID(Digit/Char):[ ] CR Accepts Prgm. File Spec: [ ] CR Accepts o Shell Establishes o Full Screen OS/2 o Windowable(Vio) o Windowed (PM) o Full Screen DOS o Windowed DOS !! The Four Items Below are Optional !! Command Line:[ ] CR Accepts Working directory:[ ] CR Accepts Description:[ ] CR Accepts Window Loc/Size:[ ] As: xxx yyy wwww hhhh ] CR Accepts (in Pels) [( SAVE Hot Key Assignment )] [(SCHEDULE Hot Key Assignment)] [(CLEAR Selected Hot Key and EXIT)] [(CLEAR All Hot Keys and EXIT)] Cursor UP/Dn/Left/Right Keys Moves Within Groups SpaceBar or Left Mouse Button to Select Tab Key to Next Group Aborts [(EXIT)] {û} SCHEDULED The user Fills in the Hot Key Menu to assign a program to a Hot Key. The user MUST : Select a Hot Key type ; Enter a Hot Key ID in the Entry Field ; Enter the program specification (just as in the Path Field in the OS/2 Settings Menu; Select ONE of the Session Types (letting the Shell establish the type is a good safe choice). >>>> The validity of the Program Specification is not checked >>>> as the user may (as I do) just enter the name of the EXE >>>> file with its extension rather than gives its complete >>>> path specification. However the file extension MUST be >>>> included. For OS/2 this is EXE and for DOS programs it >>>> may be EXE, COM or BAT. OS/2 CMD files must be passed as >>>> Command Line Parameters to the Command Processor. There are FOUR Optional Items that may be entered: Command Line: Parameters that need to be passed on the program command line. Working directory: The default directory from which the program is loaded. Many programs look for their initialization files in the default directory. The program checks the validity of this directory. Description: This is a description to be displayed on the Task List. For non-PM programs it will be displayed preceeded by the Hot-Key assigned (Alt-X / Ctl-X / Qac-X / Pse-X). If no description is entered here then the program will display the Program File Specification in place of the Description. For PM type programs, the program may modify the Task List Title so that this will not appear on the Task List but the name entered by the Program will replace the entry by HOOK. Window Locn/Size: If the program is windowed you may specify its Location and its Initial Size (both in Pels). xxx is the X location and yyy the Y location of the Lower Left Corner of the Window referenced with respect to 0,0 as the lower left corner of the Screen. wwww is the window width and hhhh its height. Pressing the SpaceBar when [[SAVE This Hot Key Assignment]] is HiLited saves this entry and enters it into a Record in the Hot Key data structure. The two Push buttons with CLEAR in them do as indicated. Be very careful using the [[CLEAR All Hot Keys]] for that will leave you with no Hot Keys active; if you push this by accident you can read back in your latest HOOK.HKY from the Menu activates by Alt-Shift-F2. If there exist data assigned to a Hot-Key combination, then when the user selects the Hot-Key Type and Hot-Key ID and presses Enter after the ID selection, the current assignments to that combination are copied into the respective Entry fields. IF that Hot Key has been SCHEDULED (see below) then a Check will appear in the box adjacent to SCHEDULED. These current assignments may be edited and saved. HOWEVER when current assignments exist, YOU MAY NOT CHANGE THE HOT KEY TYPE OR HOT KEY ID. The program will not allow those changes. If you want to have these assignments made to another Hot Key combination, you will have to enter them into that de novo and clear the assignments to the Key you no longer want to use. It is also possible to make this swtich of Hot Keys in the HOOK.DAT file and read it back in. After the Hot Key assignment has been SAVED or if there exists a valid Hot Key Assignment, the user may SCHEDULE this Hot Key for execution at a Set Time for SELECTED days of the week by selcting the push button SCHEDULE Hot Key Assignment this will activate the following Menu for the user to enter data into. SCHEDULE EXECUTION OPTIONS MENU ================================= Each of the 110 Definable Hot Keys May be Scheduled to be Started as if the Hot Key were entered from the KeyBoard Select Hour to Run Program o AM o PM o 1 o 2 o 3 o 4 o 5 o 6 o 7 o 8 o 9 o 10 o 11 o 12 Minutes After Hour o 00 o 10 o 20 o 30 o 40 o 50 Select Day(s) of Week to Run Program { }Sun { }Mon { }Tue { }Wed { }Thu { }Fri { }Sat [(Unschedule This HotKey)] [(Unschedule All HotKeys)] [( Cancel )] [( Save and Exit )] A given Hot Key mayh be scheduled for execution for any, selected, or all days of the Week but ONLY for one time on a given day. If you wish to have the same program executed at different times on a given day then you should assign that program to Another Hot Key and Schedule that Hot Key for another time. THE SCHEDULE DATA STRUCTURE The data structure for savoing the SCHEDULE assignments consists of 110 records (one for each Hot Key), each16 bytes long, termionated with a CR LF. The definition of a record is. ;---- offsets from start of structure Hook38 SKHour equ 0 ; 0,1,2,.12 Hour of Day on AM PM basis SKMinute equ 1 ; 0,...59 Minutes Past Hour SKDay equ 2 ; a 1 in a day position indicates it is chosen SKHotKey equ 9 ; Hot Key ID Same as from DLL SKScanCode equ 10 ; Scan Code of Hot Key SKAMPM equ 11 ; AM/PM = 0/1 ; equ 12 ; 2 bytes reserved ; equ 14 ; CR LF Record separator LenSchedule equ 16 ;has same number records as numrecs USER DEFINED DATA FORMAT In HOOK.DAT User defined hot-key assignments may also be made in the text file HOOK.DAT which is in the directory X:\HOOK\ . The default file loaded by INSTALL has a series of comments in it that describe the format of making key assignments and there are a number of assignments made in that file as examples. The user can delete them, reassign them or whatever. That file is reproduced below. Please Note that when HOOK is active, any changes to HOOK.DAT may be made active by pressing Shift-Ctlr-UpArrow. IF the EDIT option was chosen from the Pop Up Menu the changes automatically are read into HOOK.EXE when the Editor is exited. Either choice re-reads this file into the Hot Key Record Structure. If a Hot Key exists that is defined in HOOK,DAT, it is overwritten, otherwise current Hot Keys are not disturbed and any Hot Keys defined in HOOK.DAT not in the Hot Key record structure are added to it. Displayed below is the content of HOOK.DAT supplied for you initially. ***************** Beginning of File HOOK.DAT ***************** ;; HOOK.DAT Key Assignment file for HOOK.EXE Thu 07-06-95 ;; ;; This file MUST be located in the directory X:\HOOK???? ;; where X and ???? were chosen by the user at install time ;; ;; NB the actuating Key strokes are Shift-Alt-X, Shift-Ctrl-X, Alt-Ctrl-X ;; ;; <<<<<<<<<<<<<<<<<<<<<<< The format is as follows >>>>>>>>>>>>>>>>>>>>>> ;; ;; A ";" indicates a comment and text from there to end of line is ignored ;; ;; Blank Lines are not allowed - place at least one ";" on any line ;; ;; There must be at least 1 space between each field and the next field. ;; ;; The first field in a line is either A#, C# or Q# indicating an assignment to ;; Shift-Alt-#, Shift-Ctrl-# or Alt-Ctrl-# where # is 0,1,2,3,4,5,6,7,8,9 or ;; AX, CX, QX indicating assignment to to Shift-Alt-X, Shift-Ctrl-X, Alt-Ctrl-X ;; where X is any letter from a .. z. ;; ;; NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW ;; To assign Alt-Pause or Shift-Pause the first field is either ;; PA for Alt-Pause or PS for Shift-Pause ;; ;; No distinction exists between LowerCase or UpperCase. ;; ;; The next field is optional - it allows the user to include a descriptive ;; text (up to 20 characters long) to describe the program. It will appear ;; in the Task List after the Alt|Ctl|Qac-X Hot Key indicator ;; The text to be included must be between @-------@ as ;; @Fox Pro 2.0@ ;; ;; The next set of (4) fields are collectively optional and allow the user ;; the ability to set the location and size of the Window. ;; They are entered as x|X### y|Y### w|W### h|H### ;; where x|X y|Y w|W h|H denote the coordinates of the lower left corner ;; of the window and w|W / h|H denotes the Width / Height of the window. ;; All sizes are given in PELS so that a set of values OK for one screen ;; resolution will appear differently for another. ;; x0 y0 w300 h400 will create a window located at the lower left corner ;; of the Screen whose size is 300 pels wide and 400 pels high. ;; ;; The next field has the following options. ;; ;; 9 means that the key will not be recognized. This can be accomplishied ;; as well by commenting that assignment out with "; ;; ;Ad means that Shift-Alt-D is not assigned ;; Ad 9 a 0 means that Shift-Alt-D is not assigned ;; the 9 must be followed by any letter a space and "0" ;; ;; OR just omitting Ad from the text also means it is not assigned ;; ;; Otherwise the field has the following meaning ;; ;; 0 Allows the Shell to establish the session type - best as a rule ;; 1 Starts program as Full Session OS/2 ;; 2 Start Program in Windowed Session for programs using Base Video System ;; 3 Start Program in Windowed Session for programs using PM services ;; 4 Start Program in Full Screen DOS session ;; 7 Start Program in Windowed DOS session ;; ;; The next field is the file spec of the program to be executed and the ;; field after that is either a "0" indicating no command line parameters ;; or the command line parameters. If the command line parameters contain ;; any spaces the command line parameters must be contained within "". ;; ;; Ae 0 c:\os2\e.exe c:config.sys ; loads the system editor included in OS/2 ;; to edit c:config.sys and assigns this ;; command to Shift-Alt-e ;; ;; Ae @Edit Config.sys@0 c:\os2\e.exe c:config.sys ; loads the system editor included in OS/2 ;; to edit c:config.sys and assigns this ;; command to Shift-Alt-e displays description ;; "Edit Config.sys" in Task List ;; ;; Generically speaking the format below assigns programfilespec to Shift-Alt-x ;; ;; Ax 0 programfilespec "program command line" ;if there are command line parms ;; ;; Ax 0 programfilespec 0 ;if no command line parms ;; ;; The programfilespec must contain the extension .COM / .EXE / .BAT ;; BAT files can be loaded just like EXE files but CMD files must be ;; passed as strings to the Command Processor. If the command processor ;; is CMD.EXE the the string must be "/C X:\dirname\fname.CMD". ;; The 4os2 command processor does not require the /C parameter. ;; ;; HOOK uses the DosStartSession Function of the OS/2 API to load programs. ;; It is documented on page 2-345 of the Control Program Functions Manual. ;; ;; DosStartSession does not like to load a CMD file directly so they must be ;; loaded with a command processor as ;; ;; A5 0 c:\os2\cmd.exe "/C abcdef.cmd" ; abcdef.CMD loaded by OS/2 command processor ;; ;; The 4os2 command processor does not require the /C parameter ;; A5 0 c:\4os2path\4os2.exe abcdef.cmd ; abcdef.CMD loaded by 4OS2 command processor ;; ;; To assign a program to a key follow the examples/rules above ;; ;; If you edit this file while HOOK is Active, press Shft-Alt-UpArrow ;; to re-read this file in and redefine the Active Set of Keys ;; ;; !!IF this file is edited from the HOOK Menu, it is automatically re-read!! ;; ;; In the Task List Shift-Alt-Key assignments are identified as Alt-X ;; In the Task List Shift-Ctl-Key assignments are identified as Ctl-X ;; In the Task List Alt-Ctrl-Key assignments are identified as Qac-X ;; ;; Please Note that As is assigned to Search and Replace Applet which may ;; not be valid for other than vs.2.1 and Cw for Windows is valid only for ;; OS/2 2.0/2.1 not for WARP!! ;; Q3 @3:OS/2 Command@ 0 c:\os2\cmd.exe 0 ;OS/2 window using OS/2 Command Processor A1 @1:OS/2 Command@ 0 c:\os2\cmd.exe 0 ;OS/2 window using OS/2 Command Processor A2 @2:OS/2 Command@ 0 c:\os2\cmd.exe 0 ;OS/2 window using OS2 Command Processor A3 @3:OS/2 FScreen@ 1 c:\os2\cmd.exe 0 ;OS/2 Full Screen using OS/2 Command Processor A4 9 x 0 ;Key not assigned A5 9 x 0 ;Key not assigned A6 9 a 0 ;Key not assigned A7 9 x 0 ;Key not assigned A8 9 a 0 ;Key not assigned A9 9 a 0 ;Key not assigned A0 9 x 0 ;Key not assigned Aa 9 a 0 ;Key not assigned Ab 9 x 0 ;Key not assigned Ac 9 x 0 ;Key not assigned Ad 9 a 0 ;Key not assigned Ae @System E Editor@ 0 c:\os2\e.exe 0 ;OS/2 e.exe system editor Af 9 x 0 ;Key not assigned Ag 9 x 0 ;Key not assigned Ah 9 x 0 ;Key not assigned Ai 9 x 0 ;Key not assigned Aj 9 x 0 ;Key not assigned Ak 9 x 0 ;Key not assigned Al 9 x 0 ;Key not assigned Am 9 x 0 ;Key not assigned An 9 x 0 ;Key not assigned Ap 9 z 0 ;Key not assigned Aq 9 x 0 ;Key not assigned Ar 9 z 0 ;Key not assigned As @Search and Seek@ 0 c:\os2\apps\pmseek.exe 0 ;OS/2 Search and Scan Applet At 9 z 0 ;Key not assigned Au 9 z 0 ;Key not assigned Av 9 x 0 ;Key not assigned Aw 9 z 0 ;Key not assigned Ax 9 z 0 ;Key not assigned Ay 9 z 0 ;Key not assigned Az 9 z 0 ;Key not assigned C1 @1:DOS Command@ 7 c:\os2\mdos\command.com 0 ;DOS window using built in DOS C2 @2:DOS Command@ 7 c:\os2\mdos\command.com 0 ;DOS window using built in DOS C3 @3:DOS FScreen@ 4 c:\os2\mdos\command.com 0 ;Full Screen using built in DOS C4 9 a 0 ;Key not assigned C5 9 a 0 ;Key not assigned C6 9 a 0 ;Key not assigned C7 9 a 0 ;Key not assigned C8 9 a 0 ;Key not assigned C9 9 a 0 ;Key not assigned C0 9 a 0 ;Key not assigned Ca 9 a 0 ;Key not assigned Cb @QBasic@ 7 c:\os2\mdos\qbasic.exe 0 ;QBasic from dos in DOS window Cc 9 a 0 ;Key not assigned Cd 9 a 0 ;Key not assigned Ce 9 a 0 ;Key not assigned Cf 9 c 0 ;Key not assigned Cg 9 b 0 ;Key not assigned Ch 9 c 0 ;Key not assigned Ci 9 c 0 ;Key not assigned Cj 9 d 0 ;Key not assigned Ck 9 e 0 ;Key not assigned Cl 9 f 0 ;Key not assigned Cm 9 c 0 ;Key not assigned Cn 9 g 0 ;Key not assigned Co 9 h 0 ;Key not assigned Cp 9 c 0 ;Key not assigned Cq 9 c 0 ;Key not assigned Cr 9 i 0 ;Key not assigned Cs 9 j 0 ;Key not assigned Ct 9 k 0 ;Key not assigned Cu 9 l 0 ;Key not assigned Cv 9 m 0 ;Key not assigned Cw@Windows 3.1@ 4 c:\os2\mdos\winos2\win.com 0 ;OS/2 DOS Win 3.1 Full Screen Cx 9 o 0 ;Key not assigned Cy 9 p 0 ;Key not assigned Cz 9 q 0 ;Key not assigned Pa 9 q 0 ;Key not assigned Alt-Pause Ps 9 q 0 ;Key not assigned Shift-Pause <***************** End of File HOOK.DAT *****************> When programs are loaded by a Hot-Key their title appears in the Task List (actuated by Ctrl-Esc) according to the following rules. IF A TITLE WAS NOT ASSIGNED USING @ASSIGNED TITLE@ then If assigned to a Shift-Alt key combination it appears as Alt-X name_as_assigned_in_field_3 where X is key assigned If assigned to a Shift-Ctrl key combination it appears as Ctl-X name_as_assigned_in_field_3 where X is key assigned If assigned to a Alt-Ctrl key combination it appears as Qac-X name_as_assigned_in_field_3 where X is key assigned In each case the string "name_as_assigned_in_field_3" contains up to a total of 24 characters from the filespec of the program to be loaded appended to "Alt-X ",to "Ctl-X " or to "Qac-X ". The reason for this is two fold. Most importantly it is because the program uses the Task List titles to determine if a program is currently active when that hot-key combination is struck and it switches to the running program. Secondly in the Task List it serves as a convenient reminder of the current hot-key assignments. The examples below reflect the Task List Title for some of the assignments above in the sample DAT file. IF THEY DID NOT INCLUDE AN ASSIGNED TITLE IN @.......@ Alt-E c:\os2\e.exe ;OS/2 e.exe system editor Alt-S c:\os2\apps\pmseek.exe ;the pmseek program Ctl-W c:\os2\mdos\winos2\win.c ;Win 3.1 (note the "om" missing) Ctl-3 c:\os2\mdos\command.com ;DOS window Please note that if the Alt-E assignment had been made as Ae 0 C:\OS2\e.exe 0 ;OS/2 e.exe system editor then its Task List title would appear as Alt-E C:\OS2\e.exe 0 IF the program had a title assigned between @ASSIGNED TITLE@ then that text would appear after the Alt-X or Ctl-X in the Task List. Programs not loaded by HOOK hot-keys will have their Task List titles reflect how the program is written. PM programs may have their Task List title reflect either the Program Name or the title that appears in their Window when loaded. In some cases the title bar is updated dynamically. The hot-keys Shift-Alt-/ ,Shift-Ctl-/ and Alt-Ctl-/ display on the screen a listing of the Hot-Key assignments in HOOK.DAT relevant to those hot keys. This screen listing is automatically read from the active listings in HOOK.EXE and displayed. This screen is removed by Esc or Shift-Alt-Esc. It is also useful to load separate window programs seamlessly so that they may be loaded and switched between with hot keys. The line below indicates this for MathCad assigned to Shift-Alt-M for OS/2 2.1 Am @Win MathCad@ 3 4os2.exe "Start /win /c e:\winmcad\mcad.exe &. exit" ;OS/2 DOS Win 3.1 Windowed Switchable The command processor defined by the OS/2 COMSPEC variable in the environment is used for the PopUp Command Window activated by the key combination Shift-Alt-Ins. HOOK.EXE may be started by placing the appropriate command in a STARTUP.CMD file, by entering it from an OS/2 Window or from a Folder Icon by creating a Program Folder and assigning the Hook location to the Menu in that folder. From the command line or startup.cmd use: Start X:\HOOKdir\HOOK IF X:\HOOKdir not in Path Start HOOK IF X:\HOOKdir is in Path It is important to remember that the status of the DLL configuration may affect the playing back of macros. In particular if the macro is a playback of keystrokes, the target window must have the focus and this means that the default DLL setting is required. RECORDING AND PLAYING BACK MACROS To begin the recording of KeyStrokes and/or Mouse Actions press Shift-Ctrl-LeftArrow or Shift-Ctrl-[. The program window will display a Window Message Prompting you with respect to your first recording action and will then display "Recording" as long as the recording is on. To conclude the recording press Shift-Ctrl-RightArrow or Shift-Ctrl-] and the window will be closed indicating recording is ended. You will also at this point be presented a file dialog box to select a name under which to save the Macro. To abort Saving the Macro just enter Esc. The availability of the optional Shift=Ctrl-[ to begin Macro recording and Shift-Ctrl-] to end recording is made to make recording and play back easier for those editors (such as e.exe, epm.exe and others) which use the Shift-Cursor keys for Text marking and Cut and Paste operations. To PlayBack the Macro just recorded press the Shift_Ctrl-Ins key and the window will display the message "Playback" while it is playing back the events recorded. A Macro may also be saved after it has been recorded (if the original prompt for saving was ignored) by pressing Shift-Ctrl-PgDn. A dialogue box will be presented prompting you for the name of the macro file to be stored. The macro is written to X:\HOOKdir with the assigned name in two forms. One form is the binary form that is playable back and has the extension HEX. The other form is in ASCII with the same name but extension MAC and is a listing of the following parameters recorded in the Macro; the values of all except TaskListName are given in HEX.(X above is the drive letter chosen by the user in Install.) Handle MessageID msgParam1 msgParam2 msgTime X_ScreenP Y_ScreenP TaskListName To play back a saved Macro, use Shift_Ctrl-PgUp to activate a dialogue box that will present the list of saved macros. When one is selected it is read into memory and is activated by Shift_Ctrl-Ins Any macro that is created or that is read into memory stays there until replaced by another and thus can be repeatedly used. If a macro is already in memory it can be played back(repeatedly) by Shift-Ctrl-Ins. Macros may also be played back from the command line using PLAYBACK.EXE for general Macros and PLAYKEYS.EXE for macros containing just KB entries. From an OS/2 command line : playback filespec or playkeys filespec where filespec is the drive:\directory\macroname.hex specification for the binary file saved by HOOK when a macro was created. Those commands may also be assigned to Hot-Keys so that frequently used Macros are readily available. Again remember that for Key Stroke macros the target window must have the focus to receive the keystrokes - this implies the DLL default configuration option. LIMITATIONS OF MACRO RECORDING The Macro recorder does not record Alt-Esc or Alt-Tab key strokes. It will record and play back messages for actions initiated by the Alt Key and then choosing options from the Control Frame Menu, such as Alt-x to maximize the window, Alt-r to restore the window, etc. If you record a macro that includes MOVING or RESIZING the window, when that aspect of the macro is entered, for reasons I do not yet understand, the system waits for you to move the cursor keys to either resize or move the window. It does record the Ctrl-Esc key sequence and its actions and other keyboard entries including the Shift-ALt|Ctrl-X keys assigned to this program and their actions and also mouse actions. It does not however faithfully play back everything recorded for reasons I also do not frankly understand. For instance if you assign to a Macro the sequence (from an OS/2 window) Help DownCursor DownCursor CR, it does not play back the DownCursor DownCursor CR sequence though it does open the Help Window. However if you save (e.g.) the sequence "Help Dir" from a command line it will play that back correctly. When you are recording anything from the Command Line, after using the Shift-Ctrl-LeftArrow (or Shift-Ctrl-[ ) key strokes to start the macro, you must use the Mouse to activate the window you were in or else an assigned Shift-xxx-xxx action to get back into that window. This is because displaying the Message "Recording" in the Hook window makes that the active window. There is a Prompt reminding the user to make the shift to the desired active window. When activating a Macro you must be careful that your setup is similar to that used when recording it, particularly if writing text is a part of the scenario - you might get the text written back in a non-intended window. Since the macros when recorded, record positions in screen coordinates, which are absolute relative to the bottom left corner, any actions depending on a mouse action such as clicking on a minimize or maximize button will be sensitive to where that button is on the screen. If a window is not displayed at exactly the same position as it was when recording, those mouse actions will not be what is intended. The macros do a good job of recording keystrokes and their playback is faithful and fast. However if the Keystrokes were recorded from a non PM window they will only play back to a non-PM window and vice versa. I find the macros most useful for storing and setting up different groups of windows. For instance I have one mode of operations where I have my editor open in two different OS/2 windows, 2 DOS windows open with different versions of FoxPro in them and an OS/2 window for command line use. I have that set of keystrokes assigned to a macro I have named to FOXLOAD.HEX and when I want to re-establish that set of windows I load it into memory using Shift_Ctrl-PgUp to select and load it and play it back with Shift-Ctrl-Ins. The KB macros (using PlayKeys.exe assigned to Hot-Keys) have been found useful by people who need to type special characters or special character sequences frequently. Finally the Buffer used to store the messages is of finite size. Each message is 28 bytes long and the buffer size is 56000 bytes and thus holds 2000 messages. If your recording exceeds the buffer size the program notifies you. The program macro PlayBack facility will now run under either OS/2 version 2.0 /2.1/WARP as it determines the Handle of the Task List Window on the Fly, in this respect it should be immune to updates. The messageID of the Task List is not documented but it is 082H and it has a fixed handle value that changed from version 2.0 to 2.1. The value is stored in the Task List Buffer at offset 8, which is where I get it on loading HOOK. Currently the macros are not played back at the speed at which they were recorded but somewhat faster. This is because it is presumed and certainly I do, that one uses Macros for convenience and speed. That sometimes gives a problem, especially if mouse movements are involved. For opening up icons on the screen I find it convenient to follow the procedure of going to the desktop, (or other window as the case may be) and clicking the left mouse button to establish the location, then press the Home key to bring you to the upper left icon of that window, and then use the cursor keys to bring you to the desired icon to open and then press enter to open it and so on. DOS WINDOWED SESSIONS and FULL SCREEN SESSIONS There are limitations to using the Macro Recorder from a DOS session. It will record and play back actions reflecting OS/2 aspects, such as using the Alt key to activate a frame menu and select an options, such as Alt-x (maximize),etc or Ctrl-Esc to activate the Task List and make a selection but it will not record ordinary keyboard entry or any activity from within a DOS session relating to the DOS software program. That is because in DOS the PM message queue is not active and normal DOS KB TSR's are required if you need to intercept Keystrokes in DOS. A similar comment holds for OS/2 Full Screen. There monitors are required to read Keyboard Activity and the PM message queue does not apply. If I need to use an application in Full Screen, then I use Ctrl-Esc to bring up the TaskList window and from there the Hot Keys are valid since you are in PM. Notwithstanding the limitations above, I have found this most useful and it is worth playing around with to understand both its utility and its limitations. FULL SCREEN APPLICATIONS INCLUDING FULL SCREEN APPLICATIONS If you have an application that you want to run in Full Screen then in HOOK.DAT so define it by entering the number 1 OR 4 in the column following the key id, AltX 1 or CtrlX 4 if you want the session to be Full Screen OS/2 OR Full Screen DOS respectively. From the Define Hot Key Menu the choice is clear. Doing it this way assigns the Task List Title the name Alt-X or Ctl-X as when loaded with the 0 option or 7 option. This means that the program is loaded Full Screen with the assigned Key Combination and if the program is already loaded, it can be switched to from the desktop by hitting its Hot-Key and if you are in the full screen mode, then pressing Ctrl-Esc brings up the Task List, which is a PM and the hot keys are active from there. This means that switching to Full Screen applications from the Desktop is the same as if they are windowed and switching back from Full Screen applications takes only 1 more Key Combination to switch to a Windowed Application. Similarly switching between Full Screen applications also takes only one more Keyboard action, the Ctrl-Esc to the Task List and then the use of the appropriate Hot-Key. Screen Resolution I have tested this program with screen resolutions of 640x480, 800x600 and 1024x768. In all three cases, ON MY System, all of the menus and screens of HOOK are contained within the display screen correctly. HOOK determines the screen resolution and adjusts its parameters accordingly. Nonethelss some users have reported problems with Menu integrity. Please let me know if such exists on your system and if so what Video Board and Monitor you are using. It is not that I can necessarily do anything about it, but at least I can build up some data base in this area. ABOUT THIS PROGRAM HOOK vs. 4.0 This program and its accompanying DLLs was written in 32 bit Assembler. The assembler used was Microsoft's MASM 6.00b and the OS/2 2.1 ToolKit and its resources were used for compiling the INF file and the resource files used. If you have any interest in obtaining the source code and how to assemble it, contact me via compuserve or at the address indicated below. The program is FreeWare. Morton F. Kaplon Wed 09-20-95 1047 Johnston Drive Bethlehem PA 18017 Voice: 610/758-9686 FAX: 610-758-9262 CompuServe ID 73457,437