home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pmspy32.zip / PMSPY.HLP (.txt) < prev    next >
OS/2 Help File  |  1993-07-23  |  52KB  |  1,467 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. PMSPY - Version 1.1 ΓòÉΓòÉΓòÉ
  3.  
  4. PMSPY allows you to spy: 
  5.  
  6.  1. messages that are posted to windows through a message queue 
  7.  2. messages that are sent directly to windows 
  8. This includes PM as well as any internal application messages that may be used. 
  9. The window may be visible or invisible (OBJECT). 
  10.  
  11. It is an excellent learning tool for PM programming because it visibly 
  12. demonstrates PM's message based operation. 
  13.  
  14. It also excels as a PM application debugging tool because: 
  15.  
  16. o No application coding is necessary for passive debugging 
  17. o Active debugging is possible if the application is coded with PMSPY debugging 
  18.   in mind.  For example, current values of flags, counters, etc can be 
  19.   "stuffed" into unused MP1 and/or MP2 fields and then examined with PMSPY. 
  20.   This can provide an x-ray view into the internals of an application as it 
  21.   executes. 
  22. o It may be started before or while the application is running 
  23. o Up to 8 different agents may be active at once allowing for the debugging of 
  24.   complex inter-window, intra-window, multi-threaded, or OBJECT window 
  25.   applications 
  26.  
  27. Basic operations and features include: 
  28.  
  29.  1. Simple point and shoot selection of desktop windows 
  30.  2. Simple selection of invisible and/or OBJECT windows from a list 
  31.  3. A filtering mechanism allows you to include or exclude individual or groups 
  32.     of messages. 
  33.  4. Messages can be defined to trigger the message spying actions. 
  34.  5. The filtering mechanism is totally user definable via a profile. 
  35.  6. A default profile is automatically provided for out-of-the-box operation. 
  36.  7. Messages may optionally be logged to a log file. 
  37.  
  38. Other thing you may be interested in: 
  39.  
  40.  1. How do I do it? 
  41.  2. The message list 
  42.  3. Command line parameters 
  43.  4. known limitations 
  44.  
  45.  
  46. ΓòÉΓòÉΓòÉ 2. How do I do it? ΓòÉΓòÉΓòÉ
  47.  
  48. Here's some actions you may want to know how-to-do. Double-click on a 
  49. highlighted phrase to move to its detailed explanation. 
  50.  
  51. o To debug a dialog procedure 
  52. o To see all WM_USER messages 
  53. o To see all unknown messages 
  54. o Use trigger messages 
  55. o To add a text note to the spy list and (maybe) log file 
  56. o To save agent characteristics (like the font you selected for the spy list, 
  57.   window position and size) for the next time you run PMSPY 
  58.  
  59.  
  60. ΓòÉΓòÉΓòÉ 3. How to Install and Use PMSPY ΓòÉΓòÉΓòÉ
  61.  
  62.  1. The following files are required to run PMSPY: 
  63.  
  64.    File Name       Description 
  65.    PMSPY.EXE       Executable code 
  66.    PMSPY.HLP       Online help 
  67.    PMSPY.DLL       PM resources (strings, messages, dialogs, etc) 
  68.    PMSPYHK.DLL     Dynamic link library containing "hook" code 
  69.  
  70.  2. Copy PMSPY.DLL and PMSPYHK.DLL into a subdirectory which is accessible 
  71.     using the LIBPATH statement in the CONFIG.SYS file (e.g. C:\OS2\DLL) or add 
  72.     the path to the LIBPATH statement and reboot (only after having made all 
  73.     CONFIG.SYS changes). 
  74.  3. Copy PMSPY.EXE into a subdirectory which is in your PATH statement in the 
  75.     CONFIG.SYS file (e.g. C:\OS2) or add the path to the PATH statement. 
  76.  4. Copy PMSPY.HLP into a subdirectory which is in your HELP statement in the 
  77.     CONFIG.SYS file (e.g. C:\OS2\HELP) or add the path to the HELP statement. 
  78.  5. Create a PMSPY program object in one of your OS/2 folders. Be sure to 
  79.     specify that PMSPY.EXE to be executed from the drive and path where you 
  80.     placed the code above. Specify any desired command line parameters. 
  81.  6. When you're ready to begin spying, just double-click on the PMSPY program 
  82.     object. You may start up to 8 different instances of PMSPY to help you 
  83.     analyze/debug complex PM applications. 
  84.  
  85.  
  86. ΓòÉΓòÉΓòÉ 4. How Does PMSPY Work? ΓòÉΓòÉΓòÉ
  87.  
  88. After you select a target window PMSPY installs an INPUT and SENDMSG hook into 
  89. the window's message queue.  This allows the spying of all the messages 
  90. destined for the window. 
  91.  
  92. Note:  The PM system queue may also be selected... 
  93.  
  94. If you have requested to spy on the queue, you will see all messages going 
  95. through this queue, which means you get the messages from all the windows 
  96. associated with this queue.  This is particularly important when you want to 
  97. debug dialogs. 
  98.  
  99.  
  100. ΓòÉΓòÉΓòÉ 5. Known Limitations ΓòÉΓòÉΓòÉ
  101.  
  102. The following limitations are known: 
  103.  
  104.  1. There is no current method for defining the MP formatting styles on a per 
  105.     message basis in a profile. 
  106.  
  107.     Note:  This will be provided in the next release... 
  108.  2. There is NO profile error reporting (for example, you may be able to 
  109.     generate multiple occurrences of the same group and/or message) 
  110.  3. If PMSPYHK.DLL is not found along LIBPATH, PMSPY will not start. The 
  111.     message 'SYS1804 file not found' is issued with the explanation that this 
  112.     is an invalid command. 
  113.  
  114.  
  115. ΓòÉΓòÉΓòÉ 6. How do I debug dialog procs? ΓòÉΓòÉΓòÉ
  116.  
  117. To debug dialog procedures: 
  118.  
  119.  1. Use Select desktop window and select the parent/frame window for spying. 
  120.     This is because the dialog you want to debug will share the same message 
  121.     queue once its created. 
  122.  2. Use Spy on queue to be sure that you are spying on all messages that all 
  123.     moving through the message queue. This will include the frame and all 
  124.     subsequent dialogs. 
  125.  3. Start the dialog.  You should be able to see WM_CREATE messages for each 
  126.     dialog control as well as the WM_INITDLG message that comes to your dialog 
  127.     procedure. 
  128.  
  129.  
  130. ΓòÉΓòÉΓòÉ 7. Saving agent characteristics ΓòÉΓòÉΓòÉ
  131.  
  132. To save this agent's characteristics for subsequent PMSPY use, use the Save 
  133. options pull-down under Options. 
  134.  
  135. The following data is saved on a per agent basis in PMSPY.INI. This file is 
  136. always placed in the current directory. 
  137.  
  138. o the current size and position of the PMSPY window 
  139. o the name of the last font you selected for the spy list 
  140. o the name of the last profile you opened 
  141. o the name of the last log file you opened 
  142.  
  143. Each time PMSPY starts, it tries to use any data previously saved for the agent 
  144. currently being started (1, 2, and so on)  If this data is not available, 
  145. default values are automatically used. 
  146.  
  147.  
  148. ΓòÉΓòÉΓòÉ 8. Message List ΓòÉΓòÉΓòÉ
  149.  
  150. PMSPY places the following items into the message list: 
  151.  
  152.  1. Eligible messages (as defined by the current profile and operational 
  153.     settings). Each list item represents a single PM message: 
  154.  
  155.         WM_BUTTON1UP 005C002A 00000000 P 03300CC8
  156.                                      
  157.         Mnemonic     MP1      MP2      Γöé target
  158.          message                       Γöé HWND
  159.           name                S=sent  ΓöÇΓöñ
  160.                               P=postedΓöÇΓöÿ
  161.  
  162.     Note:  To view the message parameters in different formats, double-click 
  163.     mouse button #1 on the list item 
  164.  2. Programmer entered text notes 
  165.  3. PMSPY status messages. 
  166.  
  167. The horizontal scroll bar can be used to scroll the message data left or right 
  168. to position just the data you care about in view. 
  169.  
  170. Here is a sample message list.  It contains notes, status messages, and PM 
  171. messages. 
  172.  
  173. PM Spy - Window 03300CC8
  174. WM_BUTTON2DOWN         00580085 00000000 P 03300CC8
  175. WM_BUTTON2UP           0039008C 00000000 P 03300CC8
  176. WM_PAINT               00000000 00000000 S 03300CC8
  177. WM_SETFOCUS            0C902FB0 00000000 S 03300CC8
  178. WM_SETSELECTION        00000000 00000000 S 03300CC8
  179. WM_ACTIVATE            00000000 02900BA8 S 03300CC8
  180. This is a NOTE: ready to look at UNDEFINED messages
  181. WM_BUTTON2DOWN         004C0093 00000000 P 03300CC8
  182. WM_FOCUSCHANGE         0C902FB0 00000001 S 03300CC8
  183. WM_ACTIVATE            00000001 02900BA8 S 03300CC8
  184. WM_SETFOCUS            0C902FB0 00000001 S 03300CC8
  185. WM_???? (0303)         02470306 00010001 S 03300CC8
  186. WM_???? (0303)         02370306 00010001 S 03300CC8
  187. WM_???? (0303)         02300304 00010001 S 03300CC8
  188. WM_???? (0303)         022D0303 00010001 S 03300CC8
  189. WM_BUTTON2UP           0017002B 00000000 P 03300CC8
  190. all done, closing the LOG file
  191.  
  192.  
  193. ΓòÉΓòÉΓòÉ 9. Default Profile ΓòÉΓòÉΓòÉ
  194.  
  195. The default PROFILE defines how PMSPY operates "out of the box". 
  196.  
  197. /* PMSPY Default Profile - Created Jul 23 1993 */
  198.  
  199. /* Built using the OS/2 2.0 Toolkit */
  200.  
  201. /* Color Definitions */
  202.  
  203. Color   1 SYSCLR_WINDOWTEXT
  204. Color   2 SYSCLR_ACTIVETITLE
  205. Color   3 SYSCLR_WINDOWSTATICTEXT
  206. Color   4 CLR_RED
  207. Color   5 CLR_PINK
  208. Color   6 CLR_DARKGREEN
  209. Color   7 CLR_DARKCYAN
  210. Color   8 CLR_BLUE
  211.  
  212.  
  213. Group   MouseMovement                  1
  214.  
  215.  Define WM_HITTEST                     0x000C
  216.  Define WM_CONTROLPOINTER              0x0038
  217.  Define WM_MOUSEMOVE                   0x0070
  218.  
  219. Group   StandardWindow                 1
  220.  
  221.  Define WM_NULL                        0x0000
  222.  Define WM_CREATE                      0x0001
  223.  Define WM_DESTROY                     0x0002
  224.  Define WM_ENABLE                      0x0004
  225.  Define WM_SHOW                        0x0005
  226.  Define WM_MOVE                        0x0006
  227.  Define WM_SIZE                        0x0007
  228.  Define WM_ADJUSTWINDOWPOS             0x0008
  229.  Define WM_CALCVALIDRECTS              0x0009
  230.  Define WM_SETWINDOWPARAMS             0x000A
  231.  Define WM_QUERYWINDOWPARAMS           0x000B
  232.  Define WM_ACTIVATE                    0x000D
  233.  Define WM_SETFOCUS                    0x000F
  234.  Define WM_SETSELECTION                0x0010
  235.  Define WM_COMMAND                     0x0020
  236.  Define WM_SYSCOMMAND                  0x0021
  237.  Define WM_HELP                        0x0022
  238.  Define WM_PAINT                       0x0023
  239.  Define WM_TIMER                       0x0024
  240.  Define WM_SEM1                        0x0025
  241.  Define WM_SEM2                        0x0026
  242.  Define WM_SEM3                        0x0027
  243.  Define WM_SEM4                        0x0028
  244.  Define WM_CLOSE                       0x0029
  245.  Define WM_QUIT                        0x002A
  246.  Define WM_SYSCOLORCHANGE              0x002B
  247.  Define WM_SYSVALUECHANGED             0x002D
  248.  Define WM_APPTERMINATENOTIFY          0x002E
  249.  Define WM_PRESPARAMCHANGED            0x002F
  250.  Define WM_QUERYCONVERTPOS             0x00B0
  251.  
  252. Group   LanguageSupport                1
  253.  
  254.  Define WM_PPAINT                      0x0011
  255.  Define WM_PSETFOCUS                   0x0012
  256.  Define WM_PSYSCOLORCHANGE             0x0013
  257.  Define WM_PSIZE                       0x0014
  258.  Define WM_PACTIVATE                   0x0015
  259.  Define WM_PCONTROL                    0x0016
  260.  
  261. Group   Control                        1
  262.  
  263.  Define WM_CONTROL                     0x0030
  264.  Define WM_VSCROLL                     0x0031
  265.  Define WM_HSCROLL                     0x0032
  266.  Define WM_INITMENU                    0x0033
  267.  Define WM_MENUSELECT                  0x0034
  268.  Define WM_MENUEND                     0x0035
  269.  Define WM_DRAWITEM                    0x0036
  270.  Define WM_MEASUREITEM                 0x0037
  271.  Define WM_QUERYDLGCODE                0x003A
  272.  Define WM_INITDLG                     0x003B
  273.  Define WM_SUBSTITUTESTRING            0x003C
  274.  Define WM_MATCHMNEMONIC               0x003D
  275.  Define WM_SAVEAPPLICATION             0x003E
  276.  
  277. Group   Frame                          1
  278.  
  279.  Define WM_FLASHWINDOW                 0x0040
  280.  Define WM_FORMATFRAME                 0x0041
  281.  Define WM_UPDATEFRAME                 0x0042
  282.  Define WM_FOCUSCHANGE                 0x0043
  283.  Define WM_SETBORDERSIZE               0x0044
  284.  Define WM_TRACKFRAME                  0x0045
  285.  Define WM_MINMAXFRAME                 0x0046
  286.  Define WM_SETICON                     0x0047
  287.  Define WM_QUERYICON                   0x0048
  288.  Define WM_SETACCELTABLE               0x0049
  289.  Define WM_QUERYACCELTABLE             0x004A
  290.  Define WM_TRANSLATEACCEL              0x004B
  291.  Define WM_QUERYTRACKINFO              0x004C
  292.  Define WM_QUERYBORDERSIZE             0x004D
  293.  Define WM_NEXTMENU                    0x004E
  294.  Define WM_ERASEBACKGROUND             0x004F
  295.  Define WM_QUERYFRAMEINFO              0x0050
  296.  Define WM_QUERYFOCUSCHAIN             0x0051
  297.  Define WM_OWNERPOSCHANGE              0x0052
  298.  Define WM_CALCFRAMERECT               0x0053
  299.  Define WM_WINDOWPOSCHANGED            0x0055
  300.  Define WM_QUERYFRAMECTLCOUNT          0x0059
  301.  Define WM_QUERYHELPINFO               0x005B
  302.  Define WM_SETHELPINFO                 0x005C
  303.  Define WM_ERROR                       0x005D
  304.  Define WM_REALIZEPALETTE              0x005E
  305.  
  306. Group   Clipboard                      1
  307.  
  308.  Define WM_RENDERFMT                   0x0060
  309.  Define WM_RENDERALLFMTS               0x0061
  310.  Define WM_DESTROYCLIPBOARD            0x0062
  311.  Define WM_PAINTCLIPBOARD              0x0063
  312.  Define WM_SIZECLIPBOARD               0x0064
  313.  Define WM_HSCROLLCLIPBOARD            0x0065
  314.  Define WM_VSCROLLCLIPBOARD            0x0066
  315.  Define WM_DRAWCLIPBOARD               0x0067
  316.  
  317. Group   MouseButtons                   1
  318.  
  319.  Define WM_BUTTON1DOWN                 0x0071
  320.  Define WM_BUTTON1UP                   0x0072
  321.  Define WM_BUTTON1DBLCLK               0x0073
  322.  Define WM_BUTTON2DOWN                 0x0074
  323.  Define WM_BUTTON2UP                   0x0075
  324.  Define WM_BUTTON2DBLCLK               0x0076
  325.  Define WM_BUTTON3DOWN                 0x0077
  326.  Define WM_BUTTON3UP                   0x0078
  327.  Define WM_BUTTON3DBLCLK               0x0079
  328.  
  329. Group   CharacterIO                    1
  330.  
  331.  Define WM_CHAR                        0x007A
  332.  Define WM_VIOCHAR                     0x007B
  333.  
  334. Group   Journal                        1
  335.  
  336.  Define WM_JOURNALNOTIFY               0x007C
  337.  
  338. Group   DynamicDataExchange            1
  339.  
  340.  Define WM_DDE_INITIATE                0x00A0
  341.  Define WM_DDE_REQUEST                 0x00A1
  342.  Define WM_DDE_ACK                     0x00A2
  343.  Define WM_DDE_DATA                    0x00A3
  344.  Define WM_DDE_ADVISE                  0x00A4
  345.  Define WM_DDE_UNADVISE                0x00A5
  346.  Define WM_DDE_POKE                    0x00A6
  347.  Define WM_DDE_EXECUTE                 0x00A7
  348.  Define WM_DDE_TERMINATE               0x00A8
  349.  Define WM_DDE_INITIATEACK             0x00A9
  350.  
  351. Group   Static Control                 1
  352.  
  353.  Define SM_SETHANDLE                   0x0100
  354.  Define SM_QUERYHANDLE                 0x0101
  355.  
  356. Group   Button                         1
  357.  
  358.  Define BM_CLICK                       0x0120
  359.  Define BM_QUERYCHECKINDEX             0x0121
  360.  Define BM_QUERYHILITE                 0x0122
  361.  Define BM_SETHILITE                   0x0123
  362.  Define BM_QUERYCHECK                  0x0124
  363.  Define BM_SETCHECK                    0x0125
  364.  Define BM_SETDEFAULT                  0x0126
  365.  
  366. Group   EntryField                     1
  367.  
  368.  Define EM_QUERYCHANGED                0x0140
  369.  Define EM_QUERYSEL                    0x0141
  370.  Define EM_SETSEL                      0x0142
  371.  Define EM_SETTEXTLIMIT                0x0143
  372.  Define EM_CUT                         0x0144
  373.  Define EM_COPY                        0x0145
  374.  Define EM_CLEAR                       0x0146
  375.  Define EM_PASTE                       0x0147
  376.  Define EM_QUERYFIRSTCHAR              0x0148
  377.  Define EM_SETFIRSTCHAR                0x0149
  378.  Define EM_QUERYREADONLY               0x014A
  379.  Define EM_SETREADONLY                 0x014B
  380.  Define EM_SETINSERTMODE               0x014C
  381.  
  382. Group   ListBox                        1
  383.  
  384.  Define LM_QUERYITEMCOUNT              0x0160
  385.  Define LM_INSERTITEM                  0x0161
  386.  Define LM_SETTOPINDEX                 0x0162
  387.  Define LM_DELETEITEM                  0x0163
  388.  Define LM_SELECTITEM                  0x0164
  389.  Define LM_QUERYSELECTION              0x0165
  390.  Define LM_SETITEMTEXT                 0x0166
  391.  Define LM_QUERYITEMTEXTLENGTH         0x0167
  392.  Define LM_QUERYITEMTEXT               0x0168
  393.  Define LM_SETITEMHANDLE               0x0169
  394.  Define LM_QUERYITEMHANDLE             0x016A
  395.  Define LM_SEARCHSTRING                0x016B
  396.  Define LM_SETITEMHEIGHT               0x016C
  397.  Define LM_QUERYTOPINDEX               0x016D
  398.  Define LM_DELETEALL                   0x016E
  399.  
  400. Group   ComboBox                       1
  401.  
  402.  Define CBM_SHOWLIST                   0x0170
  403.  Define CBM_HILITE                     0x0171
  404.  Define CBM_ISLISTSHOWING              0x0172
  405.  
  406. Group   Menu                           1
  407.  
  408.  Define MM_INSERTITEM                  0x0180
  409.  Define MM_DELETEITEM                  0x0181
  410.  Define MM_QUERYITEM                   0x0182
  411.  Define MM_SETITEM                     0x0183
  412.  Define MM_QUERYITEMCOUNT              0x0184
  413.  Define MM_STARTMENUMODE               0x0185
  414.  Define MM_ENDMENUMODE                 0x0186
  415.  Define MM_REMOVEITEM                  0x0188
  416.  Define MM_SELECTITEM                  0x0189
  417.  Define MM_QUERYSELITEMID              0x018A
  418.  Define MM_QUERYITEMTEXT               0x018B
  419.  Define MM_QUERYITEMTEXTLENGTH         0x018C
  420.  Define MM_SETITEMHANDLE               0x018D
  421.  Define MM_SETITEMTEXT                 0x018E
  422.  Define MM_ITEMPOSITIONFROMID          0x018F
  423.  Define MM_ITEMIDFROMPOSITION          0x0190
  424.  Define MM_QUERYITEMATTR               0x0191
  425.  Define MM_SETITEMATTR                 0x0192
  426.  Define MM_ISITEMVALID                 0x0193
  427.  Define MM_QUERYITEMRECT               0x0194
  428.  
  429. Group   ScrollBar                      1
  430.  
  431.  Define SBM_SETSCROLLBAR               0x01A0
  432.  Define SBM_SETPOS                     0x01A1
  433.  Define SBM_QUERYPOS                   0x01A2
  434.  Define SBM_QUERYRANGE                 0x01A3
  435.  Define SBM_SETTHUMBSIZE               0x01A6
  436.  
  437. Group   MultiLineEdit                  1
  438.  
  439.  Define MLM_SETTEXTLIMIT               0x01B0
  440.  Define MLM_QUERYTEXTLIMIT             0x01B1
  441.  Define MLM_SETFORMATRECT              0x01B2
  442.  Define MLM_QUERYFORMATRECT            0x01B3
  443.  Define MLM_SETWRAP                    0x01B4
  444.  Define MLM_QUERYWRAP                  0x01B5
  445.  Define MLM_SETTABSTOP                 0x01B6
  446.  Define MLM_QUERYTABSTOP               0x01B7
  447.  Define MLM_SETREADONLY                0x01B8
  448.  Define MLM_QUERYREADONLY              0x01B9
  449.  Define MLM_QUERYCHANGED               0x01BA
  450.  Define MLM_SETCHANGED                 0x01BB
  451.  Define MLM_QUERYLINECOUNT             0x01BC
  452.  Define MLM_CHARFROMLINE               0x01BD
  453.  Define MLM_LINEFROMCHAR               0x01BE
  454.  Define MLM_QUERYLINELENGTH            0x01BF
  455.  Define MLM_QUERYTEXTLENGTH            0x01C0
  456.  Define MLM_FORMAT                     0x01C1
  457.  Define MLM_SETIMPORTEXPORT            0x01C2
  458.  Define MLM_IMPORT                     0x01C3
  459.  Define MLM_EXPORT                     0x01C4
  460.  Define MLM_DELETE                     0x01C6
  461.  Define MLM_QUERYFORMATLINELENGTH      0x01C7
  462.  Define MLM_QUERYFORMATTEXTLENGTH      0x01C8
  463.  Define MLM_INSERT                     0x01C9
  464.  Define MLM_SETSEL                     0x01CA
  465.  Define MLM_QUERYSEL                   0x01CB
  466.  Define MLM_QUERYSELTEXT               0x01CC
  467.  Define MLM_QUERYUNDO                  0x01CD
  468.  Define MLM_UNDO                       0x01CE
  469.  Define MLM_RESETUNDO                  0x01CF
  470.  Define MLM_QUERYFONT                  0x01D0
  471.  Define MLM_SETFONT                    0x01D1
  472.  Define MLM_SETTEXTCOLOR               0x01D2
  473.  Define MLM_QUERYTEXTCOLOR             0x01D3
  474.  Define MLM_SETBACKCOLOR               0x01D4
  475.  Define MLM_QUERYBACKCOLOR             0x01D5
  476.  Define MLM_QUERYFIRSTCHAR             0x01D6
  477.  Define MLM_SETFIRSTCHAR               0x01D7
  478.  Define MLM_CUT                        0x01D8
  479.  Define MLM_COPY                       0x01D9
  480.  Define MLM_PASTE                      0x01DA
  481.  Define MLM_CLEAR                      0x01DB
  482.  Define MLM_ENABLEREFRESH              0x01DC
  483.  Define MLM_DISABLEREFRESH             0x01DD
  484.  Define MLM_SEARCH                     0x01DE
  485.  Define MLM_QUERYIMPORTEXPORT          0x01DF
  486.  
  487. Group   TitleBar                       1
  488.  
  489.  Define TBM_SETHILITE                  0x01E3
  490.  Define TBM_QUERYHILITE                0x01E4
  491.  
  492. Group   SpinButton                     1
  493.  
  494.  Define SPBM_OVERRIDESETLIMITS         0x0200
  495.  Define SPBM_QUERYLIMITS               0x0201
  496.  Define SPBM_SETTEXTLIMIT              0x0202
  497.  Define SPBM_SPINUP                    0x0203
  498.  Define SPBM_SPINDOWN                  0x0204
  499.  Define SPBM_QUERYVALUE                0x0205
  500.  Define SPBN_UPARROW                   0x020A
  501.  Define SPBN_DOWNARROW                 0x020B
  502.  Define SPBN_ENDSPIN                   0x020C
  503.  Define SPBN_CHANGE                    0x020D
  504.  Define SPBN_SETFOCUS                  0x020E
  505.  Define SPBN_KILLFOCUS                 0x020F
  506.  
  507. Group   Help/IPF                       1
  508.  
  509.  Define HM_DISMISS_WINDOW              0x0221
  510.  Define HM_DISPLAY_HELP                0x0222
  511.  Define HM_EXT_HELP                    0x0223
  512.  Define HM_SET_ACTIVE_WINDOW           0x0224
  513.  Define HM_LOAD_HELP_TABLE             0x0225
  514.  Define HM_CREATE_HELP_TABLE           0x0226
  515.  Define HM_SET_HELP_WINDOW_TITLE       0x0227
  516.  Define HM_SET_SHOW_PANEL_ID           0x0228
  517.  Define HM_REPLACE_HELP_FOR_HELP       0x0229
  518.  Define HM_HELP_INDEX                  0x022A
  519.  Define HM_HELP_CONTENTS               0x022B
  520.  Define HM_KEYS_HELP                   0x022C
  521.  Define HM_SET_HELP_LIBRARY_NAME       0x022D
  522.  Define HM_SET_OBJCOM_WINDOW           0x0238
  523.  Define HM_UPDATE_OBJCOM_WINDOW_CHAIN  0x0239
  524.  Define HM_QUERY_DDF_DATA              0x023A
  525.  Define HM_INVALIDATE_DDF_DATA         0x023B
  526.  Define HM_QUERY                       0x023C
  527.  Define HM_SET_COVERPAGE_SIZE          0x023D
  528.  Define HM_ERROR                       0x022E
  529.  Define HM_HELPSUBITEM_NOT_FOUND       0x022F
  530.  Define HM_QUERY_KEYS_HELP             0x0230
  531.  Define HM_TUTORIAL                    0x0231
  532.  Define HM_EXT_HELP_UNDEFINED          0x0232
  533.  Define HM_ACTIONBAR_COMMAND           0x0233
  534.  Define HM_INFORM                      0x0234
  535.  Define HM_NOTIFY                      0x0242
  536.  Define HM_SET_USERDATA                0x0243
  537.  Define HM_CONTROL                     0x0244
  538.  
  539. Group   DragDrop                       1
  540.  
  541.  Define DM_DROP                        0x032F
  542.  Define DM_DRAGOVER                    0x032E
  543.  Define DM_DRAGLEAVE                   0x032D
  544.  Define DM_DROPHELP                    0x032C
  545.  Define DM_ENDCONVERSATION             0x032B
  546.  Define DM_PRINT                       0x032A
  547.  Define DM_RENDER                      0x0329
  548.  Define DM_RENDERCOMPLETE              0x0328
  549.  Define DM_RENDERPREPARE               0x0327
  550.  Define DM_DRAGFILECOMPLETE            0x0326
  551.  Define DM_EMPHASIZETARGET             0x0325
  552.  Define DM_DRAGERROR                   0x0324
  553.  Define DM_FILERENDERED                0x0323
  554.  Define DM_RENDERFILE                  0x0322
  555.  Define DM_DRAGOVERNOTIFY              0x0321
  556.  
  557. Group   Container                      1
  558.  
  559.  Define CM_ALLOCDETAILFIELDINFO        0x0330
  560.  Define CM_ALLOCRECORD                 0x0331
  561.  Define CM_ARRANGE                     0x0332
  562.  Define CM_ERASERECORD                 0x0333
  563.  Define CM_FILTER                      0x0334
  564.  Define CM_FREEDETAILFIELDINFO         0x0335
  565.  Define CM_FREERECORD                  0x0336
  566.  Define CM_HORZSCROLLSPLITWINDOW       0x0337
  567.  Define CM_INSERTDETAILFIELDINFO       0x0338
  568.  Define CM_INSERTRECORD                0x0339
  569.  Define CM_INVALIDATEDETAILFIELDINFO   0x033A
  570.  Define CM_INVALIDATERECORD            0x033B
  571.  Define CM_PAINTBACKGROUND             0x033C
  572.  Define CM_QUERYCNRINFO                0x033D
  573.  Define CM_QUERYDETAILFIELDINFO        0x033E
  574.  Define CM_QUERYDRAGIMAGE              0x033F
  575.  Define CM_QUERYRECORD                 0x0340
  576.  Define CM_QUERYRECORDEMPHASIS         0x0341
  577.  Define CM_QUERYRECORDFROMRECT         0x0342
  578.  Define CM_QUERYRECORDRECT             0x0343
  579.  Define CM_QUERYVIEWPORTRECT           0x0344
  580.  Define CM_REMOVEDETAILFIELDINFO       0x0345
  581.  Define CM_REMOVERECORD                0x0346
  582.  Define CM_SCROLLWINDOW                0x0347
  583.  Define CM_SEARCHSTRING                0x0348
  584.  Define CM_SETCNRINFO                  0x0349
  585.  Define CM_SETRECORDEMPHASIS           0x034A
  586.  Define CM_SORTRECORD                  0x034B
  587.  Define CM_OPENEDIT                    0x034C
  588.  Define CM_CLOSEEDIT                   0x034D
  589.  Define CM_COLLAPSETREE                0x034E
  590.  Define CM_EXPANDTREE                  0x034F
  591.  Define CM_QUERYRECORDINFO             0x0350
  592.  
  593. Group   Notebook                       1
  594.  
  595.  Define BKM_CALCPAGERECT               0x0353
  596.  Define BKM_DELETEPAGE                 0x0354
  597.  Define BKM_INSERTPAGE                 0x0355
  598.  Define BKM_INVALIDATETABS             0x0356
  599.  Define BKM_TURNTOPAGE                 0x0357
  600.  Define BKM_QUERYPAGECOUNT             0x0358
  601.  Define BKM_QUERYPAGEID                0x0359
  602.  Define BKM_QUERYPAGEDATA              0x035A
  603.  Define BKM_QUERYPAGEWINDOWHWND        0x035B
  604.  Define BKM_QUERYTABBITMAP             0x035C
  605.  Define BKM_QUERYTABTEXT               0x035D
  606.  Define BKM_SETDIMENSIONS              0x035E
  607.  Define BKM_SETPAGEDATA                0x035F
  608.  Define BKM_SETPAGEWINDOWHWND          0x0360
  609.  Define BKM_SETSTATUSLINETEXT          0x0361
  610.  Define BKM_SETTABBITMAP               0x0362
  611.  Define BKM_SETTABTEXT                 0x0363
  612.  Define BKM_SETNOTEBOOKCOLORS          0x0364
  613.  Define BKM_QUERYPAGESTYLE             0x0365
  614.  Define BKM_QUERYSTATUSLINETEXT        0x0366
  615.  
  616. Group   Slider                         1
  617.  
  618.  Define SLM_ADDDETENT                  0x0369
  619.  Define SLM_QUERYDETENTPOS             0x036A
  620.  Define SLM_QUERYSCALETEXT             0x036B
  621.  Define SLM_QUERYSLIDERINFO            0x036C
  622.  Define SLM_QUERYTICKPOS               0x036D
  623.  Define SLM_QUERYTICKSIZE              0x036E
  624.  Define SLM_REMOVEDETENT               0x036F
  625.  Define SLM_SETSCALETEXT               0x0370
  626.  Define SLM_SETSLIDERINFO              0x0371
  627.  Define SLM_SETTICKSIZE                0x0372
  628.  
  629. Group   ValueSet                       1
  630.  
  631.  Define VM_QUERYITEM                   0x0375
  632.  Define VM_QUERYITEMATTR               0x0376
  633.  Define VM_QUERYMETRICS                0x0377
  634.  Define VM_QUERYSELECTEDITEM           0x0378
  635.  Define VM_SELECTITEM                  0x0379
  636.  Define VM_SETITEM                     0x037A
  637.  Define VM_SETITEMATTR                 0x037B
  638.  Define VM_SETMETRICS                  0x037C
  639.  
  640. Group   ExtMouseButtons                1
  641.  
  642.  Define WM_CHORD                       0x0410
  643.  Define WM_BUTTON1MOTIONSTART          0x0411
  644.  Define WM_BUTTON1MOTIONEND            0x0412
  645.  Define WM_BUTTON1CLICK                0x0413
  646.  Define WM_BUTTON2MOTIONSTART          0x0414
  647.  Define WM_BUTTON2MOTIONEND            0x0415
  648.  Define WM_BUTTON2CLICK                0x0416
  649.  Define WM_BUTTON3MOTIONSTART          0x0417
  650.  Define WM_BUTTON3MOTIONEND            0x0418
  651.  Define WM_BUTTON3CLICK                0x0419
  652.  
  653. Group   MouseTranslate                 1
  654.  
  655.  Define WM_BEGINDRAG                   0x0420
  656.  Define WM_ENDDRAG                     0x0421
  657.  Define WM_SINGLESELECT                0x0422
  658.  Define WM_OPEN                        0x0423
  659.  Define WM_CONTEXTMENU                 0x0424
  660.  Define WM_CONTEXTHELP                 0x0425
  661.  Define WM_TEXTEDIT                    0x0426
  662.  Define WM_BEGINSELECT                 0x0427
  663.  Define WM_ENDSELECT                   0x0428
  664.  
  665. Group   MediaControlInterface          1
  666.  
  667.  Define MM_MCINOTIFY                   0x0500
  668.  Define MM_MCIPASSDEVICE               0x0501
  669.  Define MM_MCIPOSITIONCHANGE           0x0502
  670.  Define MM_MCICUEPOINT                 0x0503
  671.  Define MM_MCIPLAYLISTMESSAGE          0x0504
  672.  Define MM_MCIEVENT                    0x0505
  673.  Define MM_MCISYNCH                    0x0506
  674.  
  675. Group   SecondaryWindow                1
  676.  
  677.  Define WM_INITSECONDARYWINDOW         0x0519
  678.  
  679. Group   GraphicButton                  1
  680.  
  681.  Define GBN_BUTTONUP                   0x0524
  682.  Define GBN_BUTTONDOWN                 0x0525
  683.  Define GBN_BUTTONHILITE               0x0526
  684.  Define GBM_SETGRAPHICDATA             0x052A
  685.  Define GBM_ANIMATE                    0x052B
  686.  Define GBM_SETANIMATIONRATE           0x052C
  687.  Define GBM_QUERYANIMATIONACTIVE       0x052D
  688.  Define GBM_QUERYANIMATIONRATE         0x052E
  689.  Define GBM_SETBITMAPINDEX             0x052F
  690.  Define GBM_QUERYBITMAPINDEX           0x0530
  691.  Define GBM_SETSTATE                   0x0531
  692.  Define GBM_QUERYSTATE                 0x0532
  693.  Define GBM_SETTEXTPOSITION            0x0533
  694.  Define GBM_QUERYTEXTPOSITION          0x0534
  695.  Define MM_TABHELP                     0x054C
  696.  
  697. Group   CircularSlider                 1
  698.  
  699.  Define CSM_QUERYRANGE                 0x053D
  700.  Define CSM_SETRANGE                   0x053E
  701.  Define CSM_QUERYVALUE                 0x053F
  702.  Define CSM_SETVALUE                   0x0540
  703.  Define CSM_QUERYRADIUS                0x0541
  704.  Define CSM_SETINCREMENT               0x0542
  705.  Define CSM_QUERYINCREMENT             0x0543
  706.  Define CSM_SETBITMAPDATA              0x0544
  707.  Define CSN_SETFOCUS                   0x0548
  708.  Define CSN_CHANGED                    0x0549
  709.  Define CSN_TRACKING                   0x054A
  710.  Define CSN_QUERYBACKGROUNDCOLOR       0x054B
  711.  
  712. /* Standard message status */
  713.  
  714. Include All
  715.  
  716. Exclude MouseMovement
  717. Exclude WM_QUERYFOCUSCHAIN
  718.  
  719.  
  720. ΓòÉΓòÉΓòÉ 10. Using Trigger Messages ΓòÉΓòÉΓòÉ
  721.  
  722. It is possible to define messages to trigger the automatic thawing or freezing 
  723. of the message list using: 
  724.  
  725.  1. the Message Filtering dialog 
  726.  2. a profile file that you have created. 
  727.  
  728. Trigger messages are valuable when you only want to see the messages that 
  729. occur: 
  730.  
  731. o up to a event 
  732. o after a event 
  733. o between two events (see example below) 
  734.  
  735. For example, to determine only the messages that are processed by the OS/2 
  736. Desktop when mouse button #1 is pressed and released: 
  737.  
  738.  1. Use the Freeze pull-down to stop messages from being added to the message 
  739.     list 
  740.  2. Open the Message Filtering dialog 
  741.  3. Ensure that both the WM_BUTTON1DOWN and WM_BUTTON1UP messages are currently 
  742.     included. 
  743.  4. Select only the WM_BUTTON1DOWN message then press the Thaw pushbutton. Now 
  744.     when this message is seen, messages will start being added to the message 
  745.     list. 
  746.  5. Select only the WM_BUTTON1UP message then press the Freeze pushbutton. When 
  747.     this message is seen, messages will stop being added to the message list. 
  748.  6. Select Done to close the dialog. 
  749.  7. Use the Select desktop window pull-down to select the OS/2 Desktop for 
  750.     spying. 
  751.  8. Move the mouse cursor over a blank area of the desktop.  Press and hold 
  752.     mouse button #1.  You should see messages added to the message list. 
  753.  9. Release the mouse button and the message list should freeze. 
  754.  
  755. This is a sample of what the previous steps generate: 
  756.  
  757. ΓöîΓöÇΓöÇΓöÇ Step above
  758. Γöé ΓöîΓöÇ List items
  759.  
  760. 1 <<< list frozen >>>
  761. 8 <<< list thawed by trigger >>>
  762. 8 WM_BUTTON1DOWN     01EA0191 00000000 P 04801E64
  763. 8 WM_FOCUSCHANGE     8FE0CB9C 00000001 S 04801E64
  764. 8 WM_ACTIVATE        00000001 04601D64 S 04801E64
  765. 8 WM_SETSELECTION    00000001 00000000 S 04801E64
  766. 8 WM_SETFOCUS        8FE0CB9C 00000001 S 04801E64
  767. 8 CM_PAINTBACKGROUND 0003ED70 00000000 S 04801E64
  768. 8 CM_QUERYCNRINFO    0003E910 0000005C S 04801E64
  769. 8 WM_CONTROL         00708008 04801E64 S 04801E64
  770. 9 WM_BUTTON1UP       01EA0192 00000000 P 04801E64
  771. 9 <<< list frozen by trigger >>>
  772.  
  773.  
  774. ΓòÉΓòÉΓòÉ 11. Message Filtering Dialog ΓòÉΓòÉΓòÉ
  775.  
  776. This dialog allows you to assign spying attributes to individual messages. 
  777.  
  778. All of the messages are displayed with their current attributes. Select the 
  779. item(s) you want to adjust, then apply an attribute by using an attribute 
  780. button. After a button is used, each item is updated in the list. Press the 
  781. Done button when you have completed all assignments. 
  782.  
  783. Include   when the message is detected, it will be added to the spy list. the 
  784.           message will also be examined to see if it is a triggering event 
  785. Exclude   when the message is detected, it will not be added to the spy list. 
  786.           the message's triggering attributes will not be examined 
  787. Freeze    when the message is detected and is currently included, it will 
  788.           automatically trigger the freezing of the spy list 
  789. Thaw      when the message is detected and is currently included, it will 
  790.           automatically trigger the thawing of the spy list 
  791. No trigger removes automatic freeze/thaw triggering 
  792. Reset     resets message specific dynamic data (like how many times the message 
  793.           has been seen, etc) 
  794. Delete    deletes each message (it can NO longer be spyed..) 
  795.  
  796. Notes: 
  797.  
  798. o usually you will open this dialog after setting the filter list to a known 
  799.   state (using one or more the following pull-downs: Include All, Exclude All, 
  800.   Freeze, or Thaw) 
  801. o Delete is normally used when creating custom profiles 
  802. o the Color list allows you to additionally highlight messages in the spy list 
  803.   with a special color. Pick a color before selecting an attribute pushbutton. 
  804.  
  805.  
  806. ΓòÉΓòÉΓòÉ 12. Group Filtering Dialog ΓòÉΓòÉΓòÉ
  807.  
  808. This dialog allows you to assign spying attributes to messages based on their 
  809. logical grouping. 
  810.  
  811. All of the groups are displayed with their current attributes. Select the 
  812. item(s) you want to adjust, then apply an attribute by using an attribute 
  813. button. After a button is used, each item is updated in the list. Press the 
  814. Done button when you have completed all assignments. 
  815.  
  816. Include   when a message in this group is detected, it will be added to the spy 
  817.           list 
  818. Exclude   when a message in this group is detected, it will never added to the 
  819.           spy list 
  820. Delete    deletes all messages defined in this group (they can NO longer be 
  821.           spyed..) 
  822.  
  823. Notes: 
  824.  
  825. o usually you will open this dialog after setting the filter list to a known 
  826.   state (using one or more the following pull-downs: Include All, or Exclude 
  827.   All) 
  828. o Delete is normally used when creating custom profiles 
  829. o the Color list allows you to additionally highlight messages in the spy list 
  830.   with a special color. Pick a color before selecting an attribute pushbutton. 
  831.  
  832.  
  833. ΓòÉΓòÉΓòÉ 13. Window Selection dialog ΓòÉΓòÉΓòÉ
  834.  
  835. This dialog allows you to select a window for spying from a list of windows who 
  836. are descendents of HWND_DESKTOP and/or HWND_OBJECT. The list includes the 
  837. following data: 
  838.  
  839.  Hmq: 09112F78 Hwnd: 0000968F Linage: DSK.491.1 Class: Clock
  840.                                             
  841.  Windows       Windows                Γöé   P   T  Windows
  842.   queue         handle       DeSKtop ΓöÇΓöñ   I   I   class name
  843.                              OBJect  ΓöÇΓöÿ   D   D
  844.  
  845. Select the window from the list that you would like to spy and then press a 
  846. pushbutton: 
  847.  
  848. Spy HWND          begins spying on the selected window's handle. 
  849. Spy HMQ           begins spying on the selected window's queue. 
  850. Refresh           refreshes the list using the current DESKTOP windows and 
  851.                   OBJECT windows values as criteria. 
  852. Cancel            ends the dialog and preserves the current window/queue being 
  853.                   spyed. 
  854.  
  855.  
  856. ΓòÉΓòÉΓòÉ 14. Message Detail dialog ΓòÉΓòÉΓòÉ
  857.  
  858. This dialog displays detailed information about a particular spied message. 
  859. This includes displaying the message parameters in various formats as well as 
  860. message specific usage information. 
  861.  
  862. To open this dialog, double-click mouse button #1 on a message in the message 
  863. list. 
  864.  
  865.  
  866. ΓòÉΓòÉΓòÉ 15. Notes dialog ΓòÉΓòÉΓòÉ
  867.  
  868. This dialog allows you to enter a text note that is then placed in the PMSPY 
  869. list and possible the LOG file. 
  870.  
  871. You can use these notes to document what is happening, the beginning or end of 
  872. a test case, etc. 
  873.  
  874. Enter the desired note text then press one of the pushbuttons. 
  875.  
  876. OK          This will accept the note text that you have entered. If you have 
  877.             entered text, it will be placed in the PMSPY list and remembered as 
  878.             the default note text for the next dialog invocation. If you have 
  879.             not entered text, you will be warned by a beep. 
  880. Cancel      This will cancel the dialog.  All note text is discarded. 
  881.  
  882.  
  883. ΓòÉΓòÉΓòÉ 16. Font dialog ΓòÉΓòÉΓòÉ
  884.  
  885. This dialog allows you to select the non-proportional font to be used in the 
  886. PMSPY message list and dialogs. 
  887.  
  888. Select the desired font then press one of the pushbuttons. 
  889.  
  890. OK       The PMSPY list will change to use the selected font. 
  891. Cancel   This will cancel the dialog.  All note text is discarded. 
  892.  
  893.  
  894. ΓòÉΓòÉΓòÉ 17. File ΓòÉΓòÉΓòÉ
  895.  
  896. This item allows you to work with: 
  897.  
  898. o A profile file that you have created. 
  899. o A log file for saving the message list contents on disk. 
  900. o The default profile 
  901.  
  902.  
  903. ΓòÉΓòÉΓòÉ 18. Message profile ΓòÉΓòÉΓòÉ
  904.  
  905. This pull-down allows you to work with profile files that you have created. 
  906.  
  907.  
  908. ΓòÉΓòÉΓòÉ 19. Open, replace current ΓòÉΓòÉΓòÉ
  909.  
  910. This pull-down allows you to open a profile file that you have created.  It 
  911. totally replaces the current profile. You would want to replace the current 
  912. profile to ensure that only the specific messages that you are interested in 
  913. are defined. 
  914.  
  915. A file open dialog is opened to let you select the desired profile file. 
  916.  
  917.  
  918. ΓòÉΓòÉΓòÉ 20. Open, append to current ΓòÉΓòÉΓòÉ
  919.  
  920. This pull-down allows you to open a profile file that you have created.  It is 
  921. appended to the current profile. You would want to append to the current 
  922. profile to only incrementally add application specific messages to those that 
  923. are currently defined. For example, you may create a profile for your 
  924. application's WM_USER and above messages.  You would then append that to the 
  925. PMSPY default profile to be able to process standard PM as well as application 
  926. unique messages. 
  927.  
  928. A file open dialog is opened to let you select the desired profile file. 
  929.  
  930.  
  931. ΓòÉΓòÉΓòÉ 21. Save current ΓòÉΓòÉΓòÉ
  932.  
  933. This pull-down allows you to save the current profile in a disk file. For 
  934. example, you may want to create a custom profile. After starting PMSPY you 
  935. would then select this pull-down to save the default profile in a disk file. 
  936.  
  937. A file open dialog is opened to let you select the desired profile file. 
  938.  
  939.  
  940. ΓòÉΓòÉΓòÉ 22. Log file ΓòÉΓòÉΓòÉ
  941.  
  942. This pull-down allows you to work with a log file 
  943.  
  944.  
  945. ΓòÉΓòÉΓòÉ 23. Open ΓòÉΓòÉΓòÉ
  946.  
  947. This pull-down allows you to open a log file for saving the message list 
  948. contents on disk. The log file provides an added debugging and/or learning 
  949. opportunity because it contains all of the messages and notes that have 
  950. occurred since the log file was opened. 
  951.  
  952. A file open dialog is opened to let you select the desired log file. 
  953.  
  954.  
  955. ΓòÉΓòÉΓòÉ 24. Open with list snapshot ΓòÉΓòÉΓòÉ
  956.  
  957. This pull-down allows you to open a log file for saving the message list 
  958. contents on disk. After the log file is opened, the current contents of the 
  959. message list is written to it.  This after the fact logging can be a very 
  960. useful debug aid. 
  961.  
  962. The log file provides an added debugging and/or learning opportunity because it 
  963. contains all of the messages and notes that have occurred since the log file 
  964. was opened. 
  965.  
  966. A file open dialog is opened to let you select the desired log file. 
  967.  
  968.  
  969. ΓòÉΓòÉΓòÉ 25. Close ΓòÉΓòÉΓòÉ
  970.  
  971. This pull-down allows you to close the log file. 
  972.  
  973.  
  974. ΓòÉΓòÉΓòÉ 26. Default message profile ΓòÉΓòÉΓòÉ
  975.  
  976. This pull-down allows you to work with the default profile file shipped with 
  977. PMSPY. 
  978.  
  979.  
  980. ΓòÉΓòÉΓòÉ 27. Open, replace current ΓòÉΓòÉΓòÉ
  981.  
  982. This pull-down allows you to totally replace the current profile with the 
  983. default profile file. You would want to replace the current profile to restore 
  984. PMSPY back to its startup state. 
  985.  
  986.  
  987. ΓòÉΓòÉΓòÉ 28. Open, append to current ΓòÉΓòÉΓòÉ
  988.  
  989. This pull-down allows you to append the current profile with the default 
  990. profile file. This would add the standard set of PM messages.  Since PMSPY has 
  991. already defined the standard messages, this is one less thing that you as an 
  992. application developer have to worry about. 
  993.  
  994.  
  995. ΓòÉΓòÉΓòÉ 29. Browse ΓòÉΓòÉΓòÉ
  996.  
  997. This pull-down allows you to browse the default profile file. This provides a 
  998. handy reference to all of the standard PM messages (including their hex 
  999. values). 
  1000.  
  1001.  
  1002. ΓòÉΓòÉΓòÉ 30. Exit ΓòÉΓòÉΓòÉ
  1003.  
  1004. This pull-down allows you to exit PMSPY. 
  1005.  
  1006. Note:  If you select this pull-down, the current agent characteristics are 
  1007. saved. 
  1008.  
  1009.  
  1010. ΓòÉΓòÉΓòÉ 31. Spyon ΓòÉΓòÉΓòÉ
  1011.  
  1012. This item allows you to: 
  1013.  
  1014. o Select the window to spy on 
  1015. o Stop spying on a window 
  1016.  
  1017.  
  1018. ΓòÉΓòÉΓòÉ 32. Select desktop window ΓòÉΓòÉΓòÉ
  1019.  
  1020. This pull-down allows you to select a visible window from the desktop for 
  1021. spying. The pointer changes to a cross-hair to indicate that window selection 
  1022. is in progress. If mouse moves over the current PMSPY window, the pointer 
  1023. changes to an illegal pointer. 
  1024.  
  1025. Position the pointer over the window you wish to spy and use one of the 
  1026. following mouse actions to complete the selection process: 
  1027.  
  1028. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1029. ΓöéMouse  ΓöéWhat happens then   Γöé
  1030. Γöéaction Γöé                    Γöé
  1031. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1032. Γöésingle ΓöéThe window and queueΓöé
  1033. Γöéclick  Γöéhandles will be     Γöé
  1034. Γöébutton Γöéretrieved for that  Γöé
  1035. Γöé#1     Γöéwindow and spying   Γöé
  1036. Γöé       Γöéwill begin as       Γöé
  1037. Γöé       Γöémessages move       Γöé
  1038. Γöé       Γöéthrough the queue orΓöé
  1039. Γöé       Γöéare sent to the     Γöé
  1040. Γöé       Γöéwindow. The window  Γöé
  1041. Γöé       Γöéor queue handle willΓöé
  1042. Γöé       Γöébe displayed in the Γöé
  1043. Γöé       ΓöéPMSPY titlebar.     Γöé
  1044. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1045. Γöésingle ΓöéReveals the class   Γöé
  1046. Γöéclick  Γöéname, window and    Γöé
  1047. Γöébutton Γöéqueue handles for   Γöé
  1048. Γöé#2     Γöéthe window beneath  Γöé
  1049. Γöé       Γöéthe cursor. The     Γöé
  1050. Γöé       Γöéselection process   Γöé
  1051. Γöé       Γöéremains active.     Γöé
  1052. Γöé       ΓöéThis is a handy way Γöé
  1053. Γöé       Γöéto explore the      Γöé
  1054. Γöé       Γöécurrent set of      Γöé
  1055. Γöé       Γöéwindows.            Γöé
  1056. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1057. Γöédouble ΓöéCancels the         Γöé
  1058. Γöéclick  Γöéselection of a      Γöé
  1059. Γöébutton Γöéwindow.             Γöé
  1060. Γöé#2     Γöé                    Γöé
  1061. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1062.  
  1063.  
  1064. ΓòÉΓòÉΓòÉ 33. Select any window ΓòÉΓòÉΓòÉ
  1065.  
  1066. This pull-down displays a list of windows who are descendents of HWND_DESKTOP 
  1067. and/or HWND_OBJECT. A window or queue can then be selected list for spying. 
  1068.  
  1069.  
  1070. ΓòÉΓòÉΓòÉ 34. System message queue ΓòÉΓòÉΓòÉ
  1071.  
  1072. This pull-down allows you to select the PM system message queue for spying. 
  1073. This allows you to spy all windows and application message queues at once. 
  1074.  
  1075. W A R N I N G 
  1076.  
  1077. Since spying on the system message queue can greatly affect PM and/or 
  1078. application operation, it is recommended that all unnecessary PM messages be 
  1079. excluded from spying before using this selection. Only the minimum required 
  1080. subset of messages should be included. 
  1081.  
  1082.  
  1083. ΓòÉΓòÉΓòÉ 35. Deselect current ΓòÉΓòÉΓòÉ
  1084.  
  1085. This pull-down allows you to stop spying on the selected window or queue. 
  1086.  
  1087.  
  1088. ΓòÉΓòÉΓòÉ 36. SpyWhat ΓòÉΓòÉΓòÉ
  1089.  
  1090. This item allows you to: 
  1091.  
  1092. o Spy on the selected window only 
  1093. o Spy on all windows supported by the current message queue 
  1094.  
  1095.  
  1096. ΓòÉΓòÉΓòÉ 37. Spy on window ΓòÉΓòÉΓòÉ
  1097.  
  1098. This pull-down limits the spying of messages to only those destined for the 
  1099. current window or OBJECT. Any message not destined for that specific window is 
  1100. ignored. 
  1101.  
  1102.  
  1103. ΓòÉΓòÉΓòÉ 38. Spy on queue ΓòÉΓòÉΓòÉ
  1104.  
  1105. This pull-down expands the spying scope to include messages for all windows 
  1106. supported by the current message queue. This capability to examine all windows 
  1107. is required if you desire to debug dialogs. 
  1108.  
  1109.  
  1110. ΓòÉΓòÉΓòÉ 39. Options ΓòÉΓòÉΓòÉ
  1111.  
  1112. This item allows you to: 
  1113.  
  1114. o Control the message list 
  1115. o Control the log file 
  1116. o Add a text note 
  1117.  
  1118.  
  1119. ΓòÉΓòÉΓòÉ 40. Spy list ΓòÉΓòÉΓòÉ
  1120.  
  1121. This set of pull-downs allow you to control message list operations. 
  1122.  
  1123.  
  1124. ΓòÉΓòÉΓòÉ 41. Clear ΓòÉΓòÉΓòÉ
  1125.  
  1126. This pull-down clears all of the messages and/or notes from the message list. 
  1127.  
  1128. You may want to clear the list as part of the setup for debugging a special 
  1129. problem. 
  1130.  
  1131.  
  1132. ΓòÉΓòÉΓòÉ 42. Freeze ΓòÉΓòÉΓòÉ
  1133.  
  1134. This pull-down freezes the message list. This means that no new messages will 
  1135. be automatically added to the list until either: 
  1136.  
  1137.  1. you manually thaw the message list 
  1138.  2. a trigger message automatically thaws the message list 
  1139.  
  1140.  
  1141. ΓòÉΓòÉΓòÉ 43. Thaw ΓòÉΓòÉΓòÉ
  1142.  
  1143. This pull-down thaws a previously frozen message list. This means that new, 
  1144. eligible messages will again be automatically added to the list until either: 
  1145.  
  1146.  1. you manually freeze the message list 
  1147.  2. a trigger message automatically freezes the message list 
  1148.  
  1149.  
  1150. ΓòÉΓòÉΓòÉ 44. Auto scroll? ΓòÉΓòÉΓòÉ
  1151.  
  1152. This pull-down represents the automatic scrolling state of the message list. 
  1153.  
  1154. When checked, the message list will automatically scroll to keep the last added 
  1155. message visible.  This is the default setting. 
  1156.  
  1157. When not checked, the list does not automatically scroll to keep the last added 
  1158. message visible. This is useful when you need to examine the messages that have 
  1159. previously been added to the list and do not want to be bothered by the 
  1160. automatic scrolling that occurs when a new message is subsequently added to the 
  1161. list. 
  1162.  
  1163.  
  1164. ΓòÉΓòÉΓòÉ 45. Font ΓòÉΓòÉΓòÉ
  1165.  
  1166. This pull-down presents the Font dialog so that you can select the 
  1167. non-proportional font used by the message list and dialogs. 
  1168.  
  1169.  
  1170. ΓòÉΓòÉΓòÉ 46. Log file ΓòÉΓòÉΓòÉ
  1171.  
  1172. This set of pull-downs allow you to control log file operations. 
  1173.  
  1174.  
  1175. ΓòÉΓòÉΓòÉ 47. Freeze ΓòÉΓòÉΓòÉ
  1176.  
  1177. This pull-down freezes the log file. This means that no new messages are 
  1178. automatically written to the file (even though they are added to the message 
  1179. list). 
  1180.  
  1181.  
  1182. ΓòÉΓòÉΓòÉ 48. Thaw ΓòÉΓòÉΓòÉ
  1183.  
  1184. This pull-down thaws a previously frozen log file. This means that new messages 
  1185. are also automatically written to the file (as well as being added to the 
  1186. message list). 
  1187.  
  1188.  
  1189. ΓòÉΓòÉΓòÉ 49. Add note ΓòÉΓòÉΓòÉ
  1190.  
  1191. This pull-down presents the Notes dialog so that you can enter a text note for 
  1192. addition to the message list and possibly the log file. 
  1193.  
  1194. You can use notes to document scenario setups, debugging notes, etc for later 
  1195. reference or debugging assistance. 
  1196.  
  1197.  
  1198. ΓòÉΓòÉΓòÉ 50. Save options ΓòÉΓòÉΓòÉ
  1199.  
  1200. This pull-down saves this PMSPY agent's current options in PMSPY.INI. 
  1201.  
  1202.  
  1203. ΓòÉΓòÉΓòÉ 51. Filter ΓòÉΓòÉΓòÉ
  1204.  
  1205. This item allows you to: 
  1206.  
  1207. o Control the spying of profile defined messages (on a group or individual 
  1208.   message basis) 
  1209. o Control the spying of undefined messages 
  1210.  
  1211.  
  1212. ΓòÉΓòÉΓòÉ 52. By group ΓòÉΓòÉΓòÉ
  1213.  
  1214. This pull-down presents the Group Filtering dialog so that you can select one 
  1215. or more groups of messages. 
  1216.  
  1217. Each group represents one or more individual messages that are logically 
  1218. related to each other (for instance, all titlebar messages, etc). Message 
  1219. groups are defined by PMSPY in the default profile or by you in a profile file. 
  1220.  
  1221.  
  1222. ΓòÉΓòÉΓòÉ 53. By message ΓòÉΓòÉΓòÉ
  1223.  
  1224. This pull-down presents the Message Filtering dialog so that you can select one 
  1225. or more messages. Messages are defined by PMSPY in the default profile or by 
  1226. you in a profile file. 
  1227.  
  1228.  
  1229. ΓòÉΓòÉΓòÉ 54. Exclude all messages ΓòÉΓòÉΓòÉ
  1230.  
  1231. This pull-down automatically excludes all defined messages (and groups) from 
  1232. being included in the message list. By itself, this function is not very 
  1233. useful.  But when used before the Group Filtering dialog or the Message 
  1234. Filtering dialog it provides a quick method for placing the message filtering 
  1235. controls into a known state before setting up special filter combinations. 
  1236.  
  1237.  
  1238. ΓòÉΓòÉΓòÉ 55. Include all messages ΓòÉΓòÉΓòÉ
  1239.  
  1240. This pull-down automatically enables the inclusion of all defined messages (and 
  1241. groups) in the message list. By itself, this function is not very useful.  But 
  1242. when used before the Group Filtering dialog or the Message Filtering dialog it 
  1243. provides a quick method for placing the message filtering controls into a known 
  1244. state before setting up special filter combinations. 
  1245.  
  1246.  
  1247. ΓòÉΓòÉΓòÉ 56. Include undefined messages? ΓòÉΓòÉΓòÉ
  1248.  
  1249. This pull-down allows you to spy on messages with a value less than WM_USER 
  1250. that have not been defined in the current profile file. This allows you to spy 
  1251. on other applications and see the non-standard messages that are used (for 
  1252. example, the messages used with a program group dialog when items are selected 
  1253. and dragged from one line to another). The Include undefined WM_USER pull-down 
  1254. allows you to just include undefined messages that begin at the WM_USER value. 
  1255.  
  1256. The following special format is used when displaying undefined messages: 
  1257.  
  1258. WM_???? (0303) 01B40372 00010001 S 03300CC8
  1259.  
  1260. To examine just the undefined messages, first use the Exclude all messages, 
  1261. then select this pull-down item. 
  1262.  
  1263.  
  1264. ΓòÉΓòÉΓòÉ 57. Include undefined WM_USER? ΓòÉΓòÉΓòÉ
  1265.  
  1266. This pull-down allows you to spy on all messages defined at or above the 
  1267. WM_USER value that have not been defined in the current profile file. This 
  1268. allows you to spy on your (or other) applications and see the WM_USER messages 
  1269. being used without having to define a special profile file. The Include 
  1270. undefined messages? pull-down allow you to include all undefined messages. 
  1271.  
  1272. The following special format is used when displaying undefined WM_USER 
  1273. messages: 
  1274.  
  1275. WM_USER (1010) 01B40372 00010001 S 03300CC8
  1276.  
  1277. To examine just the WM_USER messages, first use the Exclude all messages, then 
  1278. select this pull-down item. 
  1279.  
  1280.  
  1281. ΓòÉΓòÉΓòÉ 58. Help ΓòÉΓòÉΓòÉ
  1282.  
  1283. This item allows you to: 
  1284.  
  1285. o Obtain operational help on using PMSPY 
  1286. o Display PMSPY product information 
  1287.  
  1288.  
  1289. ΓòÉΓòÉΓòÉ 59. Help for help ΓòÉΓòÉΓòÉ
  1290.  
  1291. This pull-down provides help on using the online help system. 
  1292.  
  1293.  
  1294. ΓòÉΓòÉΓòÉ 60. Keys help ΓòÉΓòÉΓòÉ
  1295.  
  1296. This pull-down provides information about the various keyboard keys and their 
  1297. usage. 
  1298.  
  1299.  
  1300. ΓòÉΓòÉΓòÉ 61. Extended help ΓòÉΓòÉΓòÉ
  1301.  
  1302. This pull-down provides extended help about PMSPY. 
  1303.  
  1304.  
  1305. ΓòÉΓòÉΓòÉ 62. Extended index ΓòÉΓòÉΓòÉ
  1306.  
  1307. This pull-down provides an index of all help topics. 
  1308.  
  1309.  
  1310. ΓòÉΓòÉΓòÉ 63. Product Information ΓòÉΓòÉΓòÉ
  1311.  
  1312. This pull-down provides information about this version of PMSPY. 
  1313.  
  1314.  
  1315. ΓòÉΓòÉΓòÉ 64. WinCreateHelpInstance error ΓòÉΓòÉΓòÉ
  1316.  
  1317. An error was detected during a WinCreateHelpInstance call. 
  1318.  
  1319.  
  1320. ΓòÉΓòÉΓòÉ 65. WinAssociateHelpInstance error ΓòÉΓòÉΓòÉ
  1321.  
  1322. An error was detected during a WinAssociateHelpInstance call. 
  1323.  
  1324.  
  1325. ΓòÉΓòÉΓòÉ 66. IPF Processing error ΓòÉΓòÉΓòÉ
  1326.  
  1327. An IPF error was detected. 
  1328.  
  1329.  
  1330. ΓòÉΓòÉΓòÉ 67. Too many PMSPY instances ΓòÉΓòÉΓòÉ
  1331.  
  1332. There are already 8 PMSPY agents active.  No more can be started at this time. 
  1333. Re-use one of current PMSPY instances to process a new message queue or window. 
  1334.  
  1335.  
  1336. ΓòÉΓòÉΓòÉ 68. Executible and "Hook" DLL Incompatible ΓòÉΓòÉΓòÉ
  1337.  
  1338. The internal versions of PMSPY.EXE and PMSPYHK.DLL are not compatible. Ensure 
  1339. that the LIBPATH and PATH environment variables locate compatible files.  If 
  1340. necessary, re-install PMSPY. 
  1341.  
  1342.  
  1343. ΓòÉΓòÉΓòÉ 69. Log file already exists ΓòÉΓòÉΓòÉ
  1344.  
  1345. The log file you selected already exists.  This message requests verification 
  1346. before replacing the existing file. 
  1347.  
  1348.  
  1349. ΓòÉΓòÉΓòÉ 70. Profile file already exists ΓòÉΓòÉΓòÉ
  1350.  
  1351. The profile file you selected for saving already exists. This message requests 
  1352. verification before replacing the existing file. 
  1353.  
  1354.  
  1355. ΓòÉΓòÉΓòÉ 71. Spying on the PM system queue ΓòÉΓòÉΓòÉ
  1356.  
  1357. This message requests verification before beginning to spy on the PM system 
  1358. message queue. 
  1359.  
  1360. W A R N I N G 
  1361.  
  1362. Since spying on the system message queue can greatly affect PM and/or 
  1363. application operation, it is recommended that all unnecessary PM messages be 
  1364. excluded from spying before using this selection. Only the minimum required 
  1365. subset of messages should be included. 
  1366.  
  1367.  
  1368. ΓòÉΓòÉΓòÉ 72. Profile file ΓòÉΓòÉΓòÉ
  1369.  
  1370. An optional profile can be used to define colors and message filtering options. 
  1371. The file is interpreted sequentially. One advantage of creating a profile for 
  1372. your application is that you define the message name to have the same mnemonic 
  1373. value as you used when you coded it (for example, WM_STARTUP_PROCESSING)  It is 
  1374. even possible to automate the generation of application specific profiles to 
  1375. ensure that they remain consistent with your application code as it changes 
  1376. during the development cycle. 
  1377.  
  1378. For an example, look at the default profile. 
  1379.  
  1380. X       <n>
  1381. Y       <n>
  1382. CX      <n>
  1383. CY      <n>
  1384.  
  1385. SPYON   <WINDOW> | <QUEUE>
  1386.  
  1387. LIST    <THAW> | <FREEZE>
  1388.  
  1389. FONT    <"10.System Monospaced">
  1390.  
  1391. COLOR   <color> <SYSCLR_xxx> | <CLR_xxx>
  1392.  
  1393. GROUP   <GroupID> [<color>]
  1394. DEFINE  <MsgID> <MsgNo> [<color>]
  1395.  
  1396. INCLUDE ALL | <GroupID> | <MsgID>
  1397. EXCLUDE ALL | <GroupID> | <MsgID>
  1398.  
  1399. TRIGGER <MsgID>     <THAW> | <FREEZE>
  1400.  
  1401.  
  1402.  
  1403. * <color> is 1..8 (1=default color; omit to leave default color ASIS)
  1404.  
  1405.                    1=color used for undefined messages
  1406.                    2=color used for undefined WM_USER messages
  1407.                    7=color used for NOTES
  1408.                    8=color used for PMSPY status messages
  1409. * <MsgID> is a blank delimited "word" (optionally it may be enclosed in
  1410.                                        double quotes)
  1411. * <MsgNo> is a decimal, hex, or octal (for those DEC fans) number.
  1412.   Simple addition is also supported: WM_USER+5
  1413. * <GroupID> is a blank delimited "word" (optionally it may be enclosed in
  1414.                                          double quotes)
  1415.  
  1416.  
  1417. ΓòÉΓòÉΓòÉ 73. Command Line ΓòÉΓòÉΓòÉ
  1418.  
  1419. The following command line parameters are all optional and case insensitive. 
  1420. They are processed as they are found (left-to-right). 
  1421.  
  1422. PMSPY [/PRO=file] [/APP=file]
  1423.  
  1424. /PRO=file     reads <file> as a profile and replaces the default profile. 
  1425. /APP=file     reads <file> as a profile and appends it to the default profile. 
  1426.  
  1427. Combinations of /PRO= /APP= may be used on one invocation to setup special 
  1428. filtering situations.  For example, the following invocation establishes an 
  1429. application specific filter set composed of two groups of messages (without 
  1430. using the 'standard' PM message set): 
  1431.  
  1432. PMSPY /PRO=app_set1.pro /APP=app_set2.pro
  1433.  
  1434. The first /PRO= "clears" the default message filtering set then loads the 
  1435. message groups defined in APP_SET1.PRO. The /APP= then adds the additional 
  1436. messages groups defined in APP_SET2.PRO. 
  1437.  
  1438.  
  1439. ΓòÉΓòÉΓòÉ 74. Log file ΓòÉΓòÉΓòÉ
  1440.  
  1441. This file can be used to save the contents of the message list on disk.  All 
  1442. messages and text notes are written to the log file if one has been opened. 
  1443.  
  1444. One advantage of using a log file is that you can view all of the messages that 
  1445. have occurred.  Due to listbox limitations, the oldest messages are deleted 
  1446. from the listbox to make room for the ones currently occurring. 
  1447.  
  1448.  
  1449. ΓòÉΓòÉΓòÉ 75. Keys Help ΓòÉΓòÉΓòÉ
  1450.  
  1451. All OS/2 keys are functional while you are using PMSPY. See the OS/2 keys help 
  1452. for a complete list of these keys. 
  1453.  
  1454. In addition, shortcut keys have been defined for selected PMSPY actions.  These 
  1455. are indicated when an action bar item is selected and its pull-downs are 
  1456. displayed. 
  1457.  
  1458.  
  1459. ΓòÉΓòÉΓòÉ 76. Help for Help ΓòÉΓòÉΓòÉ
  1460.  
  1461. Help is always available. The type of help you get is determined by the item 
  1462. selected when you requested help. 
  1463.  
  1464. When you ask for help, you will see a window containing help information. You 
  1465. can size or move this window like any other. You can also leave the help window 
  1466. visible while you do the task.