═══ 1. About Spy ═══ Spy is a debugging tool who's main purpose, is to display the window messages that are sent to one or more windows. Spy watches the messages that a window receives by hooking the the HK_INPUT and HK_SENDMSG hooks In addition to displaying the messages that are sent to windows, spy also allows you to display information about windows, queues, accelerator tables. Spy also provides a way to convert addresses into symbolic names. See Display Format for the message display format. ═══ 2. Message Display Format ═══ This section describes the format of how the messages are displayed. The begining of each line, is common to all messages, regardless of which message it is. The first two characters, shows the origins of the message as follow: I: - Input hook and the message is removed (WinGetMsg, or WinPeekMsg with PM_REMOVE) I- - Input hook no remove (WinPeekMsg with PM_NOREMOVE) S: - Send message hook, and the message was sent from the same thread. S* - Send message hook, and the message was sent from a different thread or process. Following the message prefix, is the alphabetical name of the message, that was sent or posted, followed, by the window handle (H:) the message was sent or posted to. The remaing fields depends on which type of message is being displayed. ═══ 3. Help for Keys ═══ ***** To Be Filled in ***** ═══ 4. Help for Message List ═══ This command allows you to be selective about which messages, you wish to monitor. The dialog contains the following fields: Message: - Displays the current message from the list box, and also allows you to directly enter a message. You may enter the message in Hexidecimal, Decimal, or by name. Message List - The list box contains most of the know messages. The messages may either be displayed in numerical order, or in alphabetical order. All - Selects all messages in the list. None - Deslects all messages in the list. Char On - Selects all WM_CHAR type messages. Char Off - Deselect all WM_CHAR type messages. Mouse ON - Selects all messages that are mouse related. Mouse Off - Deselects all messages that are mouse related. Freq On - Selects some messages, that happen often, and that we usually do not wish to monitor, such as WM_HITTEST. Freq Off - Deselects the messages, that happen often and that we usually do not wish to monitor, such as WM_HITTEST. Input Hook - Should we monitor the input hook? SendMsg Hook - Should we monitor the Send Message Hook? Display undefined msg - Do you want all of the messages that are not defined in this table to be monitored or not. Usually these messages are the messages that are above WM_USER. Ok - Dismiss the dialog, and update our table with the new message selections. Cancel - Dismiss the dialog without updating our tables. ═══ 5. Help for Output ═══ ***** To Be Filled in ***** ═══ 6. Help for Window List ═══ This command displays a list box of all of the windows that are currently defined on the system. You can select one or more windows from this list to monitor the messages for. The items in this list are displayed in the format: xxxx(n) - ID: iii, where the xxxx is the hexidecimal value of the low word of the window handle, (n) is the level number. The level numbers are the number of layers deep we are from HWND_DESKTOP (or HWND_OBJECT). A level 3 window is a child of a level 2 window, etc. The Window Handle: field, displays the complete window handle, it also allows you to enter one manually. The entered value, can be either in hexidecimal or decimal. The OK Push Button - Will exit the dialog and update Spy's internal list of which windows to monitor windows for. The CancelPush Button - Will exit the dialog without updating. The All Push Button - Selects all of the windows in the list. The None Push Button - Deselect all of the windows in the list. The Mouse Push Button - Captures the mouse, and waits for you to click the mouse over a window. While the mouse button is down, the window information on the right hand side of the dialog is updated to show information about the window, that the mouse is currently over. If the Control key is down, the code will walk up the parent chain to find a frame window. ═══ 7. Help for Save List ═══ Will save the contents of the spy main window (listbox) to a file. A dialog is displayed that will prompt you for the name of the output file, and whether the information should be appended to the specified file, or should overwrite the file. ═══ 8. Help for About ═══ Displays information about help... ═══ 9. Help for List Near Symbol ═══ The List Near Symbol command provides a way to convert addresses to symbol names. The symbolic names can only be generated, if you have .SYM files for the program or DLL, which contains the address. The dialog that is displayed is non-modal, which allows you to open it, and use it to throughout your spy session. The PID: field is used, to select a different process to look at symbols for. If the symbols are contained in a DLL, you can normally just leave this field alone, as the address is constant for all processes. If the desired address is contained in a EXE file (example 47:1234), you need set this value to the appropriate process number. Address: field is where you enter desired address. ═══ 10. Help for Spy Message Queues ═══ This command displays a list box of all of the message queues that are currently defined on the system. You can select one or more queues from this list to monitor the messages for. The ability for selecting message queues is important, when you need to monitor messages that are sent during the creation process of the window. The Left hand side contains a listbox, which contains an entry for each of the message queues that existed, when the command was selected. The Hmq: field, displays the complete handle to the message queue, it also allows you to enter one manually. The entered value, can be either in hexidecimal or decimal. The OK Push Button - Will exit the dialog and update Spy's internal list of message queues to monitor messages for. The CancelPush Button - Will exit the dialog without updating. The All Push Button - Selects all of the message queues in the list. The None Push Button - Deselect all of the message queues in the list. The Mouse Push Button - Captures the mouse, and waits for you to click the mouse over a window. While the mouse button is down, the queue information on the right hand side of the dialog is updated to show information about the message queue of the window, that the mouse is currently over. ═══ 11. Help for Spy Send Message ═══ This command allows you to send or post messages to windows, on the screen. This dialog has the following fields: The Window Handle: field, allows you to manually enter the window handle, that you wish to send or post a message to. The Point at Hwnd field allows you to select the window using the mouse. The Message: field, is where you enter the message value that is sent/posted to specified window. This value can be entered in Hex (0x4096), Decimal(1024), or by Message name (WM_QUIT). The MParam1 and MParam2 fields allow you to enter the value of mp1 and mp2, that is sent to the destination window. This value again, can be entered in hex or decimal. In addition, if you specify, the value &1, this value will be filled in with the address of String1 and likewise for &2. The Post Message button, will post the message to the specified window. The status of the post will be displayed in the Result field. The Send Message button, will send the message to the specified window. The result returned from the destination window procedure will be displayed in the Result field. The Cancel button, will exit the dialog. ═══ 12. Help for Spy Menu ═══ ***** To Be Filled in ***** ═══ 13. Help for Windows Menu ═══ ***** To Be Filled in ***** ═══ 14. Help for Window Select Sub-Menu ═══ ***** To Be Filled in ***** ═══ 15. Help for Window Dump Sub-Menu ═══ ***** To Be Filled in ***** ═══ 16. Help for Messages Menu ═══ ***** To Be Filled in ***** ═══ 17. Help for Hooks Menu ═══ ***** To Be Filled in ***** ═══ 18. Help for Hooks Send Message Output Sub-Menu ═══ ***** To Be Filled in ***** ═══ 19. Help for Outputs Menu ═══ ***** To Be Filled in ***** ═══ 20. Help for Help Menu ═══ ***** To Be Filled in ***** ═══ 21. Help for Active ═══ The Active menu item is a toggle, that allows you to turn Spy on or off. ═══ 22. Help for Exit ═══ This command will cause spy to terminate. ═══ 23. Help for Clear Window ═══ This command will cause the contents of the main spy window to be erased. ═══ 24. Help for Save Window ═══ Will save the contents of the spy main window (listbox) to a file. A dialog is displayed that will prompt you for the name of the output file, and whether the information should be appended to the specified file, or should overwrite the file. ═══ 25. Help for Save Options ═══ The save options command saves some of your preferences to OS2.INI, which will be used the next time spy is executed. The saved options include: Outputs - File, Debug Terminal, and/or Screen Hooks - Input, Send Message, ... Messages - Alphabetical Sort? ═══ 26. Help for List Near Symbol ═══ The List Near Symbol command provides a way to convert addresses to symbol names. The symbolic names can only be generated, if you have .SYM files for the program or DLL, which contains the address. The dialog that is displayed is non-modal, which allows you to open it, and use it to throughout your spy session. ═══ 27. Help for Windows List ═══ This command displays a list box of all of the windows that are currently defined on the system. You can select one or more windows from this list to monitor the messages for. An addition to simply selecting files, this command also displays information about the windows, such as the window class, ID, bounding rectangle, etc. ═══ 28. Help for Queues ═══ This command displays a list box of all of the message queues that are currently defined on the system. You can select one or more queues from this list to monitor the messages for. The ability for selecting message queues is important, when you need to monitor messages that are sent during the creation process of the window. ═══ 29. Help for Mouse Select ═══ This command allows you to select one window, to be added to the list of windows, that spy will monitor the messages for. After selecting this command, simply move the mouse pointer over the desired window, and press mouse button 1. If the Control key is down, when you depress mouse button 1, spy will walk up the window chain, until it finds a Frame window (a window, whose window class has the CS_FRAME bit set). ═══ 30. Help for Mouse deselect ═══ This command allows you to use the mouse to remove one window, from the list of windows, that spy will monitor the messages for. After selecting this command, simply move the mouse pointer over the desired window, and press mouse button 1. If the Control key is down, when you depress mouse button 1, spy will walk up the window chain, until it finds a Frame window (a window, whose window class has the CS_FRAME bit set). ═══ 31. Help for Select All Windows ═══ This command toggles on the All window state. When the all window state is selected, spy will monitor the messages going to all windows. ═══ 32. Help for Select All Frames ═══ This command toggles on the All window state. When the all window state is selected, spy will monitor the messages going to all frame windows. A Frame window is defined as a window who's window class is defined with the CS_FRAME bit set). ═══ 33. Help for Dump One Window ═══ This command allows you to dump information about one window. The window is selected with the mouse. The dumped information contains: H: - The window handle. P: - Parent window handle. C: - First child window handle. O: - Owner window handle. ID: - Window Identifier. MQ: - The handle to the message queue. (x1, y1) (x2, y2) - Coordinates of window. ST: - Window Style words. PID: - Process ID of the window. TID: - Thread ID of the window. PFN: - Pointer to window function. Cl: - Window Class name. xxxx xxxx - Dump of extra window words. ═══ 34. Help for Dump All Windows ═══ Dumps information about all windows. Warning, this can be a lengthy process, unless your output is only going to a disk file. See Dump One Window for an explanation about the dump format. ═══ 35. Help for Dump Accel Table. ═══ This command allows you to display an accelerator table for one frame window. After this command is selected, simply move the mouse over the desired frame window, or one of it's decedents, and press mouse button 1. The information will be dumped to the current output devices. First a header line is displayed, which contains the following information: HACCEL: - Handle to accelerator table. HWND: - Frame window handle. CP: - Which code page it is defined for. CNT: - Count of items in the accelerator table. For each item in the accelerator table, a line of information will be displayed, which contains information like: fs: - The AF_ bits are defined in pmwin.h. key: - Which key, may be Char, Virtual key, or Scan code. cmd: - Which command will be generated. At the end of each of these lines, the FS field is broken up in to alphabetical names for each of the bits, the names are as follow: CH - Use the Character. VK - Use the virtual key. SC - Use the Scan code. SHFT - Shift key must be depresed. CTRL - Control key must be depresed. ALT - Alt key must be depresed. LONE - Must be a lone key. SYS - Generate a WM_SYSCOMMAND message. HELP - Generate a WM_HELP message. ═══ 36. Help for Message List ═══ This command allows you to be selective about which messages, you wish to monitor. A dialog will be displayed, which allows you to individually select the messages, or classes of messages. ═══ 37. Help for Disable Message ═══ This command allows you to remove a message for the list of messages that are currently being monitored. This command will disable the message of the currently selected line in the output listbox. ═══ 38. Help for Enable Message ═══ This command allows you to again monitor a message that was previously removed using the Disable message command. ═══ 39. Help for Alpha Sort Message List ═══ This command is a toggle, which is used by the Message List dialog, to choose if the messages should be displayed in numerical order, or in alphabetical order. ═══ 40. Help for Send Message ═══ This command sends or posts messages to one or more windows. ═══ 41. Help for Input Hook ═══ This command toggles the state of whether to monitor the message that come in the HK_INPUT hook or not. ═══ 42. Help for Send Message Hook ═══ This command toggles the state of whether to monitor the messages that come in from the HK_SENDMSG hook or not. ═══ 43. Help for Send Message Extended Data ═══ This command toggles the state of whether we should display extended information for messages that come in from the Send Message hook or not. The extended information may contain SWP structures, Rectangles, Queue messages, etc. See the Message format item for the formats of information. ═══ 44. Help for Send Message Call Stack ═══ This command toggles the state of whether we should dump stack information for the commands that come back from the send message hook. The stack information includes: the process id(PID), the Thread ID(TID), and up to five address, of where the Send message was called from. ═══ 45. Help for Output Screen Lines ═══ ***** To Be Filled in ***** ═══ 46. Help for Output Debug Terminal ═══ This command toggles the state of whether any displayed information should go to the debug terminal or not. This command may depend of if you have a debugging version of OS2 or not, and if you have added a /C1 or /C2 to the PMDD statement in config.sys, for Com1: or Com2:.. ═══ 47. Help for Output File ═══ This command will toggle whetter outputs should go to an output file or not. The name of the output file can be set, by the Outputs... command. ═══ 48. Help for Outputs ═══ This command toggles whetter output should go to the main spy window or not. ═══ 49. Help for How to Use Help ═══ Use this choice to find out what kind of help is available and how to use the help that is available. In general, help is provided for every action bar choice, pull-down choice, and other selections. ═══ 50. Help for Extended Help ═══ Extended help provides general information about the program you are using. ═══ 51. Help for Keys ═══ Use this choice to display a list of keys. The list of keys groups similar keys together so they are easier to find. ═══ 52. Help for Help Index ═══ The help index lists all of the titles of the help information that is available. ═══ 53. Help for About. ═══ Use this choice to display the copyright information.