home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / hook57.zip / hook.inf (.txt) < prev    next >
OS/2 Help File  |  1997-10-05  |  97KB  |  2,768 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Contents of Readme.1st ΓòÉΓòÉΓòÉ
  3.  
  4. Information for HOOK  Vs. 5.70
  5.  
  6. ------------------------------- INSTALLATION -------------------------------
  7.  
  8. From the directory containing the UNZIPPED files as the current directory
  9.  
  10.   type  INSTALL
  11.  
  12. and follow the directions and prompts from the Install Program.
  13.  
  14. !! DO NOT install this into the same directory as any current version   !!
  15. !! of HOOK. If you wish to retain the same name for the directory in   !!
  16. !! which to Install, then move the current content to another directory. !!
  17. !! or rename the directory containing the earlier the current version.  !!
  18.  
  19. !!! AFTER HOOK is installed DO NOT rename the  directory or any of the  !!!
  20. !!! files relating to HOOK. When HOOK is installed it copies the name  !!!
  21. !!! of the directory into which it is installed into HOOK.EXE and that  !!!
  22. !!!      information is required when HOOK is loaded,        !!!
  23.  
  24. I believe this version has all the problems with switching to loaded
  25. Hot Key programs fixed as well as the maintenance of the files
  26. HOOK.INI and HOOK.HKY. It has modified the way PM type programs
  27. are handled and includes new HOOK window messages and display behavior.
  28. When a Program is FIRST loaded by HOOK, the HOOK window will FLASH and
  29. display the Message HOOK BUSY until the critical part of the program load
  30. has occured. When the HOOK window stops flashing then it is safe to active
  31. another HotKey.  The time for a Program to Load is highly dependent on
  32. the particular program and happen almost instantaneously or take seconds
  33. to complete. This version of HOOK attempts to serialize the loading of
  34. programs so that a new program load is not started until the current
  35. program being loaded has completed it load.
  36.  
  37. >>>  Built In HotKey to Inactivate HotKeys now is Shift-Ctrl-SpaceBar  <<<
  38. >>>   This is a change from  Shift-Alt-5 which is no longer used   <<<
  39.  
  40. NB:There is now an option to Turn Off the  Beeps accompanying the
  41.   Flashing. HOOK Window when a Program is Loaded.
  42.  
  43. There are some very few programs that do not install into the Task List.
  44. Since HOOK uses the Task List for its information on Program Loading and
  45. Unloading these cause a problem. That is handled by the use of a Timer.
  46. When any HOOK program is loaded, a Timer is started that turns off the
  47. Flashing Window and resets some other crucial parameters of HOOK so that
  48. it will continue to function normally. This time delay is set at 10
  49. seconds.
  50.  
  51. I have included a section in HOOK.INF (HOOK.TXT) on how HOOK works.
  52.  
  53. This is a significantly Updated Version and you should read the documentation
  54. before Installing or Using It.
  55.  
  56. Significant Capabilities have been added to HOOK.
  57.  
  58. New  A mapping of the HotKey Combinations has been made to create an
  59. 5.7  option to the Shift-Alt-X,Shift-Ctl-X,Alt-Ctl-X that is just a
  60.    two key combination Key-X. The purpose is to by pass conflicts
  61.    with program defined combinations using Alt-X or Ctl-X keys.
  62.    The current combinations are still in effect but the new Key-X
  63.    combinations can be used in place of them.
  64.  
  65.    The mappings are:  Shift-Alt-X  ->  ScrollLock-X
  66.              Shift-Ctl-X  ->   NumLock-X
  67.               Alt-Ctl-X  ->    Pause-X
  68.  
  69.    Keyboard handling is done so that if the alternates are used,
  70.    their state (and the LED state) is maintained.
  71.  
  72. >>   This modification makes the use of the Alt-Pause,Shift-Pause
  73. >>   unnecessary but it is still supported. However, the addition of
  74. >>   the Pause Key as a Hot-Key makes its use with Alt/Shift cumbersome
  75. >>   requiring multiple entries to access it. Its use is not recommended.
  76.  
  77. NEW  A PASTE mode has been added to HOOK. The built in HotKey
  78. 5.7  Shft-Alt-SpaceBar toggles this mode On/Off. When the PASTE Mode is
  79.    Active the HOOK oowindow Flashes and the Title Bar is changed to
  80.    display PASTE.
  81.  
  82.    When ON the HotKeys (user defined) PASTE user defined text into
  83.    the current window. The text to paste is defined by the User using
  84.    the same HotKey sequences as for the normal Hot-Key operation and
  85.    activated by the HotKey assigned to that Text.
  86.  
  87.    The Text string, is in a formatted form using <...> to allow the
  88.    inclusion of various Control Keys (in general these are recognized
  89.    only in PM windows) and the total string length is up to 296
  90.    Characters. Each string may have a Description attached to it and
  91.    these descriptions can be displayed using the same key
  92.    combinations (in the Paste Mode) as used for the Normal HotKeys.
  93.  
  94. NEW  HOOK will read in a formatted Text File that allows Control type
  95. 5.5  keys to be pasted into PM windows(that accept text). The same
  96.    type of formatting can also be assigned to a HotKey if it is
  97.    preceeded by a ':'. The formatting is of the form <KeyName>
  98.    where KeyName is usually the label on the Keyboard. Included
  99.    also is a <Wait> and a <DosBeep> option formatted as
  100.    <Wait ###.###> and <! freq,duration>. There is also a comment
  101.    option formatted as <* Comment>
  102.  
  103.    Reading in the formatted Text File is initiated by Shift-Alt-F5
  104.    which brings up a FileDialog Window to obtain the name of the file.
  105.  
  106.    See the OnLine Help File Under  HOT-KEY Assignments-Fixed by Program
  107.  
  108. NEW  An ICON to start HOOK will now be installed by the INSTALL Program.
  109. 5.0
  110.  
  111. REDESIGN of Access to HotKey Menu for Assigning HotKey
  112.    Shift-Alt-F3 now brings up Window Prompting User to Type In
  113.    Hot-Key to Assign/Edit and identifies HotKeys
  114.  
  115. ASSIGN HotKey to Window on DeskTop (OS/2 PM and TEXT only)
  116.    Assigned to Hot-Key Shift-Alt-F9
  117.  
  118. CLOSE All Program Started by HOOK - Assigned to Shift-Ctrl-Del
  119.    This option will close all programs that were loaded from a
  120.    HOOK Hot Key.
  121.  
  122. CLOSE Active Program - Assigned to Alt-Ctrl-End
  123.    This will close the Active Window (PM,OS/2 or DOS)
  124.  
  125. PASS  STARTUP HOT KEY to HOOK to Call After Loaded
  126.     When Hook is loaded a HotKey to Execute by HOOK can be passed
  127.     to HOOK on the Command Line to Execute after HOOK is loaded.
  128.  
  129. PASTE TEXT STRINGS INTO Windows
  130.     Text Strings may be assigned to HotKeys and when that HotKey is
  131.     struck the assigned text is pasted into the window with the
  132.     Keyboard Focus. There are two options for this. One pastes very
  133.     rapidly and the other with a very small time delay between
  134.     characters om the string.
  135.  
  136. EXECUTE SEQUENCES OF HOT Keys
  137.     This is a macro like capability that does not require recording.
  138.     A sequence of HotKeys may be assigned to a single HotKey and all
  139.     will be executed when that HotKey is struck. BE sure and read
  140.     the documentation on this.
  141.  
  142. SCHEDULE Hot Keys Option
  143.     This is a completely new addition which allows the user to
  144.     Schedule any assigned Hot Key for execution at a specified
  145.     time (hh:mm AM or PM) on any, all or selected days of the
  146.     week. At the  specified time the  program is executed just
  147.     as if the Hot Key key strokes had been entered at the Keyboard.
  148.  
  149.   IN ADDITION PLEASE NOTE THE FOLLOWING CHANGES FROM EARLIER VERSIONS
  150.  
  151. MACRO RECORDING now omits WM_MOUSEMOVE messages.
  152.      This speeds up playback and loses nothing since those messages
  153.      just display the mouse pointer moving from one location to
  154.      another. The actions at the end of that are unchanged.
  155.  
  156. MACRO PLAYBACK started by Shift-Ctrl-Ins within HOOK may be terminated
  157.      by pressing the Esc Key.
  158.  
  159. PLAYKEYS.EXE IS NO LONGER INCLUDED.
  160.      The format of this program is not compatible with the new
  161.      installation of HOOK BUT more importantly, its task has been
  162.      superseded by the PASTE TEXT STRINGS INTO Windows option.
  163.  
  164. HOOKQDLL.DLL HAS BEEN CHANGED.
  165.      The change is required to accomodate a new configuration parameter.
  166.      See below for those additions.
  167.  
  168. HOOK.INI HAS BEEN CHANGED.
  169.      In order to save the additional configuration parameters HOOK.INI
  170.      has increased in size. In addition some reserve bytes have been
  171.      added for potential future use.
  172.  
  173. HOOK DISPLAY WINDOW
  174.      Now displays messages when HOOK is loading/switching programs.
  175.      Message indicates that a program is being loaded or if
  176.      switching the technique used for Switching .i.e.SwitchList Handle.
  177.      (the Task List title is no longer used by HOOK).
  178.  
  179. USER ASSIGNABLE HOT-KEYS ADDED
  180.      Two new user assignable Hot Keys have been added. This results
  181.      in HOOK.HKY increasing in size by 2*278 bytes. They are 2-Char
  182.      Hot-Keys  Alt-Pause and Shift-Pause. In HOOK.DAT they may
  183.      entered as Pse-A and Pse-S for assignment.
  184.  
  185. DEFINE HOT KEYS ENTRY SCREEN
  186.      This has been significantly changed to display current
  187.      assignments of a Hot Key for Editing.
  188.  
  189. HOOK.HKY BINARY FILE STORING HOY-KEY INFORMATION.
  190.      Automatically read in when HOOK loaded and saved when HOOK
  191.      unloaded. If you want to read this, use a HEX editor.
  192.  
  193.      BE sure and use the new one and use HOOK.DAT to read old
  194.      settings back in.
  195.  
  196. HOT-KEY TASK MODIFIED Shift-Alt-UpArrow
  197.     Shift-Alt-UpArrow no longer reads in HOOK.DAT. It now reads in
  198.     HOOK.HKY from disk.
  199.  
  200. NEW BUILT IN HOT-KEY:Shift-Ctl-Del
  201.     This Hot-Key will CLOSE ALL Programs Started using HOOK.
  202.     It DOES NOT close HOOK. This is a quick way to clean the
  203.     Desk Top.
  204.  
  205. NEW BUILT IN HOT-KEY Shift-Ctl-UpArrow
  206.     HOOK.DAT is now read in by Shift-Ctl-UpArrow. In addition
  207.     HOOK.DAT is NOT automatically read in when HOOK is loaded but
  208.     may be read in as indicated above. Any assignments in HOOK.DAT
  209.     will overwrite those currently in effect.
  210.  
  211. NEW BUILT IN  HOT-KEY Alt-Ctrl-Esc
  212.     In this version of HOOK, when HOOK is loaded the 3-Key sequence
  213.     Ctrl-Alt-Del that is used for rebooting is disabled (by using a
  214.     DosDevIOCtl Command). In its place this Hot-Key will display a
  215.     message asking "Do You Really want to REBOOT ?" and informing
  216.     you that if the answer is Yes, it will re-enable Crl-Alt-Del
  217.     BUT that no HOOK files will be saved. I have included this option
  218.     because the Built in Hot-Keys Shift-Alt-End and Shift-Alt-Del
  219.     may sometimes be inadvertenlty hit as Ctrl-Alt-Del ( I have one it
  220.     on some occasions) and this then will not allow that to happen
  221.     and any attempt to reboot will give you a warning message.
  222.  
  223.     NB. DISABLING Ctl-Alt-Del also DISABLES Alt-Home which in a DOS
  224.     window allow switching between a DOS window and DOS Full Screen.
  225.  
  226.     Some problems may have occured with using OBJOPEN or PLAYBACK
  227.     because of some inconsistencies in Command Line formatting
  228.     between the 4OS2.EXE COMMAND PROCESSOR (which is what I use)
  229.     and CMD.EXE (the default from IBM). These have now been fixed.
  230.  
  231. NEW CONFIGURATION OPTIONS in Shift-Alt-F2 ACTIVATED MENU.
  232.     BEEP accompanying Flashing Window when Program Loaded
  233.      An option is included to turn this OFF or ON(default)
  234.  
  235.     Message Display KeyPad Use Options
  236.      An additional option to toggle OFF/ON the BEEP when HOOK
  237.      is loaded.
  238.  
  239.     New Menu Option for DLL
  240.      Toggle OFF/ON how HOOKQDLL treats WM_CHAR messages. Currently
  241.      WM_CHAR messages indicating a Hot-Key entered from KeyBoard
  242.      are NOT PASSED on to System Message Queue. This option allows
  243.      that behavior to be changed.
  244.  
  245.     Display Scheduled Hot Keys
  246.      This lists on the screen the Hot Keys that are currently
  247.      scheduled and the specifics of the Schedule for that Hot Key.
  248.      (see above for that new option)
  249.  
  250. This version is backward compatible with earlier versions except as
  251. noted above with respect to the files HOOKQDLL.DLL, HOOK.INI  and
  252. HOOK.HKY .
  253.  
  254. The INSTALL program has been modified to copy the readme.1st file to
  255. the target directory as well as the two DLL files. The DLL files are
  256. now no longer in \OS2\DLL but in the directory specified as the target
  257. directory to hold the HOOK files. The only REQUIREMENT for LIBPATH is
  258. that the first entry should be  ".;"  , i.e. the default directory.
  259.  
  260. The Install program will now accept any valid directory name sequence
  261. up to 60 characters (including the drive  specificaton) in length.
  262.  
  263. Users booting OS/2 from a logical drive and with multiple versions
  264. existing should no longer have any problems. Just be sure that the
  265. active CONFIG.SYS has in its LIBPATH  command ".;" as the first entry.
  266.  
  267. All of these aspects and many more are detailed in the either of the
  268. two documenting files below.
  269.  
  270. The two files  HOOK.TXT and HOOK.INF contain the same information but
  271. HOOK.TXT is an ASCII text file and can be displayed with any Text Editor,
  272. List command or the DOS type command.
  273.  
  274. HOOK.INF is an OS/2 PM file and can be viewed with the OS/2 view.exe
  275. program. That program is by default in the \os2 directory on the
  276. drive on which OS/2 is installed and \OS2 is almost certainly in the
  277. Path listing. To view HOOK.INF with VIEW just enter from an OS/2 command
  278. line where the default directory has HOOK.INF   View hook.
  279.  
  280. Either file contains instructions on Installation of HOOK as well as
  281. details about its use.
  282.  
  283. If you want to use the assignments in an existing HOOK.DAT file, after
  284. this new version is installed, copy that file to the directory holding
  285. HOOK.EXE. When HOOK is loaded use Shift-Ctrl-UpArrow to read in that file.
  286. Then use Shift-Alt-DnArrow to save the assignments just readin into
  287. HOOK.HKY.
  288.  
  289. Thu  06-06-96
  290.  
  291. Morton F. Kaplon
  292.  
  293.  
  294. ΓòÉΓòÉΓòÉ 2. Contents of HOOK57.ZIP ΓòÉΓòÉΓòÉ
  295.  
  296. FileName            Description of File 
  297. DOSERDLL.DLL        Dynamic Load MOdule - For DOS API Error Messages 
  298. HOOKQDLL.DLL        Dynamic Load Module - intercepts system message queue 
  299.                     (Updated) 
  300. HOOK.DAT            Sample Optional data file for hot-key assignments - read by 
  301.                     HOOK.EXE 
  302. HOOK.EXE            Executable File - Executes According to Key Combinations 
  303.                     Struck 
  304. HOOK.INI            Binary file read by HOOK; has configuration data for HOOK. 
  305. HOOK.INF            INF file displayed by VIEW.EXE - has Help/Information for 
  306.                     HOOK 
  307. HOOK.HKY            Binary File Maintained by HOOK - has Hot Key Assignments 
  308. HOOK.PST            Binary File Maintained by HOOK - has PASTE Assignments 
  309. HOOK.SKD            Binary File Maintained by HOOK - has Hot Key Schedule 
  310.                     Assignments 
  311. HOOK.TXT            ASCII File with instructions on installing and using HOOK 
  312.                     (similar to INF file) 
  313. INSTALL.EXE         Does complete Install of HOOK including target drive and 
  314.                     directory. 
  315. KEYBD.ICO           Icon Bitmap for a KeyBoard 
  316. OBJOPEN.EXE         Program that opens Folders from Command Line 
  317. OBJOPEN.DOC         Document File for OBJOPEN.EXE 
  318. PLAYBACK.EXE        PlaysBack Hook created Macros from Command Line 
  319. PLAYBAKF.EXE        PlaysBack Hook created Macros from Command Line FASTER 
  320. PLAYBACK.DOC        Document File for PLAYBACK.EXE and PLAYBAKF.EXE 
  321. README.1ST          Readme File with brief listing of changes in Vs. 5.70 
  322. TASKLIST.EXE        Displays Total Content of Switch Control Structure 
  323. THUNKER.DLL         DLL Needed for TASKLIST.EXE - User Should Copy to \os2\dll 
  324.  
  325.  The INSTALL program copies the 8 files hook.* listed above, the two DLL  files 
  326. and README.1st to the Directory and Drive specified by you at  Install Time and 
  327. then establishes an ICON for HOOK on the desktop. 
  328.  
  329.  The 5 files listed below it are  special programs and their  documentation 
  330. files. These carry out specific tasks.  You should  copy them to a directory of 
  331. your choice (which could of course be  the directory you install HOOK into). 
  332.  
  333.  Install.EXE copies the 7 files named HOOK, the two DLL files and  Readme.1st 
  334. to X:\HOOKDir\ where X: is the drive ID entered into the  Install Window and 
  335. HOOKdir is the directory name entered (C:HOOK is  default). X:\HOOKdir can be 
  336. up to 60 characters in length. 
  337.  
  338.  The file TASKLIST.EXE displays the content of the Switch List Control 
  339. structure maintained by OS/2.Since it displays data for programs that  have had 
  340. the Not Visible Flag set in the structure, it will contain  more listings than 
  341. the Task List displayed by Ctrl-Esc. For it to  be used the file THUNKER.DLL 
  342. must be in the \os2\dll directory. The  user should copy it to that directory. 
  343.  
  344.  HOOK.EXE can be started from an OS/2 command Line as  X:\Hookdir\hook  where X 
  345. and HOOKdir are as defined above. An additional requirmeent is  that the 
  346. LIBPATH statement in CONFIG.SYS must have ".;" as the first  entry in it. This 
  347. should be the default setting but check it  nonetheless. 
  348.  
  349.  Some users have multiple versions of OS/2 and in some  cases may BOOT one of 
  350. these from a Logical drive. In that case you must  be sure that the CONFIG.SYS 
  351. file used on the boot drive has ".;" as the  first entry in the LIBPATH 
  352. statement. 
  353.  
  354.  
  355. ΓòÉΓòÉΓòÉ 3. AN OVERALL VIEW OF HOOK ΓòÉΓòÉΓòÉ
  356.  
  357.  
  358.   Hook has two major functiona
  359.  
  360.   One is that of a Hot-Key Manger.
  361.  
  362.     In this role, when a certain combination of Keystrokes
  363.     is entered at the Keyboard, HOOK either starts a program
  364.     associated (by the user via a Screen Dialogue) with that
  365.     Keystroke combination OR if that program was already
  366.     started by HOOK, it Switches to it to make that the
  367.     active program. HOOK will open or switch to a Full
  368.     Screen program from the Desktop but will not switch back
  369.     from the FullScreen to the DeskTop. The user must
  370.     activate the Task List (Ctrl-Esc) to return to the
  371.     DeskTop from Full Screen for HOOK to be effective.
  372.  
  373.     The HotKeys are of two types:
  374.  
  375.     1-Set by the HOOK program to effect specified tasks - these
  376.      are not available to the user for assignment.
  377.  
  378.     2-Assignable by the user to open/switch to any of the
  379.      following types of programs:
  380.  
  381.           OS/2 VioType
  382.                                         Programs
  383.                                                                       Windowed or FullScreen* (text type)
  384.           OS/2 PM
  385.                                         Programs
  386.                                                                       Inherently windowed.:
  387.                                                                       lm margin=5.OS/2 CMD
  388.                                         Programs
  389.                                                                       These must be passed as a command line parameter to the OS/2 command processor.
  390.           DOS
  391.                                         Programs
  392.                                                                       Windowed or FullScreen*.Includes COM EXE and BAT files, and Windows 3.x
  393.  
  394.           * Note the comment in the preceeding paragraph. HOOK
  395.            will not Switch Back directly from FullScreen. The
  396.            user must use Ctrl-Esc to get to the DeskTop from
  397.            which HOOK is active or for DOS programs Alt-Home
  398.            will window a Full Screen program (if it is
  399.            compatible with a Windowed Session).
  400.  
  401.                     The Keystroke combinations HOOK offers for Assignment
  402.                     of Programs  are: (X is 0,1,.....8,9  A,B,....Y,Z)
  403.  
  404.                     Shift-Alt-X  denoted as Alt-X  36  Key combinations
  405.                     Shift-Ctl-X  denoted as Ctl-X  36  Key combinations
  406.                     Alt-Ctl-X   denoted as Qac-X  36  Key combinations
  407.                     Alt-Pause   denoted as Pse-A  1  Key combination
  408.                     Shift-Pause  denoted as Pse-S  1  Key combination
  409.  
  410.                     Total Assignable  110  Key combinations
  411.  
  412.                     NEW  Because many programs do not filter the KeyStroke combinations
  413.                     5.7  completely, they will respond to a Shift-Alt-X or Shift-Ctrl-X
  414.                        or Ctrl-Alt-X if any of the Alt-X or Ctrl-X combinations hs
  415.                        been pressed and thus the HotKey actions are intercepted
  416.                        and have to be entered again or hit twice in successions.
  417.  
  418.                        To bypass this a set of alternate Single Key mappings
  419.                        from the Key-Key-X combination has been made such that
  420.                        none of the Keys are Alt or Ctrl Keys. The mappings are :
  421.  
  422.                             Shift-Alt-X  ->  ScrollLock-X
  423.                             Shift-Ctl-X  ->   NumLock-X
  424.                             Alt-Ctl-X   ->    Pause-X
  425.  
  426.                             NB  Alt-Pause and Shift-Pause have not been mapped.
  427.  
  428.                        Keyboard handling is done so that if the alternates are used,
  429.                        their shift state and corresponding LED state is maintained.
  430.  
  431.  
  432.  
  433.   The other is that of Macro Recorder/Playback
  434.  
  435.    In this role, HOOK starts recording ALL Keystroke, mouse
  436.    and other activity producing messages and storing it in
  437.    memory. When the user indicates that recording should
  438.    stop HOOK presents the User with the option of storing
  439.    the data recorded in 2 files representing the data in
  440.    both Binary and ASCII format; the user assigns the file
  441.    prefix and the extensionns are  HEX/MAC for the
  442.    binary/ASCII version. A given Macro can be replayed by
  443.    HOOK by loading it from Disk to Memory.
  444.  
  445.    To accomplish these functions HOOK utilizes 2 execution units,
  446.    HOOK.EXE and HOOKQDLL.DLL referred to hereafter as HOOK and DLL
  447.    respectively and uses several additional files to store configuration
  448.    options, the actual user defined HotKey assignments and the macro
  449.    files.
  450.  
  451.    HOOK.INI   Binary format,stores user selected configuration parameters.
  452.  
  453.    HOOK.HKY  Binary format, stores HotKey assignments made by the user
  454.           from An Screen Dialog.
  455.  
  456.    HOOK.DAT  ASCII file, the user may use to enter HotKey assignments.
  457.           It exists for compatibility with earlier versions.
  458.  
  459.    UsrName.HEX  Binary format, stores data for a given Macro.
  460.    UsrName.MAC  ASCII  format, stores data for a given Macro.
  461.  
  462.  
  463. ΓòÉΓòÉΓòÉ 3.1. What HOOKQDLL Does ΓòÉΓòÉΓòÉ
  464.  
  465.    The DLL is the equivalent of a DOS TSR program. When HOOK is started,
  466.    it loads the DLL into memory and the two functions indicated above are
  467.    carrried out cooperatively by the DLL and HOOK. When HOOK is exited,
  468.    the DLL is unloaded from memory.
  469.  
  470.    The DLL is primarily a DETECTION unit whose principal function is to
  471.    monitor the system message queue and inform HOOK when certain
  472.    parameters are detected in a message. HOOK is primarily an Execution
  473.    unit carrying out tasks based on what the DLL detected.
  474.  
  475.    The DLL and HOOK communicate with each other in several ways.
  476.      1-Way Paths: from DLL -> HOOK using the System Message Queue.
  477.  
  478.      2-Way Paths: a-Shared memory space between the DLL and HOOK;
  479.            b-HOOK calls functions residing in the DLL passing
  480.             parameters to it in registers; the DLL returns
  481.             values to HOOK in registers.
  482.  
  483.   DLL means Dynamic Link Library. In this application it can be thought of
  484.   as the equivalent of a TSR in DOS. That is, it is loaded into memory by
  485.   HOOK when the program is called and remains there until HOOK is exited,
  486.   when it is unloaded.
  487.  
  488.    ------------------------------ The DLL -------------------------------
  489.  
  490.   The DLL intercepts the system message Queue.
  491.  
  492.   HOTKEY FUNCTION:Is the default action. It examines  messages with
  493.     of DLL     MessageID = WM_CHAR, since it is these that carry all
  494.             information about Keyboard activity and messages with
  495.             MessageID = 2F43H (an undocumented message described
  496.             below).
  497.  
  498.    MessageID = WM_CHAR
  499.  
  500.    For each WM_CHAR message the DLL determines the following:
  501.  
  502.    Did there exist any of the following Key Stroke Combinations :
  503.        Shft-Alt-X  X is any key with a valid Scan code
  504.        Shft-Ctl-X  X is any key with a valid Scan code
  505.        Alt-Ctl-X  X is any key with a valid Scan code
  506.        Alt-Pause
  507.       Shft-Pause
  508.  
  509.    If any of those combinations is detected the DLL Posts a Message to
  510.    HOOK using MessageID = WM_USER+300H, with parameters indicating which
  511.    of the 5 Key combinations was struck; the parameters are defined as:
  512.  
  513.     --HotKey--
  514.                               ----MessageID-----
  515.                                                   Parm1
  516.                                                                                           ---------------Parm2---------------
  517.     Shft-Alt-X
  518.                               WM_USER+300H
  519.                                                   0000H
  520.                                                                                           ScanCode of X Key
  521.     Shft-Ctl-X
  522.                               WM_USER+300H
  523.                                                   0001H
  524.                                                                                           ScanCode of X Key
  525.     Alt-Ctl-X
  526.                               WM_USER+300H
  527.                                                   0002H
  528.                                                                                           ScanCode of X Key
  529.     Alt-Pause
  530.                               WM_USER+300H
  531.                                                   0003H
  532.                                                                                           ScanCode of Pause Key
  533.     Shft-Pause
  534.                               WM_USER+300H
  535.                                                   0103H
  536.                                                                                           ScanCode of Pause Key
  537.      It then DISCARDS that WM_CHAR message. That is, it does not pass it
  538.      along to the next Queue. The reason for this is that almost all
  539.      programs use Hot Key combinations of the form Alt-X and/or Ctl-X . IF
  540.      the WM_CHAR messages for the Hot Key combinations above were passed
  541.      along to the message queue, then every time you entered a Hot Key
  542.      combination, if the active window at that time used Alt-X or Ctl-X of
  543.      the Hot Key Combination, it would be activated for that program in
  544.      addition to activating the HotKey and that is not a very comfortable
  545.      environment in which to function.
  546.  
  547.      Nonetheless I have included a Configuration Option which allows the
  548.      user to Toggle DISCARDING the WM_CHAR messages OFF/ON, the default
  549.      being DISCARD ON.
  550.  
  551.      MessageID = 2F43H
  552.  
  553.      For each 2F43H message the DLL detects it Posts a Message to HOOK with
  554.      parameters as follows:
  555.  
  556.      ----Parm1---  ----Parm2----  -------Parm3------  -------Parm4------
  557.      HOOK_Handle  WM_USER+305H  Parm3 of 2F43H msg  Parm4 of 2F43H msg
  558.  
  559.      2F43H is an undocumented message (in existence and unchanged since vs.
  560.      2.0) that is sent to the TaskList / SwitchList. (I use the names
  561.      interchangeably). It informs the TaskList when a Program is activated
  562.      and added to the TaskList and when a Program is closed and removed
  563.      from the TaskList. In each case the TaskList Handle of the program is
  564.      contained in Parm4 of the message and the value in Parm3 indicates
  565.      what the action is for the program associated with that TaskList
  566.      Handle.
  567.  
  568.      The relevant parameters used by HOOK are:
  569.  
  570.      MessageID TargetWindow  --Parm3--  --Parm4--  -------Meaning--------
  571.       2F43H   TaskList   00000001H   TLHandle  Program Added to TaskList
  572.       2F43H   TaskList   00010001H   TLHandle  Program Added to TaskList
  573.       2F43H   TaskList   00000002H   TLHandle  Issued after above Case
  574.       2F43H   TaskList   00000003H   TLHandle  Program Removed from TaskList
  575.  
  576.      These messages are used by HOOK to obtain the TaskList and Window
  577.      Handles of newly loaded programs. When the message indicating Program
  578.      Removal from the TaskList is received the asssociated HotKey has both
  579.      its TaskList Handle and Window Handle set to NULL.
  580.  
  581.     MACRO  FUNCTION:Initiated and concluded by signal from HOOK. In addition
  582.       of DLL      to WM_CHAR messages it stores all messages but WM_TIMER
  583.               and WM_MOUSEMOVE in the shared Memory area. (These are
  584.               so numerous that they would quickly exhaust that space
  585.               and their omission does not afftect MacroPlaback.)
  586.  
  587.     MACRO RECORDING:Initiated when the DLL receives a signal from HOOK. HOOK
  588.        ON      sends that signal when the User hits the Keystroke
  589.               combination Shift-Ctl-LeftArrow or Shift-Ctl-[.
  590.  
  591.               All messages in the system message queue except those
  592.               with ID WM_TIMER and ID WM_MOUSEMOVE are stored in the
  593.               Common memory area by the DLL.
  594.  
  595.               When the PlayBack is done from within HOOK it may be
  596.               aborted by pressing the Esc Key  when Playback is
  597.               displayed in the HOOK Window.
  598.  
  599.     MACRO Recording:Concluded when the DLL receives a signal from HOOK. HOOK
  600.        OFF     sends that signal when the User hits the Keystroke
  601.               combination Shift-Ctl-RightArrow or Shift-Ctl-]. The DLL
  602.               returns to HOOK the number of Messages recorded.
  603.  
  604.  
  605. ΓòÉΓòÉΓòÉ 3.2. What HOOK.EXE does ΓòÉΓòÉΓòÉ
  606.  
  607.     Initialization:When HOOK is loaded it performs the following tasks:
  608.             1-Creates a Message Queue for HOOK.
  609.             2-Sets directory for HOOK as that where HOOK.EXE is.
  610.              (this is why LIBPATH must have "." as first directory
  611.               so that the DLL's are accessable)
  612.             3-Loads a DLL for Error messages from OS/2 DOS functions
  613.             4-Reads in from Disk HOOK.HKY to Memory and initializes
  614.              certain parameters in the assignments therein.
  615.             5-Reads in HOOK.INI and sets configuration accordingly.
  616.             6-Determines the Command Processor used for OS/2
  617.             7-Creates a Thread for displaying messages from HOOK
  618.              primarily related to Startup and Macros.
  619.             8-Creates Thread for displaying HOOK window containing
  620.              Date and Time and used for Messages relating primarily
  621.              to HotKey related activities.
  622.             9-Loads HOOKQDLL.DLL and establishes link with it.
  623.             10-Establishes the Input HOOK for the DLL.
  624.             11-Exchanges Initialization data with DLL.
  625.             12-Starts a Timer (times out every 1/2 second) that is used
  626.              for loading HotKey Programs that have been queued.
  627.             13-Starts the Message Loop for the Queue used by HOOK.
  628.  
  629.  
  630.      HOTKEY FUNCTION of HOOK.EXE
  631.  
  632.             Programs are loaded using the DOS API DosStartSession
  633.             with parameters as defined by the user in an On Screen
  634.             Menu when the Hotkey assignment is made and stored in
  635.             a resident data structure.
  636.  
  637.             Active programs are switched to using properties of
  638.             the SwitchList Control Structure maintained by OS/2.
  639.  
  640.          -- BEGIN : SwitchList Control Structure and Task List --
  641.  
  642.             OS/2 for PM maintains a Data Structure called the Switch
  643.             List Control Structure.  There is an entry in this data
  644.             structure for each ACTIVE program amd Icom-Views (Open
  645.             Folders) started by OS/2 PM. This data structure's
  646.             visible representation is in the so called Task List,
  647.             the listing of running programs and Icon-Views,
  648.             presented when Ctrl-Esc is struck. However not all
  649.             active programs are visible in the Task List becauuse
  650.             one of the parameters a PM program may set is it's
  651.             Visibility in the Task List. Many of the programs used
  652.             by OS/2 are not Visible in the task list and thus not
  653.             listed. (Included in the HOOK ZIP file is a program
  654.             TASKLIST.EXE that displays a listing of ALL the programs
  655.             in that structure, Visible or Not in the Task List ).
  656.  
  657.             When a program is started it is added to the Switch List
  658.             Control Structure and a variety of parameters relating
  659.             to it are set. One of these of particular interest to
  660.             HOOK is the Switch List Entry Handle. This handle can be
  661.             used to Switch To the program if it is in the Switch List
  662.             Control Structure and make it the active program.
  663.  
  664.             Another parameter is the program Title that appears in the
  665.             Task List. This title can be Set by the program and if
  666.             no title is set by the program, OS/2 uses the Name of
  667.             the EXE program as the Title in the Task List Listing.
  668.  
  669.             For ALL but PM type programs, once the Title is set when
  670.             the program is loaded, it cannot be changed. PM type
  671.             programs can change the Title listing at any time and
  672.             many do. PM programs may take a significant time to
  673.             load, and the Task List Title entered for them is not
  674.             finalized into the Switch List Control Structure until
  675.             loading is complete. In fact some programs may change
  676.             the title several times and even dynamically.
  677.  
  678.             The Switch List Handles assigned by OS/2 are re-usable.
  679.             The Switch List handle assigned by OS/2 to a program
  680.             becomes available for re-assignment when that program is
  681.             unloaded just as window handles are.
  682.  
  683.             OS/2 uses an undocumented message MessageID = 2F43H
  684.             whose parameters were indicated earlier. This message
  685.             informs the Task List when a program is first loaded
  686.             and when it is Unloaded and contains its Task List
  687.             Handle as one of its parameters. HOOK uses that
  688.             information to set values in its record base for Hot
  689.             Keys as indicated in a table listed above.
  690.  
  691.  
  692.          -- END : SwitchList Control Structure and Task List --
  693.  
  694.             HOOK maintains a Data Structure containing the
  695.             information entered by the user when assigning Programs
  696.             to HotKeys as well as Information it obtains relative to
  697.             an entry from other sources. This structure consists of
  698.             110 records, each 278 bytes long. This structure is
  699.             saved in HOOK.HKY.
  700.  
  701.             The records for Shft-Alt-X  Shft-Ctl-X  Alt-Ctl-X are in
  702.             consecutive blocks of 36 records. The last two records
  703.             are Alt-Pause and Shift-Pause in that order. The three
  704.             main blocks of data are in order Shft-Alt-X  Shft-Ctl-X
  705.             Alt-Ctl-X. These four record blocks are referred to
  706.             respectively as SAX, SCX, ACX and ALP.
  707.  
  708.             The elements of the Structure with their offsets into
  709.             each record are:
  710.                               Ofst                        Description
  711.      S_TotDescr               000        I           Address for DosStartSession
  712.      S_HKID                   004        U           The Hot Key X character
  713.      S_Desc !                 006        U           Program Description
  714.      S_ProcID         056                I           ProcessID from offset 20 in Task List
  715.      S_AppType                060        P           From DosQuery AppTyhpe using Prog Name and Path
  716.      S_FlagByte0              061                    Reserved
  717.      S_FlagByte1              062                    Reserved
  718.      S_FlagByte2              063                    Reserved
  719.      S_Program                064        U           Program Name and Path
  720.      S_CmdLine                128        U           Command Line Parms
  721.      S_WorkDir                192        U           Working directory
  722.      S_WHandle                 256       I           Window Handle of Loaded Program
  723.      S_TLHandle               256        I           TaskList Handle Obtained When Prog 1st Loaded
  724.      S_Winx                   260        U           X coord  Lower Left WindowCorner in Pixels
  725.      S_Winy                   262        U           Y coord  Lower Left WindowCorner in Pixels
  726.      S_WinWidth               264        U           Width of Window in Pixels
  727.      S_WinHeight              266        U           Height of Window in Pixels
  728.      S_SessType               268        U           Session type
  729.      S_ProgFlag               270        P           0/'P' No/Yes Program entered
  730.      S_HKSTatus               271        P           Hot Key STatus 0/'A' = Not/Yes Assigned
  731.      S_DescFlag               272        P           0=No Desc,'D'/'3'= Desc|TaskListTitle for PM apps
  732.      S_WDirFlag               273        P           'Z' if Working Dir  entered else 0
  733.      S_CLFlag                 274        P           'C' if Command Line entered else 0
  734.      Reserved Byte at  Offset 275
  735.      Carriage Return Line Feed Record Terminator at Offset 276
  736.                                                                               U means Entered by User
  737.                                                                               P means determined by HOOK from parameters entered
  738.                                                                               I means internal Information obtained by HOOK
  739.  
  740.     Event Sequence  When HOOK receives a message with ID = WM_USER+300H
  741.             that messeage is from the DLL and has information
  742.             on the parameters of a HotKey combination.
  743.  
  744.             HOOK first determines if the HotKey combination is one
  745.             of those used by HOOK itself and if so carries out that
  746.             predefined action and awaits another message.
  747.  
  748.             IF the HotKey combination is not one of those used by
  749.             HOOK it may be a User Assignable one. HOOK uses the
  750.             Parm1 (HotKey Type) and Parm2 (KB ScanCode) to determine
  751.             the offset into the record structure for that Hot Key.
  752.             It checks a FLag set in the data structure (S_ProgFlag)
  753.             for that HotKey to see if an assignment has been made to
  754.             it. If not it does nothing, otherwise it obtains the
  755.             Switch List Handle and does the following in sequence:
  756.  
  757.             0-If the handle is zero it Loads the program assigned to
  758.              the Hot Key and Sets a FLag indicating a Program is
  759.              being Loaded by DosStartSession and the HOOK window will
  760.              display the message "KB╨╕ Prog_Load". In  addition the
  761.              HOOK Window will flash and  ring an alarm and continue
  762.              until the program load is beyond the critical point
  763.              related to receiving the MessageID = 2F43H with
  764.              Parm2 = 2. The next interaction HOOK has with this Hot
  765.              Key is that drtailed in 2 or 3 below.
  766.  
  767.              IF another HotKey is activated while the Active Flag
  768.              is Set, the  parameters of that HotKey are placed into
  769.              a FIFO List. This list is interrogated every 1/2 second
  770.              when the Timer Times Out and if there is a program to
  771.              be loaded and the Busy Flag is not set, it is loaded.
  772.  
  773.             1-Uses the SwitchList Handle to try to switch to the
  774.              program. If successful a message will be displayed in
  775.              the top line of the HOOK window "KB╨╕ TL-Handle".
  776.  
  777.             2-If the SwitchList Handle does not switch to the
  778.              program it displays an error message. Here the
  779.              user should then check the HOtKey assignments.
  780.  
  781.              When any Program is loaded and added to the Task List
  782.              the system sends the Task List window the message with
  783.              MessageID = 2F43H with parameters as noted earlier. IF
  784.              the Flag indicating HOOK loaded a program is SET, and
  785.              HOOK receives a message WM_USER + 305H indicating a
  786.              Program has been added to the Task List, it copies the
  787.              Switch List handle obtained in Parm4 of the message to
  788.              the appropriate location in the Hot Key Data Stucture.
  789.  
  790.             3-Program Loaded by HOOK is unloaded. HOOK receives the
  791.              message with ID WM_USER+305H with Parm3 = 3 and
  792.              Parm4 = SwitchListHandle of Program Just closed. HOOK
  793.              goes thru HotKey records seeking Match with Handle and
  794.              sets it and its Window Handle both to NULL.
  795.  
  796.  
  797.     MACROFUNCTIONofHOOK . EXE
  798.  
  799.     Start Recording Initiated when User Presses Shft-Ctl-LeftArrow or
  800.             Start Recording Shft-Ctl-[. The user is first presented with a message
  801.             informing him/her to move to the desired starting
  802.             position using either the Cursor or Mouse. When the user
  803.             Presses Enter in response to the Message, then a Message
  804.             "KB╨╕ Recording" appears in the HOOK window on the top
  805.             line indicating that recording is active. HOOK calls the
  806.             DLL passing parameters to it and indicating that Macro
  807.             recording should begin. Keystroke and Mouse activity are
  808.             recorded until Shft-Ctl-RightArrow or Shft-Ctl-] is
  809.             pressed. Ending the recording is an effective way of
  810.             aborting it.
  811.  
  812.      End Recording When either of the HotKeys indicating Macro Recording
  813.             should stop is received, the "KB╨╕ Recording" is removed
  814.             from the HOOK window and HOOK calls the DLL passing
  815.             parameters to it that indicate Stop Recording and
  816.             receiving back the number of records recorded. A
  817.             dialogue box is then presented the User requesting input
  818.             for the file name prefix for the Macro just recorded.
  819.             The user may choose not to save the Macro to file by
  820.             selecting the Cancel option or may enter a File Name.
  821.             Two files, containing the binary record (UserName.HEX)
  822.             and the ASCII record (UesrName.MAC) of the Macro are
  823.             then saved to disk in the directory chosen (default is
  824.             the directory containing HOOK).
  825.  
  826.             At the end of the file dialogue a Message is displayed
  827.             on the screen informing the user that the Macro (still
  828.             in memory) may be played back by the HotKey combination
  829.             Shft-Ctl-Ins and that the Playback mayh be aborted with
  830.             the ESc Key..
  831.  
  832.     Saving a Macro  A macro remains in memory until a new Macro is recorded.
  833.      in Memory   If the user decides that he would like to save that Macro,
  834.              the Hot Key combination Shft-Ctl-PgDn brings up a file
  835.              dialogue as above to obtain informaiton on the File Name
  836.              and directory in which to store it.
  837.  
  838.     Play Back Macro The built in HotKey Shft-Ctl-PgUp presents the user with
  839.              a file dialog box to obtain the Name of the Macro file
  840.              to Load Into memory. When the user chooses the Macro and
  841.              presses the OK button on the dialogue Box, the Macro is
  842.              loaded into memory. It is then played back by pressing
  843.              the HotKey combination Shft-Ctl-Ins. While the playback
  844.              occurs the message "KB╨╕ PlayBack" appears in the HOOK
  845.              window. When the Playback is concluded, the message is
  846.              removed from the window. The  PlayBack may be aborted
  847.              by Pressing the ESc Key.
  848.  
  849.              A Macro may also be played back using the executable
  850.              file PLAYBACK.EXE or PLAYBAKF.EXE by passing the name of
  851.              the macro binary file (MACRONAME.HEX) to it as a command
  852.              line parameter. This combination may be assigned to a
  853.              Hot Key for convenience.
  854.  
  855.  
  856.      --------------------- Content of the saved Macro Files ---------------------
  857.  
  858.      For each message saved by the DLL a record is created that contains the
  859.      following information (in binary) stored in memory. Each of the
  860.      parameters below is 32 bits (4 bytes) long and is the content of each
  861.      Message in the Queue.
  862.  
  863.       Handle  MessageID m sgParam1  msgParam2  msgTime  X_ScreenP  Y_ScreenP
  864.  
  865.      For UserName.HEX the content of the memory is saved in binary form to
  866.      that disk file.
  867.  
  868.      For UserName.MAC each of the parameters above is converted to a Hex
  869.      Number and stored as ########H. Additionally the Handle for that record
  870.      is used as an input to the OS/2 API WinQuerySwitchList to get the Title
  871.      (if any) from OS/2's Task List and is stored as a 24 byte string. Each
  872.      message is separated from the following by a Carriage Return and Line
  873.      Feed. The file contains as its first record the HEADER string:
  874.  
  875.     WinHandle MessageID msgParam1 msgParam2 msgTime X_ScreenP Y_ScrrenP TaskListName
  876.  
  877.      Handle is the Handle of the Window to whom the message is directed.
  878.  
  879.      MessageID defines the type of information (WM_CHAR,WM_COMMAND,etc )
  880.  
  881.      msgParam1 and msgParam2 are data uniquely associated with that MessageID.
  882.  
  883.      msgTime is the time of the message.
  884.  
  885.      X_ScreenP and Y_ScreenP are the coordinates of the Pointer.
  886.  
  887.  
  888.      ------------------------- How the PlayBack is Done -------------------------
  889.  
  890.      To play back a Macro, the Macro file in HEX format (UserName.HEX) is
  891.      read into memory and each message is interrogated by HOOK. What HOOK
  892.      does is to take action on a limited nuymber of Message ID's. It does
  893.      look at and attempt to interpret the following message IDs
  894.  
  895.        WM_CHAR
  896.        WM_BUTTON1DOWN  WM_BUTTON1UP  WM_BUTTON1DBLCLK WM_BUTTON1CLICK
  897.        WM_BUTTON1MOTIONSTART  WM_BUTTON1MOTIONEND
  898.        WM_BUTTON2DOWN  WM_BUTTON2UP  WM_BUTTON2DBLCLK WM_BUTTON2CLICK
  899.        WM_BUTTON2MOTIONSTART WM_BUTTON2MOTIONEND
  900.        WM_BEGINDRAG  WM_ENDDRAG
  901.        WM_OPEN  WM_CLOSE WM_SYSCOMMAND WM_COMMAND WM_CONTROL WM_PAINT
  902.        WM_TRANSLATEACCEL  (This is rather flaky and very  program dependent)
  903.        WM_USER+300h --- ID for HOOK.EXE as target
  904.        WM_SIZE  WM_MINMAXFRAME
  905.        TaskList   This is the ID for the Task List determined dynamically.
  906.  
  907.        The problem is that many messages associated with Mouse movements
  908.        depend on the location of the Mouse Pointer on the screen. These
  909.        coordinates are in the recorded message data, but unless the DeskTop
  910.        is set up exactly as it was when the message was recorded, their
  911.        playback can be meaningless or misleading.
  912.  
  913.        In a similar vein, other messages such as WM_PAINT, WM_COMMAND,
  914.        WM_SYSCOMMAND,WM_CLOSE,WM_CONTROL, WM_CLOSE have in the recorded
  915.        message a specific WindowHandle as their target. But those
  916.        window handles are not valid at this juncture so in interpreting
  917.        the Macro I have just used the window with the focus.
  918.  
  919.        To do a really totally faithful job of Macro Recording and Playback
  920.        one would have to, at the time of Recording, obtain the precise
  921.        state of the system with respect to Programs loaded, and what is
  922.        on the Desktop and reinstate that condition before playing back
  923.        the Macro. I have not done that. But what I have done, does do
  924.        a reasonable job with respecvt to WM_CHAR messages and some mouse
  925.        actions.
  926.  
  927.  
  928. ΓòÉΓòÉΓòÉ 4. Why HOOK ?? ΓòÉΓòÉΓòÉ
  929.  
  930.      HOOK was designed to alleviate the need to clear up the Desktop of OS/2 in 
  931.      order to obtain access to Icons to load programs and to facilitate 
  932.      switching from one active program to another. 
  933.  
  934.      I found myself all too frequently having to to minimize some of my active 
  935.      programs in order to access the Desktop to load another program that was 
  936.      required. Additionally I wanted a quicker way of switching to another 
  937.      program than using Alt-Esc to move through active programs until I came to 
  938.      the desired one or by accessing the Task List to select the program or my 
  939.      using the Mouse to activate an Icon. 
  940.  
  941.      Conceptually then, HOOK is akin to a DOS TSR. Whereas a DOS TSR is 
  942.      resident in Memory, HOOK works through DLLs, DOSERDLL and HOOKQDLL.DLL are 
  943.      loaded into memory when HOOK is loaded. 
  944.  
  945.      DOSERDLL contains information for display if an Error occurs using an OS/2 
  946.      DOS function. 
  947.  
  948.      HOOKQDLL monitors the message queue for WM_CHAR messages, the equivalent 
  949.      of a TSR hooking the KB interrupt. WM_CHAR messages contain information on 
  950.      Keyboard activity and HOOKQDLL, depending on the Keyboard Activity sends 
  951.      messages to HOOK which executes according to the key combinations struck 
  952.      as defined in the file HOOK.HKY (new feature) which is maintained by 
  953.      HOOK.EXE. 
  954.  
  955.      OS/2 itself by default assigns a variety of actions to Keystrokes. For 
  956.      instance F1 brings up HELP, Alt-F4 closes an active program, Ctrl-Esc 
  957.      brings up the Task List,Alt-Esc and Tab-Esc switch to the next program in 
  958.      the Task List, Alt-F7  moves a Window, Alt-F8 resizes, Alt-F10 maximizes, 
  959.      Alt-F5 restores and so on. In addition each program as a rule has its own 
  960.      set of dedicated Keystrokes to accomplish certain actions. Editors and 
  961.      Word Processors are very rich in such keystroke assignments. 
  962.  
  963.      If a Hot-Key type program is to be useful, it should be as unobtrusive as 
  964.      possible and not interfere with programmatic hot-keys. I originally chose 
  965.      the triple key combination of Shift-Alt-X, Shift-Ctrl-X, where X ]can be 
  966.      0,....9,A,B,.....Y,Z (case insensitive) for the Hot-Keys since in my 
  967.      experience to date, they had been almost unused. I also used those 
  968.      combinations with X being keys on the Key_Pads for Hard Coded actions 
  969.      relating to tasks involving HOOK itself. A configuration option exists 
  970.      that allows these hard coded assignments to be active only on the Numeric 
  971.      Key Pad. I have recently added the combination Alt-Ctrl-X to the Hot Keys 
  972.      increasing the capability by 50 %. And at the request of a user I added 
  973.      Alt-Pause, and at the same time added Shift-Pause as well. These may be 
  974.      assigned from either the Hot Key Define Menu or from HOOK.DAT. 
  975.  
  976.  
  977.           NowforsomeCAVEATS .
  978.  
  979.           There is at least ONE Program, VIEWALL.EXE of IBMs that does not let
  980.           itself be installed in the TaskList. Why I do not know. I asked IBM and
  981.           got their usual non-response. Anyhow, HOOK uses the TaskList intensely.
  982.           The consequence of this program not using the TaskList is that you
  983.           cannot switch to it by a HotKey after it is loaded, even though you can
  984.           still load it with a HotKey. If use assign it to a HotKey, use your
  985.           mouse to switch to it.
  986.  
  987.           >>>> Since this type of program is not in the Task List the techniques
  988.           >>>> HOOK uses to turn the Flashing window OFF after a program is loaded
  989.           >>>> do not work. Thus, when any HOOK program is loaded, a Timer is
  990.           >>>> started that turns off the Flashing Window and resets some other
  991.           >>>> crucial parameters of HOOK so that it will continue to function
  992.           >>>> normally. This time delay is set at  10 seconds.
  993.  
  994.           There are some editors, the E.EXE OS/2 Editor for instance as well as
  995.           the Editors built into many Compiler programs that use the
  996.           Shift-Ctrl-Cursor_Pad keys very heavily for Block activities and thus I
  997.           have added a Toggle key, Shift-Alt-5(On KeyPad) to HOOK that allows the user
  998.           to temporarily toggle its trapping actions OFF so that the total
  999.           Keyboard is available to the user. That same Toggle key then
  1000.           re-activates HOOK so that Hot-Key switching is back ON.
  1001.  
  1002.           PM programs also make use of Mnemonic Keys when the Menu bar is active
  1003.           (menus accessible with Alt-F, Alt-H, etc.). If a PM program uses mnemonic
  1004.           keys ( Help is an example) and you have H assigned as a HOT-Key, say
  1005.           Shift-Alt-H, then when you press Shift-Alt-H you will get the Menu Key
  1006.           Option for H, but pressing it a second time will bring up the Hot-Key
  1007.           assignment.
  1008.  
  1009.           In addition PM programs may also use assignments to Ctrl-X (as the E
  1010.           edior does for X=F for the Find option). If you have a Hot-Key assigned
  1011.           to Shift-Ctrl-X, where X is a program defined key, then the Hot-Key will
  1012.           bring up that option. A quick repeat of the Hot-Key will produce its
  1013.           desired action.
  1014.  
  1015.           These kinds of problems do not bother non-PM programs (ASCII text
  1016.           editors) and similar TEXT based Non-PM programs.
  1017.  
  1018.           I have built into HOOK a configuraton option (changeable while HOOK is in
  1019.           use) that can modify the above behavior. HOOK works through HOOKQDLL.DLL
  1020.           which intercepts the message queue and looks at each WM_CHAR message. Each
  1021.           message has a flag that indicates whether it is a PM type application or not
  1022.           and the DLL tests that flag. The configuraiton option allows the DLL to take
  1023.           an action depending on whether that flag is set for a given WM_CHAR message.
  1024.  
  1025.           The default option is to ignore the flag. This has the consequence that the
  1026.           program entering key strokes and thus using Hot-Keys has the KB focus and
  1027.           will activate any PM program user defined keys - as noted this can be
  1028.           quickly overridden by entering the Hot-Key again. But one can change that
  1029.           behavior with the DLL configuration option so that when a PM program has the
  1030.           KB focus, when a Hot-Key sequence is hit, it switches the focus to the
  1031.           DeskTop so that the PM program's defined keys are not accessed. Whether this
  1032.           is desireable or not depends on the particular PM program, how one uses it
  1033.           and so forth. In general I find the default setting of no resetting the
  1034.           focus the most useful, since  re-entering the hot-key if required is not
  1035.           very onerous and you do not lose access to a programs built in keystrokes.
  1036.  
  1037.           End of CAVEATS
  1038.  
  1039.      There are two classes of hot-key assignments in HOOK. One class is hard 
  1040.      coded and cannot be changed by the user. 
  1041.  
  1042.      The other is under the user's control and allows the user to assign 
  1043.      specific actions to a given key combination. That assignment may be done 
  1044.      in one of two ways. The default (new) is by filling in parameters into a 
  1045.      menu activated by Shift-Alt-F3. An optional method is to fill in a (user 
  1046.      maintained) ASCII Text file (HOOK.DAT) which HOOK can read in on command 
  1047.      activated by Shift-Alt-UpArrow when HOOK is active. This method is that 
  1048.      used by versions of HOOK prior to 3.01. 
  1049.  
  1050.      These two methods are not exclusive and both may be used. The HOOK.DAT 
  1051.      file is backwardly compatible with earlier versions of HOOK. The Hot Keys 
  1052.      assigned by filling in the parameters into the Menu are saved in the file 
  1053.      named HOOK.HKY which is re-read every time HOOK is loaded. Any assignments 
  1054.      read in from HOOK.DAT are saved in the same structure saved by HOOK.HKY 
  1055.      and are thus not lost when HOOK is exited. Current values may be saved by 
  1056.      using the Alt-Shift-DnArrow to read them to HOOK.HKY 
  1057.  
  1058.      HOOK has an additional feature. It can (with some limitations) save a 
  1059.      sequence of Keyboard and Mouse Actions so that they may be replayed. I 
  1060.      have found this useful for establishing certain DESKTOP environments that 
  1061.      I use repeatedly. These "Macros" may be saved to Disk and restored From 
  1062.      disk to memory for replay. When saved to disk, the user is prompted for 
  1063.      the name under which to save the macro and two files are saved in 
  1064.      X:\HOOKdir. One with the extension HEX which is the file that can be 
  1065.      played back when loaded into memory and the other a Text file with 
  1066.      extension MAC. The latter contains the information in the Message queue 
  1067.      for the sequence of commands that are in the Macro. 
  1068.  
  1069.      These macros may also be played back from the command line (or assigned to 
  1070.      Hot Keys to play them back) by using PLAYBACK.EXE or PLAYBAKF.EXE for 
  1071.      general macros, In that case the DLL setting should correspond to the 
  1072.      Active Window having the KB focus, otherwise your playback does not go 
  1073.      where you intend it to. PLAYBAKF.EXE is essentially the same as 
  1074.      PLAYBACK.EXE except that the macro is played back FASTER. 
  1075.  
  1076.      An alternate option in the Define Menu for HotKeys allows the user to 
  1077.      assign sequences of HotKeys (or sequences of ASCII Hcaracters) to a Hot 
  1078.      Key and play them back. This replaces some use of Macro Recoridng and 
  1079.      Playing them back if what is being recorded is Just Text entry or ASCII 
  1080.      characterss to paste onto the screen. See later for more details. 
  1081.  
  1082.      HOOK communicates with the user via a small window on the desktop. I have 
  1083.      found it useful to have this window contain the current date and time as 
  1084.      well as to display messages from the program. The window appears as: 
  1085.  
  1086.                             ΓöîΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÉ
  1087.                             Γöé Γò¿Γöé KB HOOK Γöé ΓûäΓöé
  1088.                             Γö£ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöñ
  1089.                             Γöé KB╨╕  hh:mm:ss Γöé
  1090.                             Γöé Day  mm-dd-yy Γöé
  1091.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1092.  
  1093.      The time is updated every second and the updates are maintained via a 
  1094.      separate thread started from HOOK . 
  1095.  
  1096.      There is an option in the On Line configuration to make the Window 
  1097.      Invisible as well as options to change its size, location and colors (if 
  1098.      Visible).The default location is the lower right corner. 
  1099.  
  1100.      Messages are displayed on the first line of the display temporarily 
  1101.      overwriting the current time. 
  1102.  
  1103.      When HOOK is carrying out some special activity it will display a message 
  1104.      in the Window reflecting that on the first line of the window. 
  1105.  
  1106.      When a Program is being switched to it will display a message indicating 
  1107.      the method HOOK used to do that; either the Switch List Handle (TL-Handle) 
  1108.      or the Switch List Title (TL-Title). 
  1109.  
  1110.      When a Program is being loaded it will display the message  Prog_Load in 
  1111.      the HOOK window. It will also Flash that window and sound a few initial 
  1112.      beeps. During that time No Other pprogram should be loaded. When the 
  1113.      window stops flashing it safe to load another program. The delay depends 
  1114.      on the type of program being loaded. Hardly any at all for non-PM program 
  1115.      but can take longer for som ePM programs. 
  1116.  
  1117.  
  1118. ΓòÉΓòÉΓòÉ 5. Installing the HOOK ΓòÉΓòÉΓòÉ
  1119.  
  1120.      To use the Install.exe program, be sure it is in the same directory as the 
  1121.      rest of the files included in the ZIP file. If you are installing from a 
  1122.      floppy, make the floppy drive the active directory and be sure that OS/2 
  1123.      is active. You should do this from an OS/2 window. 
  1124.  
  1125.      IF a PREVIOUS VERSION IS ACTIVE, UNLOAD it before installing this version. 
  1126.  
  1127.      INSTALL.EXE installs this version in a directory named \HOOKdir on a drive 
  1128.      (Xcolon.) both modifiable by the user in a Menu Entry Field. The Install 
  1129.      program allows a directory path name (including the drive specification) 
  1130.      up to a total of 60 characters in length and the specification may include 
  1131.      sub- directories so long as the length limit is obeyed. 
  1132.  
  1133.      To use INSTALL just enter INSTALL from the command line where the current 
  1134.      directory contains INSTALL,EXE and the other unzipped files. 
  1135.  
  1136.      The files will be copied to the appropriate directory and if it does not 
  1137.      exist it will be created. 
  1138.  
  1139.      What INSTALL.EXE does in detail: 
  1140.  
  1141.         A menu is presented with an input field of 
  1142.  
  1143.           C:\hook 
  1144.  
  1145.         prompting the user to accept the parameters as given or to edit them to 
  1146.         meet his/her requirements. A directory specificaton, including  sub 
  1147.         directories, up to 60 characters long may be entered. If the 
  1148.         director(ies) do not exist they will be created. 
  1149.  
  1150.         IF X:\HOOK\ (or the drive:\name chosen) does not exist, it will be 
  1151.         created. 
  1152.  
  1153.         If HOOK.DAT exists in X:\HOOKdir\ it will be renamed to HOOK.DAX. IF 
  1154.         HOOK.HKY exists in X:\HOOKdir\ it will be renamed to HOOK.HKX. 
  1155.  
  1156.         HOOK.DAT, HOOK.EXE, HOOK.HKY, HOOK.INF, HOOK.INI, HOOK.TXT, 
  1157.         DOSERDLL.Dll, HOOKQDLL.DLL and README.1ST will be copied to 
  1158.         X:\HOOKdir\. 
  1159.  
  1160.               !!!  FOR USERS OF VERSIONS PREVIOUS TO 3.01  !!! 
  1161.  
  1162.         You should delete any current version of HOOKQDLL.DLL before beginning 
  1163.         the installation of this version. 
  1164.  
  1165.         This new version is backward compatible with HOOK.DAT BUT its primary, 
  1166.         and the DEFAULT method of entering HOT Key Assignments is by the use of 
  1167.         an ON SCREEN menu system, activated by Alt-Shift-F3. If you prefer to 
  1168.         use the former method of assigning Hot Keys (i.e. via HOOK.DAT) its 
  1169.         assignments must now be manually read in after HOOK is loaded by using 
  1170.         the Hot-Key Shift-Ctl-UpArrow (changed from  prevous versions) or 
  1171.         making a selection from the Menu (activated by Alt-Shift-F2). 
  1172.  
  1173.         After completing the installation you may substitute your current 
  1174.         HOOK???.DAT file by copying it to X:\HOOKdir and renaming it as 
  1175.         HOOK.DAT. BUT before doing that look at the header to the default DAT 
  1176.         file which comments its structure for calling programs. Current DAT 
  1177.         files can be used but there are enhancements that you may find useful. 
  1178.         It would probably be wiser to just edit HOOK.DAT to reflect your 
  1179.         current usage. 
  1180.  
  1181.  
  1182. ΓòÉΓòÉΓòÉ 6. Starting HOOK ΓòÉΓòÉΓòÉ
  1183.  
  1184.      Assume that HOOK is installed on drive X:  in the directory HOOKdir. To 
  1185.      start the program, from an OS/2  command line give the command 
  1186.  
  1187.        X:\HOOKDir\HOOK  or Start X:\HOOKDir\hook 
  1188.  
  1189.      You could have this  command in a CMD file as a means of starting HOOK or 
  1190.      you could also have them in your STARTUP file. 
  1191.  
  1192.      One of the new features is the ability to pass HOOK a parameter on the 
  1193.      command line which specifies a HotKey to activate after HOOK is started. 
  1194.      This is detailed later. 
  1195.  
  1196.  
  1197. ΓòÉΓòÉΓòÉ 7. Configuring the HOOK ΓòÉΓòÉΓòÉ
  1198.  
  1199.      There are various configuration parameters for the program which are 
  1200.      stored in the file HOOK.INI which is read in by the program when it is 
  1201.      started and which remain in effect unless changed from the configuration 
  1202.      menu. In addition HOOK.HKY which has the User Defined Hot-Key Assignments 
  1203.      is also read in when the program is started . 
  1204.  
  1205.      User Assignments in the DAT file may be modified when the program is 
  1206.      active as may the other configuration options. 
  1207.  
  1208.      Hot-Key Assignments are modified by using Shift-Alt-F3 to access the 
  1209.      Hot-Keys Menu Screen to add new assignments, delete current assignments or 
  1210.      edit(new) current assignments. Hot-Key Assignments may also be modified by 
  1211.      altering HOOK.DAT and then re-reading it into memory using 
  1212.      Shift-Alt-UpArrow. 
  1213.  
  1214.      The program window may be resized and relocated by using the Mouse Pointer 
  1215.      at the window edges to change window dimensions, thus effectively resizing 
  1216.      and relocating the window. Alternately the use may use the Move and Size 
  1217.      options of the HOOK Window to make those chantges. 
  1218.  
  1219.      In either case, the ability to save those changes for the next startup are 
  1220.      among the configuration options for the program. 
  1221.  
  1222.      These options for the program are available by placing the mouse pointer 
  1223.      anywhere on the display window and pressing the right mouse button or by 
  1224.      pressing the key combination Shift-Ctrl-5  or Shift-Alt-F2.  Either brings 
  1225.      up the menu displayed below : 
  1226.  
  1227.              Quit KeyBoard Hook
  1228.              Select Editor to use for DAT File Edit
  1229.              Edit HOOK.DAT File (Updates HOOK when Edit HOOK.DAT exited)
  1230.                (To UPDATE while Editing : Save File then Shift-Ctl-UpArrow )
  1231.              Assign Hot Keys
  1232.              Read In HOOK.DAT assignments for Hot Keys
  1233.              Save Current Hot Key Assignments to HOOK.HKY
  1234.              Get HOOK.HKY Assignments for Hot Keys
  1235.              CoPy Active PM Task List Titles to Hot-Key Descriptions
  1236.              Change Colors
  1237.              Window Options
  1238.              Message Display and KeyPad Use Options
  1239.              DLL Option Set Window Focus for PM Programs
  1240.              DLL Option PASS/DONT_PASS HotKey Messages ON in Message Queue
  1241.              Display Scheduled Hot Keys
  1242.              Use Ctl-Alt-Del Option
  1243.  
  1244.              Explanations:
  1245.  
  1246.              Quit KeyBoard Hook
  1247.                   Closes the program in an orderly fashion.
  1248.  
  1249.              Select Editor to use for DAT File Edit
  1250.                   Allows user to enter the filespec of the editor to use for
  1251.                   editing the DAT file or to change the filespec of the default
  1252.                   editor (E.EXE) if it is not in c:\os2\. The editor
  1253.                   selected is saved in HOOK.INI.
  1254.  
  1255.              Edit HOOK DAT File
  1256.                   By default uses the E.EXE editor of OS/2. It is assumed that editor
  1257.                   is located in c:\os2. The filesper may be changed using
  1258.                   the option listed above.
  1259.  
  1260.              (Updating the EXE file occurs when the Editor Above is Closed)
  1261.                   The DAT file is automatically re-read into the EXE file and
  1262.                   the appropriate buffers updated when the Editor used to modify
  1263.                   the DAT file is closed. If one does not use this option to
  1264.                   modify the DAT file, then the EXE may also be dynamically
  1265.                   updated with the Key combination Shift-Ctl-UpArrow.
  1266.  
  1267.              Assign Hot Keys
  1268.                   Activates the Define Hot-Keys Menu (same as Shift-Alt-F3)
  1269.  
  1270.              Read In HOOK.DAT assignments for Hot Keys
  1271.                   Same as using Shift-Ctl-UpArrow to read in current HOOK.DAT File
  1272.  
  1273.              Save Current Hot Key Assignments to HOOK.HKY
  1274.                      Saves all Current Hot-Key Assignments to disk in HOOK.HKY
  1275.  
  1276.              Get HOOK.HKY Assignments for Hot Keys
  1277.                   Reads in HOOK.HKY from Disk. This will override all current assignments
  1278.                   in place. This is same as Shift-Alt-UpArrow.
  1279.  
  1280.              CoPy Active PM Task List Titles to Hot-Key Descriptions
  1281.                   Many PM programs modify the Task List Title established by HOOK when
  1282.                   the program is loaded. HOOK uses the Task List title to switch to
  1283.                   loaded programs. Using this option will copy the Task List title
  1284.                   established by a PM program to the Description for that program
  1285.                   maintained by HOOK. This enables HOOK to switch to that program if
  1286.                   other methods fail.
  1287.  
  1288.              Change Colors
  1289.                   Presents the user with a menu allowing the selection of Foreground
  1290.                   and Background Colors from a group of 16 options Using Push Buttons.
  1291.                   The changes are effected immediately and are saved in HOOK.INI.
  1292.  
  1293.                   ΓûáF WHITE  ΓûáB       ΓûáF DARKGRAY  ΓûáB
  1294.                   ΓûáF BLACK  ΓûáB       ΓûáF DARKBLUE  ΓûáB
  1295.                   ΓûáF BLUE   ΓûáB       ΓûáF DARKRED   ΓûáB
  1296.                   ΓûáF RED    ΓûáB       ΓûáF DARKPINK  ΓûáB
  1297.                   ΓûáF PINK   ΓûáB       ΓûáF DARKGREEN ΓûáB
  1298.                   ΓûáF GREEN  ΓûáB       ΓûáF DARKCYAN  ΓûáB
  1299.                   ΓûáF CYAN   ΓûáB       ΓûáF BROWN     ΓûáB
  1300.                   ΓûáF YELLOW ΓûáB       ΓûáF PALEGRAY  ΓûáB
  1301.  
  1302.                   Default Foreground = Blue   Default Background = White
  1303.  
  1304.                   In the Menu the Actual Colors are displayed instead of the Text
  1305.                   indicating the colors.
  1306.  
  1307.              Window Options
  1308.              Selecting the Window Options presents 8 push buttons in 3 separate
  1309.              group indicated below.
  1310.  
  1311.                           Select Window Options        ----- Comment -----
  1312.  
  1313.                o Window Bottom Left
  1314.                o Window Bottom Center
  1315.                o Window Bottom Right                       Default
  1316.                o Use Current Win Size/Position
  1317.  
  1318.                o Window Visibile                           Default
  1319.                o Window Not Visible
  1320.  
  1321.                o Window NotJumpable                        Default
  1322.                o Window Jumpable
  1323.  
  1324.               The first group of 4 offers selection for the placement of the
  1325.               HOOK information window
  1326.  
  1327.                             ΓöîΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÉ
  1328.                             Γöé Γò¿Γöé KB HOOK Γöé ΓûäΓöé
  1329.                             Γö£ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöñ
  1330.                             Γöé KB╨╕  hh:mm:ss Γöé
  1331.                             Γöé Day  mm-dd-yy Γöé
  1332.                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1333.  
  1334.               The first  three place the window at the bottom of the screen
  1335.               at one of the three locations indicated.
  1336.  
  1337.               The fourth choice is meant to be used if none of the first three
  1338.               are acceptable. The user may reposition and resize the window by
  1339.               using the pointer to drag the sides to new locations and to  resize
  1340.               the window accordingly. Or one may use the Move/Size options of
  1341.               the HOOK window's menu to do the same. Hook may also be repositioned
  1342.               by putting making HOOK the active window and with the pointer in its
  1343.               window drage to the desired location.
  1344.  
  1345.               In either case, after it is positioned to your liking that selection
  1346.               will copy the data for the new window position to HOOK.INI and it
  1347.               will be used on starting up again.
  1348.  
  1349.               The last group sets the response to the Alt-Esc / Alt-TAb Key stroke
  1350.               actions. Not Jumpable means the window is not made active in
  1351.               response to those key strokes.
  1352.  
  1353.             Message Display and KeyPad Use Options
  1354.               When a program is loaded  HOOK;s window will Flash and Optionally
  1355.               Beep several times. The default to Beep is ON. An option is
  1356.               give to set this to either ON or OFF.
  1357.  
  1358.               Hook may be unloaded (Shift-Alt-Del) or unloaded and OS/2 Closed
  1359.               down (Shift-Alt-End). The DEFAULT is to display a Message Box for
  1360.               either case asking if you want to continue. This may be changed
  1361.               to no Message Box display with this option.
  1362.  
  1363.               Some computers have 2 Sets of Key Pads . One has numeric keys and is
  1364.               referred to as the W(hite) pad and the other  has cursor keys and is
  1365.               referred to as the G(rey) Pad. The DEFAULT configuration is to have
  1366.               both key pads respond to the Built In Hot-Key Assignments which use
  1367.               the Key Pad in conjunction with the Shift-Alt/Ctrl keys. That may be
  1368.               changed to use only the Numeric Key pad with this option.
  1369.  
  1370.             BEEP sounded when HOOK loaded.
  1371.               Some users have requested this option to turn Off/On the BEEP
  1372.               signal when HOOK is loaded.
  1373.  
  1374.             DLL Option Set Window Focus for PM Programs
  1375.               The DEFAULT configuration does not change the KB Focus of the
  1376.               program entering Hot-Keys. This means that if a PM program has
  1377.               defined Alt-X or Ctrl-X combinations and you enter a Hot-Key
  1378.               combination that has Alt-X or Ctrl-X in it, it will activate that
  1379.               built in option; repeating the Hot-Key will then activate its
  1380.               desired action, closing the program defined action. Retaining this
  1381.               setting also means that Keyboard Macros will be entered into the
  1382.               current window as it has the KB focus.
  1383.  
  1384.               The other option changes the KB focus from the window that had the
  1385.               focus to the DeskTop. This means that no  repeat Hot-Keys need
  1386.               be entered, but also playback of KB macros does not work, nor does
  1387.               the user have access to the programs defined option keys.
  1388.  
  1389.               In general the DEFAULT option of Window retaining the KB focus is
  1390.               the most useful and flexible.
  1391.  
  1392.             DLL Option PASS/DONT_PASS HotKey Messages ON in Message Queue
  1393.               The default setting is for HOOKQDLL not to pass the WM_CHAR messages
  1394.               that contain the KeyStroke Combinations Shift-Alt-X  Shift-Ctrl-X
  1395.               ALt-Ctrl-X  Alt-Pause  Ctrl-Pause where X is a valid Keyboard Scan
  1396.               Code, to the next Message Queue. This is because when a Shift-Alt-X
  1397.               for example, is activated, there is also activated an Alt-X and many
  1398.               programs have built in Hot-Keys sensitive to such assignments. If
  1399.               the message were not discarded, every time you used a Hot Key
  1400.               containing such a combination that the Program with the Keyboard
  1401.               Focus (Active Program) used, you would activate that also and it is
  1402.               a most uncomfortable environment to work in. It is recommended
  1403.               that if this gives a problem for some programs, then just temporarily
  1404.               deactivate HOOK with the Off/On toggle initiated by Shift-Ctl-SpaceBar.
  1405.  
  1406.              Display Scheduled Hot Keys
  1407.                This option will display a Screen listing ALL the Hot Keys which have
  1408.                been scheduled in the format (X means not scheduled that day and
  1409.                hh:mm aare the hour and minutes after the hour as Scheduled) :
  1410.                                                  ------------- Comment -------------
  1411.              * Alt-X  hh:mm AM on S M T W T F S  S-A-X scheduled AM on All days of week
  1412.              * Ctl-X  hh:mm PM on X M X W T F X  S-C-X scheduled PM on Mon,Wed,Thu,Fri
  1413.              * Qac-X  hh:mm PM on X X X W X F X  A-C-X scheduled PM on Wed,Fri
  1414.                Pse-A  hh:mm AM on X X X X X F X  Alt-Pause  scheduled AM on,Fri
  1415.                Pse-S  hh:mm PM on S X X X X X S  Shft-Pause scheduled PM on Sun,Sat
  1416.  
  1417.              * X : 0,1,.....9,A,B,......Z
  1418.  
  1419.              The display option allows for the display of 44 Scheduled Hot Keys.
  1420.  
  1421.             Use Ctl-Alt-Del Option
  1422.               This option deals with the Alternate REBOOT Option. The default
  1423.               value is to USE the Alternate REBOOT Option. That is, the
  1424.               Ctl-Alt-Esc key REBOOTS the system. When this option is ON, the
  1425.               Ctl-Alt-Del key sequence is disabled. This menu option will offer
  1426.               the User the option to Turn OFF the implementation IF it is ON and
  1427.               to turn it ON if the implementation is OFF.
  1428.  
  1429.               Changes made from this Menu remain in effect thru the remainder of
  1430.               the session while HOOK is active. When the session is ended, via
  1431.               Shift-Alt-End or Shift-Alt-Del the current values of these parameters
  1432.               are saved in HOOK.INI and these are restored for use when the program
  1433.               is next loaded.
  1434.  
  1435.  
  1436. ΓòÉΓòÉΓòÉ 8. Selecting the Editor for Editing the DAT file ΓòÉΓòÉΓòÉ
  1437.  
  1438.      As noted the default editor used for editing the DAT file is the E.EXE 
  1439.      editor that is included with OS/2. The assumption is made that this is 
  1440.      located in C:\os2 where it is placed when installing OS/2 2.0/2.1 or WARP. 
  1441.      If this editor is not satisfactory or the assumption is incorrect then use 
  1442.      this option to enter the correct drive and directory for e.exe or the 
  1443.      editor of your choice. 
  1444.  
  1445.  
  1446. ΓòÉΓòÉΓòÉ 9. REBOOT Option ΓòÉΓòÉΓòÉ
  1447.  
  1448.      HOOK uses the DosDevIOCTL Keyboard category, function 56H to toggle the 
  1449.      Alt-Ctrl-Del key combination OFF/On. The first time it is called it is 
  1450.      toggled OFF, the next time ON,etc. I have found that I sometimes 
  1451.      inadvertently hit the Alt-Ctrl-Del sequence and have no way to recover. 
  1452.      HOOK  toggles Alt-Ctrl-Del OFF when it is loaded and ON when it is 
  1453.      Unloaded (Shift-Alt-Del). 
  1454.  
  1455.      In this version the Alt-Ctl-Esc key is a built in Hot Key that displays a 
  1456.      message "Do You Really Want to REBOOT ?"and gives you a Yes - No choice. 
  1457.      IF you choose YES, then Alt-Ctl-Del is Toggled ON and HOOK is exited 
  1458.      without saving any HOOK files(in the spirit of REBOOTING). 
  1459.  
  1460.      I have found that I sometimes inadvertently hit Alt-Ctl-Del when I meant 
  1461.      to hit Alt-Shift-Del and so I installed this SAFEGUARD. 
  1462.  
  1463.      NB. Toggling OFF the Ctl-Alt-Del sequence has a side effect. The 
  1464.      Alt-Home key combination, which in a DOS session allows switching 
  1465.      between a window and Full Screen, is DISABLED. 
  1466.  
  1467.  
  1468. ΓòÉΓòÉΓòÉ 10. HOT-KEY Assignments-Fixed by Program ΓòÉΓòÉΓòÉ
  1469.  
  1470.      The fixed key assignments are all related to the functioning of HOOK and 
  1471.      with one exception use the Shift-Alt or Shift-Ctrl keys in combination 
  1472.      with the Numeric or cursor pad (default option).  The assignments are: 
  1473.  
  1474.  
  1475. ΓòÉΓòÉΓòÉ 10.1. Hard coded Assignments ΓòÉΓòÉΓòÉ
  1476.  
  1477. Shft-Alt-?              Shift-Alt-X Hot Key Assignments **
  1478. Shft-Ctl-?              Shift-Ctl-X Hot Key Assignments **
  1479. Alt-Ctl-?               Alt-(Ctl-X) / Pause Hot Key Assignments  **
  1480. Shft-Alt-\              Display Prog Defined HotKeys (this listing)
  1481.  
  1482. Shft-Ctl-Esc            REBOOT Option
  1483. Shft-Alt-Del            Unload HOOK
  1484. Shft-Alt-End            Unload HOOK and ShutDown System
  1485. Shft-Ctl-Del            Close Progs Started by HOOK
  1486. Alt-Ctl-End             Close Active Program
  1487. Alt-Ctl-Up/DnArrow      DeActivate One/All HotKeys  !
  1488.  
  1489. Shft-Alt-UpArrow        Read HOOK.HKY into Memory
  1490. Shft-Alt-DnArrow        Save Current Hot Keys to HOOK.HKY
  1491. Shft-Ctl-UpArrow        Read HOOK.DAT into Memory
  1492. Shft-Alt-Ins            Open Small OS/2 Window
  1493.  
  1494. Shft-Ctl-LeftArrow/[    Start Macro Recording
  1495. Shft-Ctl-RghtArrow/]    End Macro Recording and Save to Disk File
  1496. Shft-Ctl-Ins            PlayBack Macro Currently in Memory
  1497. Shft-Ctl-PgDn           Save Current Loaded Macro to DiskFile
  1498. Shft-Ctl-PgUp           Load Selected Macro from Disk to Memory
  1499.  
  1500. Shft-Alt-F1             Activate On LIne Reference Window
  1501. Shft-ALt-F2|Ctl-5       Activate PopUpMenu for Configuration Options
  1502. Shft-Alt-F3             Activate Hot Key Assignment Menu
  1503. Shft-Alt-F5             Select File to Paste to PM Program
  1504. Shft-Alt-F9             Assign Hot Key to Active Window
  1505.  
  1506. Shft-Ctl-SpaceBar       Toggle Hot-Keys Off/On
  1507. Shft-Alt-SpaceBar       Toggle PASTE Mode Off/On
  1508.  
  1509. Right Mouse Button(On HOOK Window)  PopUpMenu for Configuration Options
  1510.  
  1511.                      Press <Esc> or <CR> to Exit
  1512.  
  1513. * These options exist for use when recording macros in the E and EPM editors
  1514.   and similar ones which use Shift-Left|Right Cursor to Start and End copy
  1515.   and paste operations of text.
  1516.  
  1517. **This display reflects the current Active Hot-Key assignments. If HOOK.DAT
  1518.   is read in with new assignments or new assignments are made from the Hot-Key
  1519.   Menu those are automatically reflected in this listing. No user intervention
  1520.   is required for these file displays (this is  changed from earlier versions
  1521.   which required the user to create these displays)
  1522.  
  1523. ! Deactivation means that the TaskList Handle (used for switching by
  1524.   HOtKeys) stored for a HotKey is set to NULL so that if this HotKey is
  1525.   Entered, a new seesion for the program assigned to that HotKey is
  1526.   started. This is useful if by inadvertance HOOK is closed. When HOOK
  1527.   is closed any other means than Shift-Alt-Del the current
  1528.   TaskListHandles are not saved so that when HOOK is restarted  Programs
  1529.   loaded by HOOK do not have HotKeys actively assigned. This is a means
  1530.   of setting the Slate Clean (as it were) and one should closed those
  1531.   windows and reopen to have the full benefits of the HotKeys.
  1532.  
  1533.   It is also useful if you want to start a new session for a given Program.
  1534.   The HotKey will then be active for the new Session.
  1535.  
  1536.  
  1537. ΓòÉΓòÉΓòÉ 10.2. The Shift-Alt-F5 Option - Pasting From a Formatted Text File ΓòÉΓòÉΓòÉ
  1538.  
  1539.  
  1540.              Extended KeyStroke Insertion into PM Applications
  1541.  
  1542. There are two ways of accessing this:
  1543.  
  1544.   1-Assign to a HotKey using the HotKey menu.
  1545.     Enter the Coded Text into the Prgm. File Spec field with the
  1546.     first character entered the colon (:). This is a signature
  1547.     required by HOOK. This does not supplant or replace the HotKey
  1548.     assignments preceeded by a ':' or a '-'. Those and their formats
  1549.     are still valid.
  1550.  
  1551.     No other fields are required though the Description Field may be
  1552.     used.
  1553.  
  1554.   2-Create an ASCII Text File (default is extension of TXT) containing
  1555.     the coded text and access the file via the BuiltInHotKey
  1556.     Shift-Alt-F5.
  1557.  
  1558.     The Target Window (a PM application) must be Active when Shift-Alt-F5
  1559.     is executed. The user will be presented with a file dialog whose
  1560.     default is \Hookdir\*.txt  on the drive where HOOK was installed and
  1561.     Hookdir is the name of the directory chosen for installation.
  1562.     Select the desired file and the content will be pasted into the
  1563.     Target Window.
  1564.  
  1565.     AT the conclusion a sound will be made and a message displayed
  1566.     saying that the File (and the file spec will be displayed) has
  1567.     completed processing.
  1568.  
  1569.     The next time Shift-Alt-F5 is called the default directory and file
  1570.     extension will be that of the file last selected.
  1571.  
  1572. Keys will be coded as the appear on the keyboard with exceptions as noted.
  1573. The Key Coding is NOT CASE SENSITIVE
  1574.  
  1575. To display < enter as <<
  1576. To display > enter as >>
  1577.  
  1578. ------ Actions Not Related to Keys
  1579. <Wait ###.###> inserts a delay of up to ###.### seconds
  1580.             <Wait #>   =  #     secs
  1581.             <Wait #.#> =  #.#   secs
  1582.             <Wait##.##> = ##.## secs
  1583.                 etc.
  1584.          spaces are ignored.
  1585.  
  1586. ----- Comments (not pasted) are included as:
  1587. <* any comment>
  1588.  
  1589. ------Sound a Tone of frequency f for a duration of d milliseconds
  1590. <! f,d>
  1591.      300 cycles/sec for 1/2 second(500 Milliseconds) is  <! 300,500>
  1592.  
  1593. -----  Single Keys  -----       <------------- Comment ------------->
  1594. X:0..9,a..z,A,.Z,rest of Printable Ascii
  1595. <Esc>     Escape Key              Response Depemds on Target Window
  1596. <Tab>     Tab Key
  1597. <Bksp>    BackSpace Key
  1598. <Alt>     Alternate Key           Response Depemds on Target Window
  1599. <Ctrl>    Control Key             Response Depemds on Target Window
  1600. <Shift>   ShiftKey                Response Depemds on Target Window
  1601. <Enter>   Enter Key
  1602. <Space>   Space Bar
  1603. <FX>      Function Key X:0---12   Response Depemds on Target Window
  1604.  
  1605. ----- Cursor Pad Keys ----
  1606. <Home>    Home Key
  1607. <End>     End  Key
  1608. <PgUp>    PgUp Key
  1609. <PgDn>    PgDn Key
  1610. <Up>      Up    Arrow Key
  1611. <Dn>      Down  Arrow Key
  1612. <Left>    Left  Arrow Key
  1613. <Right>   Right Arrow Key
  1614. <Ins>     Insert Key
  1615. <Del>     Delete Key
  1616.  
  1617. ------ Other Keys ---------
  1618. <PrtScr>  PrintScreen Key
  1619. <Pause>   Pause
  1620. <Pause> is essentially meaningless   here - if followed by KeyInput then that
  1621.         is overridden at once.
  1622.  
  1623. NB For TextFiles the embedded CarriageReturn LineFeed at the end of each
  1624.    line of text is ignored. To actually create that combination in pasting
  1625.    you must have the coding <Enter> .
  1626.  
  1627.    Example: This is a text file to paste
  1628. <! 100,300>745407745472<Tab>wait 1  <Wait 1>01<Enter>
  1629. <* A Comment>938498458277<Tab>wait 2  <Wait 2>02<Enter>
  1630. 03928<*Another Comment>3978475<Tab>wait 3  <Wait 3>03<Enter>
  1631. <! 1000,200>745297392772<Tab>wait 4  <Wait 4>04<Enter>
  1632.  
  1633.    When pasted into a PM Editor such as the E.EXE or EPM.EXE editor it
  1634.    appears as:
  1635.  
  1636. 745407745472    wait 1  01
  1637. 938498458277    wait 2  02
  1638. 039283978475    wait 3  03
  1639. 745297392772    wait 4  04
  1640.  
  1641. and the appropriate sounds would have been made at the start of lines 1
  1642. and 4 and the time delays would have occured at the locations where coded.
  1643.  
  1644. An example of using a HotKey is as follows on Prgm File Spec
  1645.  
  1646. :if( )<Enter>{<Enter><Enter>}<Up><Up><Up><Right><Right>
  1647.  
  1648. When that HotKey assignment is executed into a PM Editor and the
  1649. cursor is at the left margin, it displays
  1650.  
  1651. if( )
  1652. {
  1653.  
  1654. }
  1655.  
  1656. with the cursor appearing inside the ().
  1657.  
  1658. If the cursor is not initially at the left margin, it wil appear as
  1659.  
  1660.      if( )
  1661. {
  1662.  
  1663. }
  1664.  
  1665. where the if( ) is positioned at the cursor location at the time of the call.
  1666.  
  1667. I have found the pasting from a file useful for entering data into
  1668. Spread Sheets or inserting canned text into editors/word processors.
  1669.  
  1670. It is a program indepedent form of Macro for Text.
  1671.  
  1672.  
  1673. ΓòÉΓòÉΓòÉ 11. HOT-KEY Assignments-User Defined ΓòÉΓòÉΓòÉ
  1674.  
  1675.      There are two methods that may be used to assign Hot-Keys. The first 
  1676.      employs an On Screen Menu titled 
  1677.  
  1678.                   Define Hot-Keys This menu is activated by the Hot-Key 
  1679.      Alt-Shift-F3 or by selecting the Assign Hot Keys choice from the User 
  1680.      Menum Activated by Shift-Alt-F2. When either of these choices is made you 
  1681.      are presented with the Screen      Type in HotKey Combination for 
  1682.      Assignment or Editing      Shift-Alt-X  Shift-Ctl-X  Alt-Ctl-X 
  1683.      Alt|Shift-Pause         Where X = A,B..Z 0,1..9  OR  <Esc> to Abort  When 
  1684.      the Hot Key Menu Appears the HotKey selected will be displayed at the top 
  1685.      of the Define Hot Keys Menu (below it is indicated as 
  1686.      Shift-Alt(ScrlLock)-X) if you are in Normal Mode or if in PASTE Mode the 
  1687.      HotKeys Assignment Menu PASTE Mode  will appear for your input. 
  1688.  
  1689.      The other method (for normal Hot-Keys only)is backward compatible with 
  1690.      that used in earlier versions of HOOK. It involves filling in an entry in 
  1691.      the text File HOOK.DAT that defines the Hot Key Assignment. This file is 
  1692.      read into HOOK by using the Hot-Key - Shift-Alt-UpArrow (in earlier 
  1693.      versions this was automatically read into HOOK when it was loaded). 
  1694.  
  1695.      The Hot-Key assignments that are in place when HOOK is exited are 
  1696.      automatically saved in the file HOOK.HKY and these are automatically read 
  1697.      into HOOK when it is loaded. (There are options in the menu activated by 
  1698.      Alt-Shift-F2 to save the current Hot-Keys to HOOK.HKY and to re-read 
  1699.      HOOK.HKY into memory.) 
  1700.  
  1701.      The active Hot-Key assignments are in a Record Format in HOOK.EXE, where 
  1702.      there is a separate record for each of the possible Hot-Key Assignments. 
  1703.      When HOOK.DAT is read into HOOK it fills out only those records for which 
  1704.      a Hot-Key is assigned in HOOK.DAT. If an assignment exists it is over 
  1705.      written. 
  1706.  
  1707.      If HOOK.HKY is read into memory it completely overwrites the current 
  1708.      records so that they are lost. If you want to maintain different sets of 
  1709.      Hot-Key assignments then a given set should be Read Out to HOOK.HKY and 
  1710.      that saved by renaming it. To read it back it would then have to be 
  1711.      renamed back to HOOK.HKY. Alterately you could save different sets in a 
  1712.      series of HOOK.DAT files (stored in a different directory) and copy the 
  1713.      one you want to be active to the directory where HOOK.EXE is stored. 
  1714.  
  1715.  
  1716. ΓòÉΓòÉΓòÉ 11.1. The Define Hot Keys Screen Menu Displayed below is format of the ΓòÉΓòÉΓòÉ
  1717.  
  1718. Define Hot Keys Screen Menu 
  1719.  
  1720.                    THE DEFINE HOT-KEYS MENU SCREEN
  1721.  
  1722.                    Assigning Hot Key : Shift-Alt-X
  1723.  
  1724.  Prgm. File Spec: [                                          ] CR Accepts
  1725.  Enter String to Paste as   -|=xxxxxxxxx  and SAVE NB the '-|=' is REQUIRED
  1726.  For <..> formatted Strings :xx<..>xxx    and SAVE NB the  ':'  is REQUIRED
  1727.  
  1728.  o Shell Establishes     o Full Screen OS/2        o Windowable(Vio)
  1729.  o Windowed  (PM)        o Full Screen DOS         o Windowed DOS
  1730.  
  1731.                  !! The Four Items Below are Optional !!
  1732.       Command Line:[                                          ] CR Accepts
  1733.  Working directory:[                                          ] CR Accepts
  1734.        Description:[                                          ] CR Accepts
  1735.    Window Loc/Size:[                 ] As: xxx yyy wwww hhhh  ] CR Accepts
  1736.       (in Pels)
  1737.  
  1738.    [( SAVE Hot Key Assignment )]                [(SCHEDULE Hot Key Assignment)]
  1739.  
  1740.    [(CLEAR Selected Hot Key and EXIT)]          [(CLEAR All Hot Keys and EXIT)]
  1741.  
  1742.             Cursor UP/Dn/Left/Right Keys Moves Within Groups
  1743.                 SpaceBar or Left Mouse Button to Select
  1744.                  Tab Key to Next Group  <Esc> Aborts
  1745.                               [(EXIT)]                            {ΓêÜ} SCHEDULED
  1746.  
  1747. The user Fills in the Hot Key Menu to assign a program to a Hot Key.
  1748.  
  1749. The user MUST :Enter the program specification (just as in the Path Field in
  1750.              the OS/2 Settings Menu)
  1751.  
  1752.              Select ONE of the Session Types (letting the Shell
  1753.              establish the type is a good safe choice).
  1754.  
  1755.       >>>>      The validity of the Program Specification is checked and it
  1756.       >>>>      must be a full file specification including drive and full
  1757.       >>>>      path and the file extension of the executable file.
  1758.       >>>>      For OS/2  this is EXE or COM (in some cases); CMD files
  1759.       >>>>      passed on the command line as parameters to the
  1760.       >>>>      Command Processor as the Program (fully specified)
  1761.       >>>>      For DOS it is EXE or COM or BAT.
  1762.  
  1763.   >>  OR  << :  Enter a Text String prefaced by either a '-'or an
  1764.                 '=' that is to be inserted into the active window by the
  1765.                 HotKey and then SAVE. The '-|=' is a REQUIRED identifier
  1766.                 that this is a TEXT STRING and NOT a PROGRAM NAME. The
  1767.                 TextString may contain spaces. No additional items are
  1768.                 required for this option. This option does not work in a
  1769.                 DOS Window. The distinction between using '-' or '=' is
  1770.                 that the latter slows down the insertion of the string
  1771.                 into the target window by inserting a very small time
  1772.                 delay between each character. The reason for this is
  1773.                 that some Queues are small in size and if you are
  1774.                 inserting a long string very rapidly (as using the '-'
  1775.                 option does) the entire string may not usually be
  1776.                 displayed.
  1777.  
  1778.                 The text string may also contain a sequence of HotKeys to
  1779.                 execute. Hot Keys are identified as:
  1780.                  \A|aX        for the HotKey      Shft-Alt-X
  1781.                  \C|cX        for the HotKey      Shft-Ctl-X
  1782.                  \Q|qX        for the HotKey       Alt-Ctl-X
  1783.  
  1784.                 There are two additional options that are useful with
  1785.                 the HotKeys. Each of these may be used UP to 20 times
  1786.                 in a given string assignment.
  1787.  
  1788.                 The time delays inserted below in both cases are from the
  1789.                 beginning of the invocation of the sequence.
  1790.  
  1791.                 The sequence \rxxx where xxx is any integer creates a
  1792.                 time delay of xxx seconds and then executes a Carriage
  1793.                 Return into the window having the KB focus at that time.
  1794.  
  1795.                 The sequence \dxxx followed by a HotKey designation
  1796.                 (no spaces between \dxxx and the HotKey spec) executes
  1797.                 that HotKey after a time dealy of xxx seconds from the
  1798.                 initiation of the sequence.
  1799.  
  1800.                 These are useful for sequences that may reauire a Carriage
  1801.                 Return after loading an initial program (such as an Internet
  1802.                 Access Programs) and then want to load another program
  1803.                 that requires the first be active (such as an E Mail program).
  1804.                 Since the first program may take many seconds to complete
  1805.                 the time dealy before the execution of the second allows
  1806.                 this to happen. For each of these a series of beeps is
  1807.                 sounded when the time delay is met.
  1808.  
  1809.                 The use of the Time Delay in the sequence is a means of
  1810.                 serializing the sequence of events.
  1811.  
  1812.                 The user may if desired enter a description for the text
  1813.                 strings. Any other fields are ignored when the - option
  1814.                 for the Program File Spec is chosen.
  1815.  
  1816.  NEW FEATURE    The <...> coding format for Pasting TEXT into PM Programs.
  1817.                 To USE this  prefix the formatted string with  ':'  .
  1818.  
  1819.                 Keys will be coded as the appear on the keyboard with
  1820.                 exceptions as noted. The Key Coding is NOT CASE
  1821.                 SENSITIVE
  1822.  
  1823.                 To display < enter as <<
  1824.                 To display > enter as >>
  1825.  
  1826.                 ------ Actions Not Related to Keys -----
  1827.                 <Wait ###.###> inserts a delay of up to ###.### seconds
  1828.                             <Wait #>   =  #     secs
  1829.                             <Wait #.#> =  #.#   secs
  1830.                             <Wait##.##> = ##.## secs
  1831.                                 etc.
  1832.                          spaces are ignored.
  1833.  
  1834.                 ----- Comments (not pasted) are included as:
  1835.                 <* any comment>
  1836.  
  1837.                 ------Sound a Tone of frequency f for d milliseconds
  1838.                 <! f,d>
  1839.                      300 cycles/sec for 1/2 second(500 Milliseconds)
  1840.                      is  <! 300,500>
  1841.  
  1842.                 -----  Single Keys  -----   <------------ Comment ------------>
  1843.                 X:0..9,a..z,A,.Z,rest of Printable Ascii
  1844.                 <Esc>     Escape Key         Response Depemds on Target Window
  1845.                 <Tab>     Tab Key
  1846.                 <Bksp>    BackSpace Key
  1847.                 <Alt>     Alternate Key      Response Depemds on Target Window
  1848.                 <Ctrl>    Control Key        Response Depemds on Target Window
  1849.                 <Shift>   ShiftKey           Response Depemds on Target Window
  1850.                 <Enter>   Enter Key
  1851.                 <Space>   Space Bar
  1852.                 <FX>      Function Keys      Response Depemds on Target Window
  1853.                           X:0---12
  1854.                 ----- Cursor Pad Keys ----
  1855.                 <Home>    Home Key
  1856.                 <End>     End  Key
  1857.                 <PgUp>    PgUp Key
  1858.                 <PgDn>    PgDn Key
  1859.                 <Up>      Up    Arrow Key
  1860.                 <Dn>      Down  Arrow Key
  1861.                 <Left>    Left  Arrow Key
  1862.                 <Right>   Right Arrow Key
  1863.                 <Ins>     Insert Key
  1864.                 <Del>     Delete Key
  1865.  
  1866.                 ------ Other Keys ---------
  1867.                 <PrtScr>  PrintScreen Key
  1868.                 <Pause>   Pause
  1869.                 <Pause> is essentially meaningless   here - if followed
  1870.                         by KeyInput then that is overridden at once.
  1871.  
  1872.                 An example of using a HotKey is as follows
  1873.  
  1874.                 :if( )<Enter>{<Enter><Enter>}<Up><Up><Up><Right><Right>
  1875.  
  1876.                 When that HotKey assignment is executed into a PM Editor and the
  1877.                 cursor is at the left margin, it displays
  1878.  
  1879.                 if( )
  1880.                 {
  1881.  
  1882.                 }
  1883.  
  1884.                 with the cursor appearing inside the ().
  1885.  
  1886.                 If the cursor is not initially at the left margin, it
  1887.                 wil appear as
  1888.  
  1889.                      if( )
  1890.                 {
  1891.  
  1892.                 }
  1893.  
  1894.                where the if( ) is positioned at the cursor location at
  1895.                the time of the call.
  1896. End NEW FEATURE
  1897.  
  1898. There are FOUR Optional Items that may be entered:
  1899.  
  1900.       Command Line: Parameters that need to be passed on the program command line.
  1901.  
  1902.  Working directory: The default directory from which the program is loaded. Many
  1903.                     programs look for their initialization files in the default
  1904.                     directory. The program checks the validity of this directory.
  1905.  
  1906.        Description: This is a description to be displayed on the Task List.
  1907.                     For non-PM programs it will be displayed preceeded by the
  1908.                     Hot-Key assigned (Alt-X / Ctl-X / Qac-X / Pse-X). If no
  1909.                     description is entered  here then the program will display
  1910.                     the Program File Specification in place of the Description.
  1911.                     For PM type programs, the program may modify the Task List
  1912.                     Title so that this will not appear on the Task List but
  1913.                     the name entered by the Program will replace the entry
  1914.                     by HOOK.
  1915.  
  1916.                     Some PM programs may change the TaskList Title.
  1917.  
  1918.   Window Locn/Size: If the program is windowed you may specify its Location and
  1919.                     its Initial Size (both in Pels). xxx is the X location and
  1920.                     yyy the Y location of the Lower Left Corner of the Window
  1921.                     referenced with respect to 0,0 as the lower left corner of
  1922.                     the Screen. wwww is the window width and hhhh its height.
  1923.  
  1924. Pressing the SpaceBar when [[SAVE This Hot Key Assignment]] is HiLited
  1925. saves this entry and enters it into a Record in the Hot Key data
  1926. structure.
  1927.  
  1928. The two Push buttons with CLEAR in them do as indicated. Be very careful
  1929. using the [[CLEAR All Hot Keys]] for that will leave you with no Hot Keys
  1930. active; if you push this by accident you can read back in your latest
  1931. HOOK.HKY from the Menu activates by Alt-Shift-F2.
  1932.  
  1933. If there exist data assigned to a Hot-Key combination, then when the
  1934. user selects the Hot-Key Type and Hot-Key ID and presses Enter after the
  1935. ID selection, the current assignments to that combination are copied
  1936. into the respective Entry fields. IF that Hot Key has been SCHEDULED
  1937. (see below) then a Check will appear in the box adjacent to SCHEDULED.
  1938.  
  1939. These current assignments may be edited and saved. HOWEVER when current
  1940. assignments exist, YOU MAY NOT CHANGE THE HOT KEY TYPE OR HOT KEY ID.
  1941. The program will not allow those changes. If you want to have these
  1942. assignments made to another Hot Key combination, you will have to enter
  1943. them into that de novo and clear the assignments to the Key you no
  1944. longer want to use. It is also possible to make this swtich of Hot Keys
  1945. in the HOOK.DAT file and read it back in.
  1946.  
  1947. After the Hot Key assignment has been SAVED or if there exists a valid
  1948. Hot Key Assignment, the user may SCHEDULE this Hot Key for execution at
  1949. a Set Time for SELECTED days of the week by selcting the Push Button
  1950.  
  1951.                SCHEDULE Hot Key Assignment
  1952.  
  1953. this will activate the following Menu for the user to enter data into.
  1954.  
  1955.  
  1956. ΓòÉΓòÉΓòÉ 11.2. User SCHEDULE Options ΓòÉΓòÉΓòÉ
  1957.  
  1958.                      SCHEDULE  EXECUTION  OPTIONS  MENU
  1959.                     = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
  1960.  
  1961.        Each  of  the  110  Definable  Hot  Keys  May  be  Scheduled   to  be
  1962.         Started  as  if  the  Hot  Key  were  entered  from  the  KeyBoard
  1963.  
  1964.     Select  Hour  to  Run  Program    o  AM     o  PM
  1965.  
  1966.     o  1   o  2   o  3   o  4   o  5   o  6   o  7   o  8   o  9   o  10   o  11   o  12
  1967.  
  1968.     Minutes  After  Hour    o  00   o  10   o  20   o  30   o  40   o  50
  1969.  
  1970.        Select  Day ( s )  of  Week  to  Run  Program
  1971.  
  1972.        {  } Sun   {  } Mon   {  } Tue   {  } Wed   {  } Thu   {  } Fri   {  } Sat
  1973.  
  1974.        [ ( Unschedule  This  HotKey ) ]          [ ( Unschedule  All  HotKeys ) ]
  1975.  
  1976.           [ (    Cancel    ) ]                    [ (  Save  and  Exit  ) ]
  1977.  
  1978. A  given  Hot  Key  mayh  be  scheduled  for  execution  for  any ,  selected ,  or
  1979. all  days  of  the  Week  but  ONLY  for  one  time  on  a  given  day .   If  you  wish
  1980. to  have  the  same  program  executed  at  different  times  on  a  given  day  then
  1981. you  should  assign  that  program  to  Another  Hot  Key  and  Schedule  that  Hot
  1982. Key  for  another  time .
  1983.  
  1984. Schedule  Assignments  are  saved  in  HOOK . SKD  when  HOOK  is  exited  and
  1985. restored  when  it  is  started .
  1986.  
  1987.                THE  SCHEDULE  DATA  STRUCTURE
  1988.  
  1989. The  data  structure  for  savoing  the  SCHEDULE  assignments  consists  of
  1990. 110  records  ( one  for  each  Hot  Key ) ,  each16  bytes  long ,  termionated  with
  1991. a  CR  LF .   The  definition  of  a  record  is .
  1992. ; - - - -  offsets  from  start  of  structure            Hook38
  1993. SKHour              equ   0        ;  0 , 1 , 2 , . 12   Hour  of  Day  on  AM  PM  basis
  1994. SKMinute            equ   1        ;  0 , . . . 59     Minutes  Past  Hour
  1995. SKDay               equ   2        ;  a  1  in  a  day  position  indicates  it  is  chosen
  1996. SKHotKey            equ   9        ;  Hot  Key  ID  Same  as  from  DLL
  1997. SKScanCode          equ  10        ;  Scan  Code  of  Hot  Key
  1998. SKAMPM              equ  11        ;  AM / PM  =  0 / 1
  1999. ;                   equ  12        ;  2  bytes  reserved
  2000. ;                   equ  14        ;  CR  LF  Record  separator
  2001. LenSchedule    equ     16      ; has  same  number  records  as  numrecs
  2002.  
  2003.  
  2004. ΓòÉΓòÉΓòÉ 11.3. Pasting Text and Hot-Key Sequences ΓòÉΓòÉΓòÉ
  2005.  
  2006.                     PASTING TEXT and HOT-KEY SEQUENCES
  2007.                     ==================================
  2008.  
  2009. It is possible to assign a Text String to be pasted into the Window
  2010. having the Keyboard Focus or to assign a Sequence of HotKeys to be
  2011. activated to ANOTHER HotKey.
  2012.  
  2013. This assignment is done in the Define Hot Keys Menu. The user first must:
  2014.  
  2015.              Select a HotKey for the assignment.
  2016.  
  2017.              In the Prgm. File Spec. field the first entry must be a "-"
  2018.              or a "=" character. This is how the program identifies the
  2019.              entry as a  PASTE  sequence rather than as an executable
  2020.              program.
  2021.  
  2022.              OPTIONALLY the user may make an entry in the Description Field.
  2023.              If no entry is made here, the entry in the Prgm. File Spec.
  2024.              field is displayed when the option to display the descriptions
  2025.              is used. All other entries are ignored.
  2026.  
  2027.                         <<<<< PURE TEXT STRINGS >>>>>
  2028.  
  2029.              If a  pure text string is entered, e.g.
  2030.  
  2031.              -This is a pure Text String
  2032.                   or
  2033.              =This is a pure Text String
  2034.  
  2035.              and assigned to the Hot Key, say Shift-Ctrl-A, then when
  2036.              Shift-Ctrl-A is pressed the string will be posted to the
  2037.              Window having the Keyboard Focus as a series of WM_CHAR
  2038.              messages, each message holding one of the characters in
  2039.              the string. If the Window having the  Keyboard Focus does
  2040.              not have a message queue or if that message queue does not
  2041.              interpret the WM_CHAR messages, nothing will appear.
  2042.  
  2043.              Any  ASCII character, even those created by using Alt-##,
  2044.              where # is a key on the numerical key pad will be posted.
  2045.              How and if they are interpreted depends on the target Window.
  2046.              For example, if you have an OS/2 command window as the target
  2047.              and post a message with the escape character (27 or ) in
  2048.              it then the command line interprets that as aborting the
  2049.              command line and no member of the string after it will appear.
  2050.              If you assign -dir     (ascii 13 = Carriage Return) to a
  2051.              Hot Key and activate it when an OS/2 Command window has the
  2052.              focus it will do the dir command.
  2053.  
  2054.              In general including such control characters will lead to
  2055.              nothing because of the interpretation problem but there are
  2056.              some special cases, as those noted above, where something
  2057.              will occur.
  2058.  
  2059.                        <<<<< HOT KEY SEQUENCES >>>>>
  2060.  
  2061.              The text string may also contain a sequence of HotKeys to
  2062.              execute. Hot Keys are entered in the string as:
  2063.  
  2064.               \A|aX        for the HotKey      Shft-Alt-X
  2065.               \C|cX        for the HotKey      Shft-Ctl-X
  2066.               \Q|qX        for the HotKey       Alt-Ctl-X
  2067.  
  2068.              There are two additional options that are useful with the
  2069.              HotKeys. Each of these may be used up to ten times in a
  2070.              given assignment sequence.
  2071.  
  2072.              Each of these options inserts a time delay from the
  2073.              beginning of the activation of the sequence.
  2074.  
  2075.              The sequence \rxxx where xxx is any integer inserts a
  2076.              time delay of xxx seconds from the activation of the
  2077.              Hot Key and then executes a Carriage Return into
  2078.              the Window with the Keyboard Focus
  2079.  
  2080.              The sequence \dxxx followed by a HotKey designation
  2081.              (no spaces between \dxxx and the HotKey spec) inserts
  2082.              a time delay of xxx seconds from the activation of the
  2083.              HotKey before executing the designated HotKey.
  2084.  
  2085.              These are useful for seuqences that may reauire a Carriage
  2086.              Return after loading an initial program (such as an Internet
  2087.              Access Programs) and then want to load another program
  2088.              that requires the first be active (such as an E Mail program).
  2089.              Since the first program may take many seconds to complete
  2090.              the time delay before the execution of the second allows
  2091.              this to happen. For each of these a series of beeps is
  2092.              sounded when the time delay is met.
  2093.  
  2094.              These time delays can certainly be system dependent since
  2095.              how long it takes a given program to load will depend on that
  2096.              as well as perhaps other factors.
  2097.  
  2098.              It may be useful to give some examples that I use myself.
  2099.  
  2100.              I have assigned Loading my Internet Access Program to
  2101.              Alt-Ctrl-J. When this program is loaded it does not dial
  2102.              until a CR is made. The program takes a few seconds to load
  2103.              since it is done by a CMD file that has to turn off my fax
  2104.              software to free u the modem. What I want to do first after
  2105.              that is to see if there is any e mail and for that I use my
  2106.              PM_Mail program which is assined to the HotKey Alt-Ctrl-e .
  2107.              It must be loaded before the modem dials or after the
  2108.              Internet Connect is made or there is an error. It is is
  2109.              loaded after the internet connect is made, it automatically
  2110.              gets any waiting e mail so I would like it to load that
  2111.              way. My internet connect takes about 60 seconds so I need
  2112.              to wait that time after the CR on the Internet program.
  2113.              Thus my assignment for this, in my case to Shift-Ctrl-4 is
  2114.  
  2115.              -\qj\r6\d65\qe
  2116.  
  2117.              the \qj\r6  loads the Internet Access Program and does
  2118.              the CR 6 seconds later that starts the connect.
  2119.  
  2120.              the\d65\d\qe  loads the PM Mail program assigned to Alt-ctrl-e
  2121.              after a 65 second delay (FROM THE BEGINNING). This allows
  2122.              for my system sufficient time for the connect to be made.
  2123.  
  2124.              It is important to note that the sequence of message postings
  2125.              are not serialized like DOS programming and there is no
  2126.              guarantee of the order. The time delays for a CR and for
  2127.              executing one HotKey commence  from the beginning of the
  2128.              Paste HotKey activation.
  2129.  
  2130.              If the above sequence  -\qj\r6\d65\qe were changed to
  2131.              add another HotKey at the end, such as
  2132.  
  2133.              -\qj\r6\d65\qe\aw
  2134.  
  2135.              where in my case Shift-Alt-w is the HotKey to activate the
  2136.              program displaying the SWAPPER.DAT information, then
  2137.              when the sequence is activated, the  first program to
  2138.              appear loaded would be the last one, since it loads the
  2139.              fastest and has no time dealy restriction.
  2140.  
  2141.              Another example ( a simple one) that I use is one that
  2142.              loads a command window (HotKey Shift-Alt-1), another
  2143.              command window (HOt Key  Shift-Alt-2) and an Editor
  2144.              (Shift-Alt-v). The string sequence is:  -\a1\a2\av
  2145.  
  2146.              In general there is no practical use for intermixing
  2147.              Hot Keys and Text due to the serialization problem.
  2148.  
  2149.  
  2150. ΓòÉΓòÉΓòÉ 11.4. Using Shift-Alt-F9 to Assign a HotKey to Active Program ΓòÉΓòÉΓòÉ
  2151.  
  2152. This method, which is applicable only to OS/2 PM or Windowed Text
  2153. applications, allows the user to assign a HotKey to a running program.
  2154. (It cannot be used to Assign Opening a Folder to a HotKey)
  2155.  
  2156. Pressing Shift-Alt-F9 brings up a Screen which asks the user if he/she
  2157. wants to assign a HotKey to a user Selected Program. If the response is
  2158. Yes then another Screen is presented that directs the user to Make the
  2159. Target Program Active and then Press Shift-Alt-F9 again OR to abort with
  2160. Shift-Ctrl-Esc.
  2161.  
  2162. If the user continues with the Assignment by Pressing Shift-Alt-F9 after
  2163. the target program is made active, another screen is presented
  2164. displaying the HotKey options (or again Shift-Ctrl-Esc to abort). If the
  2165. user continues by typing in a HotKey to assign, then a check is done to
  2166. see if that HotKey is currently assigned and if so, that Information is
  2167. presented and an option given to Continue or Abort. If Continue is
  2168. chosen the assignment is made.
  2169.  
  2170. The description that is entered is the Name of the EXE file for the program.
  2171. That can be altered or command line options by using Shift-Alt-F3 to call
  2172. up the more elaborate menu for editing the parameters of the HotKey.
  2173.  
  2174.  
  2175. ΓòÉΓòÉΓòÉ 11.5. User Defined Data Format In HOOK.DAT ΓòÉΓòÉΓòÉ
  2176.  
  2177. The user defined hot-key assignments are made in the text file
  2178. HOOK.DAT which is in the directory X:\HOOK\ . The default file
  2179. loaded by INSTALL has a series of comments in it that describe the
  2180. format of making key assignments and there are a number of assignments
  2181. made in that file as examples. The user can delete them, reassign them
  2182. or whatever. That file is reproduced below.
  2183.  
  2184. Please Note that when HOOK is active, any changes to HOOK.DAT may be made
  2185. active by pressing Shift-Ctrl-UpArrow. IF the EDIT option was chosen from the
  2186. Pop Up Menu the changes automatically are read into HOOK.EXE when the Editor
  2187. is exited. Either choice re-reads this file into the Hot Key Record Structure.
  2188. If a Hot Key exists that is defined in HOOK,DAT, it is overwritten, otherwise
  2189. current Hot Keys are not disturbed and any Hot Keys defined in HOOK.DAT not
  2190. in the Hot Key record structure are added to it.
  2191.  
  2192. Displayed below is the content of HOOK.DAT supplied for you initially.
  2193.  ***************** Beginning of File HOOK.DAT *****************
  2194. ;; HOOK.DAT Key Assignment file for HOOK.EXE
  2195. ;;
  2196. ;; This file  MUST be located in the directory X:\HOOK????
  2197. ;; where X and ???? were chosen by the user at install time
  2198. ;;
  2199. ;; NB the actuating Key strokes are Shift-Alt-X, Shift-Ctrl-X, Alt-Ctrl-X
  2200. ;;
  2201. ;; <<<<<<<<<<<<<<<<<<<<<<< The format is as follows >>>>>>>>>>>>>>>>>>>>>>
  2202. ;;
  2203. ;; A ";" indicates a comment and text from there to end of line is ignored
  2204. ;;
  2205. ;; Blank Lines are not allowed - place at least one ";" on any line
  2206. ;;
  2207. ;; There must be at least 1 space between each field and the next field.
  2208. ;;
  2209. ;; The first field in a line is either A#, C# or Q# indicating an assignment to
  2210. ;; Shift-Alt-#, Shift-Ctrl-# or Alt-Ctrl-# where #  is  0,1,2,3,4,5,6,7,8,9 or
  2211. ;; AX, CX, QX indicating assignment to to Shift-Alt-X, Shift-Ctrl-X, Alt-Ctrl-X
  2212. ;; where X is any letter from a .. z.
  2213. ;;
  2214. ;; NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW NEW
  2215. ;; To assign Alt-Pause or Shift-Pause the first field is either
  2216. ;; PA for Alt-Pause or PS for Shift-Pause
  2217. ;;
  2218. ;; No distinction exists between LowerCase or UpperCase.
  2219. ;;
  2220. ;; The next field is optional - it allows the user to include a descriptive
  2221. ;; text (up to 20 characters long) to describe the program. It will appear
  2222. ;; in the Task List after the Alt|Ctl|Qac-X Hot Key indicator
  2223. ;; The text to be included must be between @-------@ as
  2224. ;; @Fox Pro 2.0@
  2225. ;;
  2226. ;; The next set of (4) fields are collectively optional and allow the user
  2227. ;; the ability to set the location and size of the Window.
  2228. ;; They are entered as           x|X### y|Y### w|W### h|H###
  2229. ;; where x|X y|Y w|W h|H denote the coordinates of the lower left corner
  2230. ;; of the window and w|W / h|H denotes the Width / Height of the window.
  2231. ;; All sizes are given in PELS so that a set of values OK for one screen
  2232. ;; resolution will appear differently for another.
  2233. ;; x0 y0 w300 h400 will create a window located at the lower left corner
  2234. ;; of the Screen whose size is 300 pels wide and 400 pels high.
  2235. ;;
  2236. ;; The next field has the following options.
  2237. ;;
  2238. ;; 9 means that the key will not be recognized. This can be accomplishied
  2239. ;;   as well by commenting that assignment out with ";
  2240. ;; ;Ad        means that Shift-Alt-D is not assigned
  2241. ;; Ad 9 a 0   means that Shift-Alt-D is not assigned
  2242. ;;            the 9 must be followed by any letter a space and "0"
  2243. ;;
  2244. ;; OR just omitting Ad from the text also means it is not assigned
  2245. ;;
  2246. ;; Otherwise the field has the following meaning
  2247. ;;
  2248. ;; 0   Allows the Shell to establish the session type - best as a rule
  2249. ;; 1   Starts program as Full Session OS/2
  2250. ;; 2   Start Program in Windowed Session for programs using Base Video System
  2251. ;; 3   Start Program in Windowed Session for programs using PM services
  2252. ;; 4   Start Program in Full Screen DOS session
  2253. ;; 7   Start Program in Windowed DOS session
  2254. ;;
  2255. ;; The next field is the file spec of the program to be executed and the
  2256. ;; field after that is either a "0" indicating no  command line parameters
  2257. ;; or the command line parameters. If the command line parameters contain
  2258. ;; any spaces the command line parameters must be contained within "".
  2259. ;;
  2260. ;; Ae 0 c:\os2\e.exe c:config.sys ; loads the system editor included in OS/2
  2261. ;;                                  to edit c:config.sys and assigns  this
  2262. ;;                                  command to Shift-Alt-e
  2263. ;;
  2264. ;; Ae @Edit Config.sys@0 c:\os2\e.exe c:config.sys ; loads the system editor included in OS/2
  2265. ;;                                  to edit c:config.sys and assigns  this
  2266. ;;                                  command to Shift-Alt-e displays description
  2267. ;;                                  "Edit Config.sys" in Task List
  2268. ;;
  2269. ;; Generically speaking the format below assigns programfilespec to Shift-Alt-x
  2270. ;;
  2271. ;; Ax 0 programfilespec "program command line" ;if there are command line parms
  2272. ;;
  2273. ;; Ax 0 programfilespec  0                     ;if no command line parms
  2274. ;;
  2275. ;; The  programfilespec must contain the extension .COM / .EXE / .BAT
  2276. ;; BAT files can be loaded just like EXE files but CMD files must be
  2277. ;; passed as strings to the Command Processor. If the command processor
  2278. ;; is CMD.EXE the the string must be "/C X:\dirname\fname.CMD".
  2279. ;; The 4os2 command processor does not require the /C parameter.
  2280. ;;
  2281. ;;
  2282. ;; HOOK  uses the DosStartSession Function of the OS/2 API to load programs.
  2283. ;; It is documented on page 2-345 of the Control Program Functions Manual.
  2284. ;;
  2285. ;; DosStartSession does not like to load a CMD file directly so they must be
  2286. ;; loaded with a command processor as
  2287. ;;
  2288. ;; A5 0 c:\os2\cmd.exe "/C abcdef.cmd" ; abcdef.CMD loaded by OS/2 command processor
  2289. ;;
  2290. ;; The  4os2 command processor does not require the /C parameter
  2291. ;; A5 0 c:\4os2path\4os2.exe  abcdef.cmd ; abcdef.CMD loaded by 4OS2 command processor
  2292. ;;
  2293. ;; To assign a program to a key follow the examples/rules above
  2294. ;;
  2295. ;; If you edit this file while HOOK is Active, press Shft-Alt-UpArrow
  2296. ;; to re-read this file in and redefine the Active Set of Keys
  2297. ;;
  2298. ;; !!IF  this file is edited from the HOOK Menu, it is automatically re-read!!
  2299. ;;
  2300. ;; In the Task List Shift-Alt-Key assignments are identified as Alt-X
  2301. ;; In the Task List Shift-Ctl-Key assignments are identified as Ctl-X
  2302. ;; In the Task List Alt-Ctrl-Key  assignments are identified as Qac-X
  2303. ;;
  2304. ;; Please Note that As is assigned to Search and Replace Applet which may
  2305. ;; not be valid for other than vs.2.1 and Cw  for Windows is valid only for
  2306. ;; OS/2 2.0/2.1 not for WARP!!
  2307. ;;
  2308. Q3 @3:OS/2 Command@ 0 c:\os2\cmd.exe 0               ;OS/2 window using OS/2 Command Processor
  2309. A1 @1:OS/2 Command@ 0 c:\os2\cmd.exe 0               ;OS/2 window using OS/2 Command Processor
  2310. A2 @2:OS/2 Command@ 0 c:\os2\cmd.exe 0               ;OS/2 window using OS2 Command Processor
  2311. A3 @3:OS/2 FScreen@ 1 c:\os2\cmd.exe 0               ;OS/2 Full Screen using OS/2 Command Processor
  2312. A4 9 x 0                            ;Key not assigned
  2313. A5 9 x 0                            ;Key not assigned
  2314. A6 9 a 0                            ;Key not assigned
  2315. A7 9 x 0                            ;Key not assigned
  2316. A8 9 a 0                            ;Key not assigned
  2317. A9 9 a 0                            ;Key not assigned
  2318. A0 9 x 0                            ;Key not assigned
  2319. Aa 9 a 0                            ;Key not assigned
  2320. Ab 9 x 0                            ;Key not assigned
  2321. Ac 9 x 0                            ;Key not assigned
  2322. Ad 9 a 0                            ;Key not assigned
  2323. Ae @System E Editor@ 0 c:\os2\e.exe 0    ;OS/2 e.exe  system editor
  2324. Af 9 x 0                            ;Key not assigned
  2325. Ag 9 x 0                            ;Key not assigned
  2326. Ah 9 x 0                            ;Key not assigned
  2327. Ai 9 x 0                            ;Key not assigned
  2328. Aj 9 x 0                            ;Key not assigned
  2329. Ak 9 x 0                            ;Key not assigned
  2330. Al 9 x 0                            ;Key not assigned
  2331. Am 9 x 0                            ;Key not assigned
  2332. An 9 x 0                            ;Key not assigned
  2333. Ap 9 z 0                            ;Key not assigned
  2334. Aq 9 x 0                            ;Key not assigned
  2335. Ar 9 z 0                            ;Key not assigned
  2336. As @Search and Seek@ 0 c:\os2\apps\pmseek.exe 0       ;OS/2 Search and Scan Applet
  2337. At 9 z 0                            ;Key not assigned
  2338. Au 9 z 0                            ;Key not assigned
  2339. Av 9 x 0                            ;Key not assigned
  2340. Aw 9 z 0                            ;Key not assigned
  2341. Ax 9 z 0                            ;Key not assigned
  2342. Ay 9 z 0                            ;Key not assigned
  2343. Az 9 z 0                            ;Key not assigned
  2344. C1 @1:DOS Command@ 7 c:\os2\mdos\command.com  0     ;DOS window using built in DOS
  2345. C2 @2:DOS Command@ 7 c:\os2\mdos\command.com  0     ;DOS window using built in DOS
  2346. C3 @3:DOS FScreen@ 4 c:\os2\mdos\command.com  0     ;Full Screen using built in DOS
  2347. C4 9 a 0                            ;Key not assigned
  2348. C5 9 a 0                            ;Key not assigned
  2349. C6 9 a 0                            ;Key not assigned
  2350. C7 9 a 0                            ;Key not assigned
  2351. C8 9 a 0                            ;Key not assigned
  2352. C9 9 a 0                            ;Key not assigned
  2353. C0 9 a 0                            ;Key not assigned
  2354. Ca 9 a 0                            ;Key not assigned
  2355. Cb @QBasic@ 7 c:\os2\mdos\qbasic.exe 0       ;QBasic from dos in DOS window
  2356. Cc 9 a 0                            ;Key not assigned
  2357. Cd 9 a 0                            ;Key not assigned
  2358. Ce 9 a 0                            ;Key not assigned
  2359. Cf 9 c 0                            ;Key not assigned
  2360. Cg 9 b 0                            ;Key not assigned
  2361. Ch 9 c 0                            ;Key not assigned
  2362. Ci 9 c 0                            ;Key not assigned
  2363. Cj 9 d 0                            ;Key not assigned
  2364. Ck 9 e 0                            ;Key not assigned
  2365. Cl 9 f 0                            ;Key not assigned
  2366. Cm 9 c 0                            ;Key not assigned
  2367. Cn 9 g 0                            ;Key not assigned
  2368. Co 9 h 0                            ;Key not assigned
  2369. Cp 9 c 0                            ;Key not assigned
  2370. Cq 9 c 0                            ;Key not assigned
  2371. Cr 9 i 0                            ;Key not assigned
  2372. Cs 9 j 0                            ;Key not assigned
  2373. Ct 9 k 0                            ;Key not assigned
  2374. Cu 9 l 0                            ;Key not assigned
  2375. Cv 9 m 0                            ;Key not assigned
  2376. Cw@Windows 3.1@ 4 c:\os2\mdos\winos2\win.com 0   ;OS/2 DOS Win 3.1 Full Screen
  2377. Cx 9 o 0                            ;Key not assigned
  2378. Cy 9 p 0                            ;Key not assigned
  2379. Cz 9 q 0                            ;Key not assigned
  2380. Pa 9 q 0                            ;Key not assigned  Alt-Pause
  2381. Ps 9 q 0                            ;Key not assigned  Shift-Pause
  2382. <***************** End of File HOOK.DAT *****************>
  2383.  
  2384. When programs are loaded by a Hot-Key their title appears in the Task List 
  2385. (actuated by Ctrl-Esc) according to the following rules. 
  2386.  
  2387. IF A TITLE WAS NOT ASSIGNED USING @ASSIGNED TITLE@ then 
  2388.  
  2389.    If assigned to a Shift-Alt key combination it appears as
  2390.        Alt-X name_as_assigned_in_field_3     where X is key assigned
  2391.  
  2392.    If assigned to a Shift-Ctrl key combination it appears as
  2393.        Ctl-X name_as_assigned_in_field_3     where X is key assigned
  2394.  
  2395.    If assigned to a Alt-Ctrl key combination it appears as
  2396.        Qac-X name_as_assigned_in_field_3     where X is key assigned
  2397.  
  2398. In each case the string "name_as_assigned_in_field_3" contains up to a total of 
  2399. 24 characters from the filespec of the program to be loaded appended to "Alt-X 
  2400. ",to "Ctl-X " or to "Qac-X ". 
  2401.  
  2402. The reason for this is two fold. Most importantly it is because the program 
  2403. uses the Task List titles to determine if a program is currently active when 
  2404. that hot-key combination is struck and it switches to the running program. 
  2405. Secondly in the Task List it serves as a convenient reminder of the current 
  2406. hot-key assignments. 
  2407.  
  2408. The examples below reflect the Task List Title  for some of the assignments 
  2409. above in the sample DAT file. IF THEY DID NOT INCLUDE AN ASSIGNED TITLE IN 
  2410. @.......@ 
  2411.  
  2412. Alt-E c:\os2\e.exe                 ;OS/2 e.exe  system editor
  2413. Alt-S c:\os2\apps\pmseek.exe       ;the pmseek program
  2414. Ctl-W c:\os2\mdos\winos2\win.c     ;Win 3.1 (note the "om" missing)
  2415. Ctl-3 c:\os2\mdos\command.com      ;DOS window
  2416.  
  2417. Please note that if the Alt-E assignment had been made as
  2418. Ae 0 C:\OS2\e.exe 0                 ;OS/2 e.exe  system editor
  2419. then its Task List title would appear as
  2420. Alt-E C:\OS2\e.exe 0
  2421.  
  2422. IF the program had a title assigned between @ASSIGNED TITLE@ then that text 
  2423. would appear after the Alt-X or Ctl-X in the Task List. 
  2424.  
  2425. Programs not loaded by HOOK hot-keys will have their Task List titles reflect 
  2426. how the program is written. PM programs may have their Task List title reflect 
  2427. either the Program Name or the title that appears in their Window when loaded. 
  2428. In some cases the title bar is updated dynamically. 
  2429.  
  2430. The hot-keys Shift-Alt-/ ,Shift-Ctl-/ and Alt-Ctl-/ display on the screen a 
  2431. listing of the Hot-Key assignments in HOOK.DAT relevant to those hot keys. This 
  2432. screen listing is automatically read from the active listings in HOOK.EXE and 
  2433. displayed. This screen is removed by Esc or Shift-Alt-Esc. 
  2434.  
  2435. It is also useful to load separate window programs seamlessly so that they may 
  2436. be switched loaded and switched between with hot keys. The line below indicates 
  2437. this for MathCad assigned to Shift-Alt-M for OS/2 2.1 
  2438.  
  2439. Am @Win MathCad@ 3 4os2.exe "Start /win /c e:\winmcad\mcad.exe & exit"
  2440.  ;OS/2 DOS Win 3.1 Windowed Switchable
  2441.  
  2442. The command processor defined by the OS/2 COMSPEC variable in the environment 
  2443. is used for the PopUp Command Window activated by the key combination 
  2444. Shift-Alt-Ins. 
  2445.  
  2446. HOOK.EXE may be started by placing the appropriate command in a STARTUP.CMD 
  2447. file, by entering it from an OS/2 Window or from a Folder Icon by creating a 
  2448. Program Folder and assigning the Hook location to the Menu in that folder. 
  2449.  
  2450. From the command line or startup.cmd use:
  2451.  
  2452. Start X:\HOOKdir\HOOK   IF X:\HOOKdir not in Path
  2453.  
  2454. Start HOOK           IF X:\HOOKdir is in Path
  2455.  
  2456. NEW : A 2 character parameter may be passed to HOOK when it is loaded.
  2457.    The format is  HOOK XY
  2458.    where X indicates the Hot Key Type : A|a is Shift-Alt
  2459.                       C|c is Shift-Ctl
  2460.                       Q|q is Alt-Ctl
  2461.    and X :0,1,...9,A,B,...Z is the Hot Key identifier.
  2462.    It can be in either lower case or upper case.
  2463.  
  2464.    Examples:
  2465.    Hook q9  will load hook and immediately execute the Hot Key
  2466.         assigned to Alt-Ctl-9
  2467.  
  2468.    Hook Ce  will load hook and immediatley execute the HotKey
  2469.         assigned to Shft-Ctl-e
  2470.  
  2471.    Hook at  will load hook and immediatley execute the HotKey
  2472.         assigned to Shft-Alt-t
  2473.  
  2474.    Since the Paste option allows you to assign strings of HotKeys to
  2475.    execute, you can assign a series of programs to load to such a
  2476.    string  and pass that HotKey on the command Line.
  2477.  
  2478. It is important to remember that the status of the DLL configuration may affect 
  2479. the playing back of macros. In particular if the macro is a playback of 
  2480. keystrokes, the target window must have the focus and this means that the 
  2481. default DLL setting is required. 
  2482.  
  2483.  
  2484. ΓòÉΓòÉΓòÉ 12. The PASTE Mode ΓòÉΓòÉΓòÉ
  2485.  
  2486.           PASTE mode is a new option offered for HOOK users.
  2487.  
  2488.           It is switched On/Off by the HotKey combination > Shift-Alt-SpaceBar
  2489.  
  2490.           When PASTE Mode is first initiated a few Beeps are sounded, the Title
  2491.           bar of the HOOK window changes to display "Paste" instead of "KB Hook"
  2492.           and the Frame Window of HOOK flashes.
  2493.  
  2494.           In PASTE mode the built in HotKeys retain the same functionality except
  2495.           that whenever a reference is made to HotKeys, that reference is with
  2496.           respect to the PASTE Mode.
  2497.  
  2498.           Thus, if in PASTE mode you press Shift-Alt-?  or Shift-Ctl-? or
  2499.           Alt-Ctrl-? the display will be that for the Descriptions relating
  2500.           to the HotKey assignments for the PASTE Mode text descriptions.
  2501.  
  2502.           When You press a  User defined HotKey in PASTE mode it will paste the
  2503.           "text" defined for that key into the Window with the Keyboard Focus.
  2504.  
  2505.           If you press Shift-Alt-F3 you will get the Screen prompting you to enter
  2506.           a HotKey to Addign or Edit and when you do, you will get the Menu Screen
  2507.           for the PASTE mode.
  2508.  
  2509.           To return to normal HotKey reponse just hit Shift-Alt-SpaceBar.
  2510.  
  2511.  
  2512.  
  2513. ΓòÉΓòÉΓòÉ 12.1. The HotKeys Assignment Menu - PASTE Mode Screen Displayed below ΓòÉΓòÉΓòÉ
  2514.  
  2515. is the format of the Define Hot Keys Screen Menu when PASTE Mode is Active 
  2516.  
  2517.  
  2518.               HotKeys Assignment Menu - PASTE Mode
  2519.  
  2520.               Assigning HotKey   Shift-Alt-X
  2521.  
  2522.   Paste String:  [                                                 ] CR Accepts
  2523.  
  2524.    Description:  [                                                 ] CR Accepts
  2525.  
  2526.  
  2527.                          [(  SAVE Hot Key Assignment  )]
  2528.  
  2529.   [(CLEAR Selected Hot Key and EXIT)]          [(CLEAR All Hot Keys and EXIT)]
  2530.  
  2531.               Cursor UP/Dn/Left/Right Keys Moves Within Groups
  2532.                   SpaceBar or Left Mouse Button to Select
  2533.                     Tab Key to Next Group  <Esc> Aborts
  2534.  
  2535.                                [(EXIT)]
  2536.  
  2537. -------------------------- End of Menu -----------------------------------
  2538.  
  2539. The only required field here is the String to be Pasted.
  2540.  
  2541. The maximum string length is 298 characters and may be pure Ascii Text or
  2542. it may include formatting in the <...> format.
  2543.  
  2544.  
  2545. ΓòÉΓòÉΓòÉ 13. Recording AND Playing Back MACROS ΓòÉΓòÉΓòÉ
  2546.  
  2547.      To begin the recording of KeyStrokes and/or Mouse Actions press 
  2548.      Shift-Ctrl-LeftArrow or Shift-Ctrl-[. The program window will display a 
  2549.      Window Message Prompting you with respect to your first recording action 
  2550.      and will then display "Recording" as long as the recording is on. To 
  2551.      conclude the recording press Shift-Ctrl-RightArrow or Shift-Ctrl-] and the 
  2552.      window will be closed indicating recording is ended. You will also at this 
  2553.      point be presented a file dialog box to select a name under which to save 
  2554.      the Macro. To abort Saving the Macro just enter Esc.  The availability of 
  2555.      the optional Shift=Ctrl-[ to begin Macro recording and Shift-Ctrl-] to end 
  2556.      recording is made to make recording and play back easier for those editors 
  2557.      (such as e.exe, epm.exe and others) which use the Shift-Cursor keys for 
  2558.      Text marking and Cut and Paste operations. 
  2559.  
  2560.      To PlayBack the Macro just recorded press the Shift_Ctrl-Ins key and the 
  2561.      window will display the message "Playback" while it is playing back the 
  2562.      events recorded. 
  2563.  
  2564.      >New> When "Playback" is displayed  pressing the Esc Key will abort    the 
  2565.      playback. 
  2566.  
  2567.      A Macro may also be saved after it has been recorded (if the original 
  2568.      prompt for saving was ignored) by pressing Shift-Ctrl-PgDn. A dialogue box 
  2569.      will be presented prompting you for the name of the macro file to be 
  2570.      stored. The macro is written to X:\HOOKdir with the assigned name in two 
  2571.      forms. One form is the binary form that is playable back and has the 
  2572.      extension HEX. The other form is in ASCII with the same name but extension 
  2573.      MAC and is a listing of the following parameters recorded in the Macro; 
  2574.      the values of all except TaskListName are given in HEX.(X above is the 
  2575.      drive letter chosen by the user in Install.) 
  2576.  
  2577.           Handle MessageID msgParam1 msgParam2  msgTime  X_ScreenP Y_ScreenP TaskListName
  2578.  
  2579.      To play back a saved Macro, use Shift_Ctrl-PgUp to activate a dialogue box 
  2580.      that will present the list of saved macros. When one is selected it is 
  2581.      read into memory and is activated by Shift_Ctrl-Ins Any macro that is 
  2582.      created or that is read into memory stays there until replaced by another 
  2583.      and thus can be repeatedly used. If a macro is already in memory it can be 
  2584.      played back(repeatedly) by Shift-Ctrl-Ins. 
  2585.  
  2586.           Macros may also be played back from the command line using PLAYBACK.EXE
  2587.           or PLAYBAKF.EXE(FASTER) for general Macros . From an OS/2 command line :
  2588.  
  2589.             playback  filespec
  2590.               or
  2591.             playbakf  filespec
  2592.  
  2593.           where filespec is the drive:\directory\macroname.hex specification
  2594.           for the binary file saved by HOOK when a macro was created.
  2595.  
  2596.           Those commands may also be assigned to Hot-Keys so that frequently used
  2597.           Macros are readily available.
  2598.  
  2599.           Again remember that for Key Stroke macros the target window must have
  2600.           the focus to receive the keystrokes - this implies the DLL default
  2601.           configuration option.
  2602.  
  2603.      LIMITATIONS OF MACRO RECORDING 
  2604.  
  2605.      The Macro recorder does not record Alt-Esc or Alt-Tab key strokes. 
  2606.  
  2607.      It will record and play back messages for actions initiated by the Alt Key 
  2608.      and then choosing options from the Control Frame Menu, such as Alt-x to 
  2609.      maximize the window, Alt-r to restore the window, etc. If you record a 
  2610.      macro that includes MOVING or RESIZING the window, when that aspect of the 
  2611.      macro is entered, for reasons I do not yet understand, the system waits 
  2612.      for you to move the cursor keys to either resize or move the window. 
  2613.  
  2614.      It does record the Ctrl-Esc key sequence and its actions and other 
  2615.      keyboard entries including the Shift-ALt|Ctrl-X keys assigned to this 
  2616.      program and their actions and also mouse actions. It does not however 
  2617.      faithfully play back everything recorded for reasons I also do not frankly 
  2618.      understand. For instance if you assign to a Macro the sequence (from an 
  2619.      OS/2 window) Help DownCursor DownCursor CR, it does not play back the 
  2620.      DownCursor DownCursor CR sequence though it does open the Help Window. 
  2621.  
  2622.      However if you save (e.g.) the sequence "Help Dir" from a command line it 
  2623.      will play that back correctly. 
  2624.  
  2625.      When you are recording anything from the Command Line, after using the 
  2626.      Shift-Ctrl-LeftArrow (or Shift-Ctrl-[ ) key strokes to start the macro, 
  2627.      you must use the Mouse to activate the window you were in or else an 
  2628.      assigned Shift-xxx-xxx action to get back into that window. This is 
  2629.      because displaying the Message "Recording" in the Hook window makes that 
  2630.      the active window. There is a Prompt reminding the user to make the shift 
  2631.      to the desired active window. 
  2632.  
  2633.      When activating a Macro you must be careful that your setup is similar to 
  2634.      that used when recording it, particularly if writing text is a part of the 
  2635.      scenario - you might get the text written back in a non-intended window. 
  2636.  
  2637.      Since the macros when recorded, record positions in screen coordinates, 
  2638.      which are absolute relative to the bottom left corner, any actions 
  2639.      depending on a mouse action such as clicking on a minimize or maximize 
  2640.      button will be sensitive to where that button is on the screen. If a 
  2641.      window is not displayed at exactly the same position as it was when 
  2642.      recording, those mouse actions will not be what is intended. 
  2643.  
  2644.      The macros do a good job of recording keystrokes and their playback is 
  2645.      faithful and fast. However if the Keystrokes were recorded from a non PM 
  2646.      window they will only play back to a non-PM window and vice versa. 
  2647.  
  2648.      I find the macros most useful for storing and setting up different groups 
  2649.      of windows. For instance I have one mode of operations where I have my 
  2650.      editor open in two different OS/2 windows, 2 DOS windows open with 
  2651.      different versions of FoxPro in them and an OS/2 window for command line 
  2652.      use. I have that set of keystrokes assigned to a macro I have named to 
  2653.      FOXLOAD.HEX and  when I want to re-establish that set of windows I load it 
  2654.      into memory using Shift_Ctrl-PgUp to select and load it and play it back 
  2655.      with Shift-Ctrl-Ins. 
  2656.  
  2657.      This can now be done more easily by assigning the sequence of KeyStrokes 
  2658.      to a HotKey and executing that HotKey. 
  2659.  
  2660.      MACRO RECORDING now omits WM_MOUSEMOVE messages.    This speeds up 
  2661.      playback and loses nothing since those messages    just display the mouse 
  2662.      pointer moving from one location to    another. The actions at the end of 
  2663.      that are unchanged. 
  2664.  
  2665.      Finally the Buffer used to store the messages is of finite size. Each 
  2666.      message is 28 bytes long and the buffer size is 56000 bytes and thus holds 
  2667.      2000 messages. If your recording exceeds the buffer size the program 
  2668.      notifies you. 
  2669.  
  2670.      The program macro PlayBack facility will now run under either OS/2 version 
  2671.      2.0 /2.1/WARP as it determines the Handle of the Task List Window on the 
  2672.      Fly, in this respect it should be immune to updates. The messageID of the 
  2673.      Task List is not documented but it is 082H and it has a fixed handle value 
  2674.      that changed from version 2.0 to 2.1. The value is stored in the Task List 
  2675.      Buffer at offset 8, which is where I get it on loading HOOK. 
  2676.  
  2677.      Currently the macros are not played back at the speed at which they were 
  2678.      recorded but somewhat faster. This is because it is presumed and certainly 
  2679.      I do, that one uses Macros for convenience and speed. That sometimes gives 
  2680.      a problem, especially if mouse movements are involved. For opening up 
  2681.      icons on the screen I find it convenient to follow the procedure of going 
  2682.      to the desktop, (or other window as the case may be) and clicking the left 
  2683.      mouse button to establish the location, then press the Home key to bring 
  2684.      you to the upper left icon of that window, and then use the cursor keys to 
  2685.      bring you to the desired icon to open and then press enter to open it and 
  2686.      so on. 
  2687.  
  2688.      DOS WINDOWED SESSIONS and FULL SCREEN SESSIONS 
  2689.  
  2690.      There are limitations to using the Macro Recorder from a DOS session. It 
  2691.      will record and play back actions reflecting OS/2 aspects, such as using 
  2692.      the Alt key to activate a frame menu and select an options, such as Alt-x 
  2693.      (maximize),etc or Ctrl-Esc to activate the Task List and make a selection 
  2694.      but it will not record ordinary keyboard entry or any activity from within 
  2695.      a DOS session relating to the DOS software program. That is because in DOS 
  2696.      the PM message queue is not active and normal DOS KB TSR's are required if 
  2697.      you need to intercept Keystrokes in DOS. 
  2698.  
  2699.      A similar comment holds for OS/2 Full Screen. There monitors are required 
  2700.      to read Keyboard Activity and the PM message queue does not apply. 
  2701.  
  2702.      If I need to use an application in Full Screen, then I use Ctrl-Esc to 
  2703.      bring up the TaskList window and from there the Hot Keys are valid since 
  2704.      you are in PM. 
  2705.  
  2706.      Notwithstanding the limitations above, I have found this most useful and 
  2707.      it is worth playing around with to understand both its utility and its 
  2708.      limitations. 
  2709.  
  2710.  
  2711. ΓòÉΓòÉΓòÉ 14. Full Screen Applications ΓòÉΓòÉΓòÉ
  2712.  
  2713.      INCLUDING FULL SCREEN APPLICATIONS 
  2714.  
  2715.      If you have an application that you want to run in Full Screen then in 
  2716.      HOOK.DAT so define it by entering the number 1 OR 4 in the column 
  2717.      following the key id, AltX 1  or CtrlX 4 if you want the session to be 
  2718.      Full Screen OS/2 OR Full Screen DOS respectively. From the Define Hot Key 
  2719.      Menu the choice is clear. 
  2720.  
  2721.      Doing it this way assigns the Task List Title the name Alt-X or Ctl-X as 
  2722.      when loaded with the 0 option or 7 option. This means that the program is 
  2723.      loaded Full Screen with the assigned Key Combination and if the program is 
  2724.      already loaded, it can be switched to from the desktop by hitting its 
  2725.      Hot-Key and if you are in the full screen mode, then pressing Ctrl-Esc 
  2726.      brings up the Task List, which is a PM and the hot keys are active from 
  2727.      there. This means that switching to Full Screen applications from the 
  2728.      Desktop is the same as if they are windowed and switching back from Full 
  2729.      Screen applications takes only 1 more Key Combination to switch to a 
  2730.      Windowed Application. Similarly switching between Full Screen applications 
  2731.      also takes only one more Keyboard action, the Ctrl-Esc to the Task List 
  2732.      and then the use of the appropriate Hot-Key. 
  2733.  
  2734.  
  2735. ΓòÉΓòÉΓòÉ 15. Screen Resolution ΓòÉΓòÉΓòÉ
  2736.  
  2737. I have tested this program with screen resolutions of 640x480, 800x600 and 
  2738. 1024x768. In all three cases, ON MY System, all of the menus and screens of 
  2739. HOOK are contained within the display screen correctly. HOOK determines the 
  2740. screen resolution and adjusts its parameters accordingly. Nonethelss some users 
  2741. have reported  problems with Menu integrity. Please let me know if such exists 
  2742. on your system and if so what Video Board and Monitor you are using. It is not 
  2743. that I can necessarily do anything about it, but at least I can build up some 
  2744. data base in this area. 
  2745.  
  2746.  
  2747. ΓòÉΓòÉΓòÉ 16. About this Program ΓòÉΓòÉΓòÉ
  2748.  
  2749. HOOK Vs. 5.70 
  2750.  
  2751. This program and its accompanying DLLs was written in 32 bit Assembler. The 
  2752. assembler used was Microsoft's MASM 6.00b and the OS/2 2.1 ToolKit and its 
  2753. resources were used for compiling the INF file and the resource files used. 
  2754.  
  2755. If you have any interest in obtaining the source code and how to assemble it, 
  2756. contact me via compuserve or at the address indicated below. The program is 
  2757. FreeWare. 
  2758.  
  2759.            Vs: 5.70                 Tue  09-17-96
  2760.  
  2761.            Morton F. Kaplon
  2762.            1047 Johnston Drive
  2763.            Bethlehem PA 18017
  2764.  
  2765.            Voice: 610/758-9686    FAX: 610-758-9262
  2766.  
  2767.            CompuServe ID 73457,437 or emkay@fast.net
  2768.