home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
pmspy32.zip
/
PMSPY.HLP
(
.txt
)
< prev
next >
Wrap
OS/2 Help File
|
1993-07-23
|
52KB
|
1,467 lines
ΓòÉΓòÉΓòÉ 1. PMSPY - Version 1.1 ΓòÉΓòÉΓòÉ
PMSPY allows you to spy:
1. messages that are posted to windows through a message queue
2. messages that are sent directly to windows
This includes PM as well as any internal application messages that may be used.
The window may be visible or invisible (OBJECT).
It is an excellent learning tool for PM programming because it visibly
demonstrates PM's message based operation.
It also excels as a PM application debugging tool because:
o No application coding is necessary for passive debugging
o Active debugging is possible if the application is coded with PMSPY debugging
in mind. For example, current values of flags, counters, etc can be
"stuffed" into unused MP1 and/or MP2 fields and then examined with PMSPY.
This can provide an x-ray view into the internals of an application as it
executes.
o It may be started before or while the application is running
o Up to 8 different agents may be active at once allowing for the debugging of
complex inter-window, intra-window, multi-threaded, or OBJECT window
applications
Basic operations and features include:
1. Simple point and shoot selection of desktop windows
2. Simple selection of invisible and/or OBJECT windows from a list
3. A filtering mechanism allows you to include or exclude individual or groups
of messages.
4. Messages can be defined to trigger the message spying actions.
5. The filtering mechanism is totally user definable via a profile.
6. A default profile is automatically provided for out-of-the-box operation.
7. Messages may optionally be logged to a log file.
Other thing you may be interested in:
1. How do I do it?
2. The message list
3. Command line parameters
4. known limitations
ΓòÉΓòÉΓòÉ 2. How do I do it? ΓòÉΓòÉΓòÉ
Here's some actions you may want to know how-to-do. Double-click on a
highlighted phrase to move to its detailed explanation.
o To debug a dialog procedure
o To see all WM_USER messages
o To see all unknown messages
o Use trigger messages
o To add a text note to the spy list and (maybe) log file
o To save agent characteristics (like the font you selected for the spy list,
window position and size) for the next time you run PMSPY
ΓòÉΓòÉΓòÉ 3. How to Install and Use PMSPY ΓòÉΓòÉΓòÉ
1. The following files are required to run PMSPY:
File Name Description
PMSPY.EXE Executable code
PMSPY.HLP Online help
PMSPY.DLL PM resources (strings, messages, dialogs, etc)
PMSPYHK.DLL Dynamic link library containing "hook" code
2. Copy PMSPY.DLL and PMSPYHK.DLL into a subdirectory which is accessible
using the LIBPATH statement in the CONFIG.SYS file (e.g. C:\OS2\DLL) or add
the path to the LIBPATH statement and reboot (only after having made all
CONFIG.SYS changes).
3. Copy PMSPY.EXE into a subdirectory which is in your PATH statement in the
CONFIG.SYS file (e.g. C:\OS2) or add the path to the PATH statement.
4. Copy PMSPY.HLP into a subdirectory which is in your HELP statement in the
CONFIG.SYS file (e.g. C:\OS2\HELP) or add the path to the HELP statement.
5. Create a PMSPY program object in one of your OS/2 folders. Be sure to
specify that PMSPY.EXE to be executed from the drive and path where you
placed the code above. Specify any desired command line parameters.
6. When you're ready to begin spying, just double-click on the PMSPY program
object. You may start up to 8 different instances of PMSPY to help you
analyze/debug complex PM applications.
ΓòÉΓòÉΓòÉ 4. How Does PMSPY Work? ΓòÉΓòÉΓòÉ
After you select a target window PMSPY installs an INPUT and SENDMSG hook into
the window's message queue. This allows the spying of all the messages
destined for the window.
Note: The PM system queue may also be selected...
If you have requested to spy on the queue, you will see all messages going
through this queue, which means you get the messages from all the windows
associated with this queue. This is particularly important when you want to
debug dialogs.
ΓòÉΓòÉΓòÉ 5. Known Limitations ΓòÉΓòÉΓòÉ
The following limitations are known:
1. There is no current method for defining the MP formatting styles on a per
message basis in a profile.
Note: This will be provided in the next release...
2. There is NO profile error reporting (for example, you may be able to
generate multiple occurrences of the same group and/or message)
3. If PMSPYHK.DLL is not found along LIBPATH, PMSPY will not start. The
message 'SYS1804 file not found' is issued with the explanation that this
is an invalid command.
ΓòÉΓòÉΓòÉ 6. How do I debug dialog procs? ΓòÉΓòÉΓòÉ
To debug dialog procedures:
1. Use Select desktop window and select the parent/frame window for spying.
This is because the dialog you want to debug will share the same message
queue once its created.
2. Use Spy on queue to be sure that you are spying on all messages that all
moving through the message queue. This will include the frame and all
subsequent dialogs.
3. Start the dialog. You should be able to see WM_CREATE messages for each
dialog control as well as the WM_INITDLG message that comes to your dialog
procedure.
ΓòÉΓòÉΓòÉ 7. Saving agent characteristics ΓòÉΓòÉΓòÉ
To save this agent's characteristics for subsequent PMSPY use, use the Save
options pull-down under Options.
The following data is saved on a per agent basis in PMSPY.INI. This file is
always placed in the current directory.
o the current size and position of the PMSPY window
o the name of the last font you selected for the spy list
o the name of the last profile you opened
o the name of the last log file you opened
Each time PMSPY starts, it tries to use any data previously saved for the agent
currently being started (1, 2, and so on) If this data is not available,
default values are automatically used.
ΓòÉΓòÉΓòÉ 8. Message List ΓòÉΓòÉΓòÉ
PMSPY places the following items into the message list:
1. Eligible messages (as defined by the current profile and operational
settings). Each list item represents a single PM message:
WM_BUTTON1UP 005C002A 00000000 P 03300CC8
Mnemonic MP1 MP2 Γöé target
message Γöé HWND
name S=sent ΓöÇΓöñ
P=postedΓöÇΓöÿ
Note: To view the message parameters in different formats, double-click
mouse button #1 on the list item
2. Programmer entered text notes
3. PMSPY status messages.
The horizontal scroll bar can be used to scroll the message data left or right
to position just the data you care about in view.
Here is a sample message list. It contains notes, status messages, and PM
messages.
PM Spy - Window 03300CC8
WM_BUTTON2DOWN 00580085 00000000 P 03300CC8
WM_BUTTON2UP 0039008C 00000000 P 03300CC8
WM_PAINT 00000000 00000000 S 03300CC8
WM_SETFOCUS 0C902FB0 00000000 S 03300CC8
WM_SETSELECTION 00000000 00000000 S 03300CC8
WM_ACTIVATE 00000000 02900BA8 S 03300CC8
This is a NOTE: ready to look at UNDEFINED messages
WM_BUTTON2DOWN 004C0093 00000000 P 03300CC8
WM_FOCUSCHANGE 0C902FB0 00000001 S 03300CC8
WM_ACTIVATE 00000001 02900BA8 S 03300CC8
WM_SETFOCUS 0C902FB0 00000001 S 03300CC8
WM_???? (0303) 02470306 00010001 S 03300CC8
WM_???? (0303) 02370306 00010001 S 03300CC8
WM_???? (0303) 02300304 00010001 S 03300CC8
WM_???? (0303) 022D0303 00010001 S 03300CC8
WM_BUTTON2UP 0017002B 00000000 P 03300CC8
all done, closing the LOG file
ΓòÉΓòÉΓòÉ 9. Default Profile ΓòÉΓòÉΓòÉ
The default PROFILE defines how PMSPY operates "out of the box".
/* PMSPY Default Profile - Created Jul 23 1993 */
/* Built using the OS/2 2.0 Toolkit */
/* Color Definitions */
Color 1 SYSCLR_WINDOWTEXT
Color 2 SYSCLR_ACTIVETITLE
Color 3 SYSCLR_WINDOWSTATICTEXT
Color 4 CLR_RED
Color 5 CLR_PINK
Color 6 CLR_DARKGREEN
Color 7 CLR_DARKCYAN
Color 8 CLR_BLUE
Group MouseMovement 1
Define WM_HITTEST 0x000C
Define WM_CONTROLPOINTER 0x0038
Define WM_MOUSEMOVE 0x0070
Group StandardWindow 1
Define WM_NULL 0x0000
Define WM_CREATE 0x0001
Define WM_DESTROY 0x0002
Define WM_ENABLE 0x0004
Define WM_SHOW 0x0005
Define WM_MOVE 0x0006
Define WM_SIZE 0x0007
Define WM_ADJUSTWINDOWPOS 0x0008
Define WM_CALCVALIDRECTS 0x0009
Define WM_SETWINDOWPARAMS 0x000A
Define WM_QUERYWINDOWPARAMS 0x000B
Define WM_ACTIVATE 0x000D
Define WM_SETFOCUS 0x000F
Define WM_SETSELECTION 0x0010
Define WM_COMMAND 0x0020
Define WM_SYSCOMMAND 0x0021
Define WM_HELP 0x0022
Define WM_PAINT 0x0023
Define WM_TIMER 0x0024
Define WM_SEM1 0x0025
Define WM_SEM2 0x0026
Define WM_SEM3 0x0027
Define WM_SEM4 0x0028
Define WM_CLOSE 0x0029
Define WM_QUIT 0x002A
Define WM_SYSCOLORCHANGE 0x002B
Define WM_SYSVALUECHANGED 0x002D
Define WM_APPTERMINATENOTIFY 0x002E
Define WM_PRESPARAMCHANGED 0x002F
Define WM_QUERYCONVERTPOS 0x00B0
Group LanguageSupport 1
Define WM_PPAINT 0x0011
Define WM_PSETFOCUS 0x0012
Define WM_PSYSCOLORCHANGE 0x0013
Define WM_PSIZE 0x0014
Define WM_PACTIVATE 0x0015
Define WM_PCONTROL 0x0016
Group Control 1
Define WM_CONTROL 0x0030
Define WM_VSCROLL 0x0031
Define WM_HSCROLL 0x0032
Define WM_INITMENU 0x0033
Define WM_MENUSELECT 0x0034
Define WM_MENUEND 0x0035
Define WM_DRAWITEM 0x0036
Define WM_MEASUREITEM 0x0037
Define WM_QUERYDLGCODE 0x003A
Define WM_INITDLG 0x003B
Define WM_SUBSTITUTESTRING 0x003C
Define WM_MATCHMNEMONIC 0x003D
Define WM_SAVEAPPLICATION 0x003E
Group Frame 1
Define WM_FLASHWINDOW 0x0040
Define WM_FORMATFRAME 0x0041
Define WM_UPDATEFRAME 0x0042
Define WM_FOCUSCHANGE 0x0043
Define WM_SETBORDERSIZE 0x0044
Define WM_TRACKFRAME 0x0045
Define WM_MINMAXFRAME 0x0046
Define WM_SETICON 0x0047
Define WM_QUERYICON 0x0048
Define WM_SETACCELTABLE 0x0049
Define WM_QUERYACCELTABLE 0x004A
Define WM_TRANSLATEACCEL 0x004B
Define WM_QUERYTRACKINFO 0x004C
Define WM_QUERYBORDERSIZE 0x004D
Define WM_NEXTMENU 0x004E
Define WM_ERASEBACKGROUND 0x004F
Define WM_QUERYFRAMEINFO 0x0050
Define WM_QUERYFOCUSCHAIN 0x0051
Define WM_OWNERPOSCHANGE 0x0052
Define WM_CALCFRAMERECT 0x0053
Define WM_WINDOWPOSCHANGED 0x0055
Define WM_QUERYFRAMECTLCOUNT 0x0059
Define WM_QUERYHELPINFO 0x005B
Define WM_SETHELPINFO 0x005C
Define WM_ERROR 0x005D
Define WM_REALIZEPALETTE 0x005E
Group Clipboard 1
Define WM_RENDERFMT 0x0060
Define WM_RENDERALLFMTS 0x0061
Define WM_DESTROYCLIPBOARD 0x0062
Define WM_PAINTCLIPBOARD 0x0063
Define WM_SIZECLIPBOARD 0x0064
Define WM_HSCROLLCLIPBOARD 0x0065
Define WM_VSCROLLCLIPBOARD 0x0066
Define WM_DRAWCLIPBOARD 0x0067
Group MouseButtons 1
Define WM_BUTTON1DOWN 0x0071
Define WM_BUTTON1UP 0x0072
Define WM_BUTTON1DBLCLK 0x0073
Define WM_BUTTON2DOWN 0x0074
Define WM_BUTTON2UP 0x0075
Define WM_BUTTON2DBLCLK 0x0076
Define WM_BUTTON3DOWN 0x0077
Define WM_BUTTON3UP 0x0078
Define WM_BUTTON3DBLCLK 0x0079
Group CharacterIO 1
Define WM_CHAR 0x007A
Define WM_VIOCHAR 0x007B
Group Journal 1
Define WM_JOURNALNOTIFY 0x007C
Group DynamicDataExchange 1
Define WM_DDE_INITIATE 0x00A0
Define WM_DDE_REQUEST 0x00A1
Define WM_DDE_ACK 0x00A2
Define WM_DDE_DATA 0x00A3
Define WM_DDE_ADVISE 0x00A4
Define WM_DDE_UNADVISE 0x00A5
Define WM_DDE_POKE 0x00A6
Define WM_DDE_EXECUTE 0x00A7
Define WM_DDE_TERMINATE 0x00A8
Define WM_DDE_INITIATEACK 0x00A9
Group Static Control 1
Define SM_SETHANDLE 0x0100
Define SM_QUERYHANDLE 0x0101
Group Button 1
Define BM_CLICK 0x0120
Define BM_QUERYCHECKINDEX 0x0121
Define BM_QUERYHILITE 0x0122
Define BM_SETHILITE 0x0123
Define BM_QUERYCHECK 0x0124
Define BM_SETCHECK 0x0125
Define BM_SETDEFAULT 0x0126
Group EntryField 1
Define EM_QUERYCHANGED 0x0140
Define EM_QUERYSEL 0x0141
Define EM_SETSEL 0x0142
Define EM_SETTEXTLIMIT 0x0143
Define EM_CUT 0x0144
Define EM_COPY 0x0145
Define EM_CLEAR 0x0146
Define EM_PASTE 0x0147
Define EM_QUERYFIRSTCHAR 0x0148
Define EM_SETFIRSTCHAR 0x0149
Define EM_QUERYREADONLY 0x014A
Define EM_SETREADONLY 0x014B
Define EM_SETINSERTMODE 0x014C
Group ListBox 1
Define LM_QUERYITEMCOUNT 0x0160
Define LM_INSERTITEM 0x0161
Define LM_SETTOPINDEX 0x0162
Define LM_DELETEITEM 0x0163
Define LM_SELECTITEM 0x0164
Define LM_QUERYSELECTION 0x0165
Define LM_SETITEMTEXT 0x0166
Define LM_QUERYITEMTEXTLENGTH 0x0167
Define LM_QUERYITEMTEXT 0x0168
Define LM_SETITEMHANDLE 0x0169
Define LM_QUERYITEMHANDLE 0x016A
Define LM_SEARCHSTRING 0x016B
Define LM_SETITEMHEIGHT 0x016C
Define LM_QUERYTOPINDEX 0x016D
Define LM_DELETEALL 0x016E
Group ComboBox 1
Define CBM_SHOWLIST 0x0170
Define CBM_HILITE 0x0171
Define CBM_ISLISTSHOWING 0x0172
Group Menu 1
Define MM_INSERTITEM 0x0180
Define MM_DELETEITEM 0x0181
Define MM_QUERYITEM 0x0182
Define MM_SETITEM 0x0183
Define MM_QUERYITEMCOUNT 0x0184
Define MM_STARTMENUMODE 0x0185
Define MM_ENDMENUMODE 0x0186
Define MM_REMOVEITEM 0x0188
Define MM_SELECTITEM 0x0189
Define MM_QUERYSELITEMID 0x018A
Define MM_QUERYITEMTEXT 0x018B
Define MM_QUERYITEMTEXTLENGTH 0x018C
Define MM_SETITEMHANDLE 0x018D
Define MM_SETITEMTEXT 0x018E
Define MM_ITEMPOSITIONFROMID 0x018F
Define MM_ITEMIDFROMPOSITION 0x0190
Define MM_QUERYITEMATTR 0x0191
Define MM_SETITEMATTR 0x0192
Define MM_ISITEMVALID 0x0193
Define MM_QUERYITEMRECT 0x0194
Group ScrollBar 1
Define SBM_SETSCROLLBAR 0x01A0
Define SBM_SETPOS 0x01A1
Define SBM_QUERYPOS 0x01A2
Define SBM_QUERYRANGE 0x01A3
Define SBM_SETTHUMBSIZE 0x01A6
Group MultiLineEdit 1
Define MLM_SETTEXTLIMIT 0x01B0
Define MLM_QUERYTEXTLIMIT 0x01B1
Define MLM_SETFORMATRECT 0x01B2
Define MLM_QUERYFORMATRECT 0x01B3
Define MLM_SETWRAP 0x01B4
Define MLM_QUERYWRAP 0x01B5
Define MLM_SETTABSTOP 0x01B6
Define MLM_QUERYTABSTOP 0x01B7
Define MLM_SETREADONLY 0x01B8
Define MLM_QUERYREADONLY 0x01B9
Define MLM_QUERYCHANGED 0x01BA
Define MLM_SETCHANGED 0x01BB
Define MLM_QUERYLINECOUNT 0x01BC
Define MLM_CHARFROMLINE 0x01BD
Define MLM_LINEFROMCHAR 0x01BE
Define MLM_QUERYLINELENGTH 0x01BF
Define MLM_QUERYTEXTLENGTH 0x01C0
Define MLM_FORMAT 0x01C1
Define MLM_SETIMPORTEXPORT 0x01C2
Define MLM_IMPORT 0x01C3
Define MLM_EXPORT 0x01C4
Define MLM_DELETE 0x01C6
Define MLM_QUERYFORMATLINELENGTH 0x01C7
Define MLM_QUERYFORMATTEXTLENGTH 0x01C8
Define MLM_INSERT 0x01C9
Define MLM_SETSEL 0x01CA
Define MLM_QUERYSEL 0x01CB
Define MLM_QUERYSELTEXT 0x01CC
Define MLM_QUERYUNDO 0x01CD
Define MLM_UNDO 0x01CE
Define MLM_RESETUNDO 0x01CF
Define MLM_QUERYFONT 0x01D0
Define MLM_SETFONT 0x01D1
Define MLM_SETTEXTCOLOR 0x01D2
Define MLM_QUERYTEXTCOLOR 0x01D3
Define MLM_SETBACKCOLOR 0x01D4
Define MLM_QUERYBACKCOLOR 0x01D5
Define MLM_QUERYFIRSTCHAR 0x01D6
Define MLM_SETFIRSTCHAR 0x01D7
Define MLM_CUT 0x01D8
Define MLM_COPY 0x01D9
Define MLM_PASTE 0x01DA
Define MLM_CLEAR 0x01DB
Define MLM_ENABLEREFRESH 0x01DC
Define MLM_DISABLEREFRESH 0x01DD
Define MLM_SEARCH 0x01DE
Define MLM_QUERYIMPORTEXPORT 0x01DF
Group TitleBar 1
Define TBM_SETHILITE 0x01E3
Define TBM_QUERYHILITE 0x01E4
Group SpinButton 1
Define SPBM_OVERRIDESETLIMITS 0x0200
Define SPBM_QUERYLIMITS 0x0201
Define SPBM_SETTEXTLIMIT 0x0202
Define SPBM_SPINUP 0x0203
Define SPBM_SPINDOWN 0x0204
Define SPBM_QUERYVALUE 0x0205
Define SPBN_UPARROW 0x020A
Define SPBN_DOWNARROW 0x020B
Define SPBN_ENDSPIN 0x020C
Define SPBN_CHANGE 0x020D
Define SPBN_SETFOCUS 0x020E
Define SPBN_KILLFOCUS 0x020F
Group Help/IPF 1
Define HM_DISMISS_WINDOW 0x0221
Define HM_DISPLAY_HELP 0x0222
Define HM_EXT_HELP 0x0223
Define HM_SET_ACTIVE_WINDOW 0x0224
Define HM_LOAD_HELP_TABLE 0x0225
Define HM_CREATE_HELP_TABLE 0x0226
Define HM_SET_HELP_WINDOW_TITLE 0x0227
Define HM_SET_SHOW_PANEL_ID 0x0228
Define HM_REPLACE_HELP_FOR_HELP 0x0229
Define HM_HELP_INDEX 0x022A
Define HM_HELP_CONTENTS 0x022B
Define HM_KEYS_HELP 0x022C
Define HM_SET_HELP_LIBRARY_NAME 0x022D
Define HM_SET_OBJCOM_WINDOW 0x0238
Define HM_UPDATE_OBJCOM_WINDOW_CHAIN 0x0239
Define HM_QUERY_DDF_DATA 0x023A
Define HM_INVALIDATE_DDF_DATA 0x023B
Define HM_QUERY 0x023C
Define HM_SET_COVERPAGE_SIZE 0x023D
Define HM_ERROR 0x022E
Define HM_HELPSUBITEM_NOT_FOUND 0x022F
Define HM_QUERY_KEYS_HELP 0x0230
Define HM_TUTORIAL 0x0231
Define HM_EXT_HELP_UNDEFINED 0x0232
Define HM_ACTIONBAR_COMMAND 0x0233
Define HM_INFORM 0x0234
Define HM_NOTIFY 0x0242
Define HM_SET_USERDATA 0x0243
Define HM_CONTROL 0x0244
Group DragDrop 1
Define DM_DROP 0x032F
Define DM_DRAGOVER 0x032E
Define DM_DRAGLEAVE 0x032D
Define DM_DROPHELP 0x032C
Define DM_ENDCONVERSATION 0x032B
Define DM_PRINT 0x032A
Define DM_RENDER 0x0329
Define DM_RENDERCOMPLETE 0x0328
Define DM_RENDERPREPARE 0x0327
Define DM_DRAGFILECOMPLETE 0x0326
Define DM_EMPHASIZETARGET 0x0325
Define DM_DRAGERROR 0x0324
Define DM_FILERENDERED 0x0323
Define DM_RENDERFILE 0x0322
Define DM_DRAGOVERNOTIFY 0x0321
Group Container 1
Define CM_ALLOCDETAILFIELDINFO 0x0330
Define CM_ALLOCRECORD 0x0331
Define CM_ARRANGE 0x0332
Define CM_ERASERECORD 0x0333
Define CM_FILTER 0x0334
Define CM_FREEDETAILFIELDINFO 0x0335
Define CM_FREERECORD 0x0336
Define CM_HORZSCROLLSPLITWINDOW 0x0337
Define CM_INSERTDETAILFIELDINFO 0x0338
Define CM_INSERTRECORD 0x0339
Define CM_INVALIDATEDETAILFIELDINFO 0x033A
Define CM_INVALIDATERECORD 0x033B
Define CM_PAINTBACKGROUND 0x033C
Define CM_QUERYCNRINFO 0x033D
Define CM_QUERYDETAILFIELDINFO 0x033E
Define CM_QUERYDRAGIMAGE 0x033F
Define CM_QUERYRECORD 0x0340
Define CM_QUERYRECORDEMPHASIS 0x0341
Define CM_QUERYRECORDFROMRECT 0x0342
Define CM_QUERYRECORDRECT 0x0343
Define CM_QUERYVIEWPORTRECT 0x0344
Define CM_REMOVEDETAILFIELDINFO 0x0345
Define CM_REMOVERECORD 0x0346
Define CM_SCROLLWINDOW 0x0347
Define CM_SEARCHSTRING 0x0348
Define CM_SETCNRINFO 0x0349
Define CM_SETRECORDEMPHASIS 0x034A
Define CM_SORTRECORD 0x034B
Define CM_OPENEDIT 0x034C
Define CM_CLOSEEDIT 0x034D
Define CM_COLLAPSETREE 0x034E
Define CM_EXPANDTREE 0x034F
Define CM_QUERYRECORDINFO 0x0350
Group Notebook 1
Define BKM_CALCPAGERECT 0x0353
Define BKM_DELETEPAGE 0x0354
Define BKM_INSERTPAGE 0x0355
Define BKM_INVALIDATETABS 0x0356
Define BKM_TURNTOPAGE 0x0357
Define BKM_QUERYPAGECOUNT 0x0358
Define BKM_QUERYPAGEID 0x0359
Define BKM_QUERYPAGEDATA 0x035A
Define BKM_QUERYPAGEWINDOWHWND 0x035B
Define BKM_QUERYTABBITMAP 0x035C
Define BKM_QUERYTABTEXT 0x035D
Define BKM_SETDIMENSIONS 0x035E
Define BKM_SETPAGEDATA 0x035F
Define BKM_SETPAGEWINDOWHWND 0x0360
Define BKM_SETSTATUSLINETEXT 0x0361
Define BKM_SETTABBITMAP 0x0362
Define BKM_SETTABTEXT 0x0363
Define BKM_SETNOTEBOOKCOLORS 0x0364
Define BKM_QUERYPAGESTYLE 0x0365
Define BKM_QUERYSTATUSLINETEXT 0x0366
Group Slider 1
Define SLM_ADDDETENT 0x0369
Define SLM_QUERYDETENTPOS 0x036A
Define SLM_QUERYSCALETEXT 0x036B
Define SLM_QUERYSLIDERINFO 0x036C
Define SLM_QUERYTICKPOS 0x036D
Define SLM_QUERYTICKSIZE 0x036E
Define SLM_REMOVEDETENT 0x036F
Define SLM_SETSCALETEXT 0x0370
Define SLM_SETSLIDERINFO 0x0371
Define SLM_SETTICKSIZE 0x0372
Group ValueSet 1
Define VM_QUERYITEM 0x0375
Define VM_QUERYITEMATTR 0x0376
Define VM_QUERYMETRICS 0x0377
Define VM_QUERYSELECTEDITEM 0x0378
Define VM_SELECTITEM 0x0379
Define VM_SETITEM 0x037A
Define VM_SETITEMATTR 0x037B
Define VM_SETMETRICS 0x037C
Group ExtMouseButtons 1
Define WM_CHORD 0x0410
Define WM_BUTTON1MOTIONSTART 0x0411
Define WM_BUTTON1MOTIONEND 0x0412
Define WM_BUTTON1CLICK 0x0413
Define WM_BUTTON2MOTIONSTART 0x0414
Define WM_BUTTON2MOTIONEND 0x0415
Define WM_BUTTON2CLICK 0x0416
Define WM_BUTTON3MOTIONSTART 0x0417
Define WM_BUTTON3MOTIONEND 0x0418
Define WM_BUTTON3CLICK 0x0419
Group MouseTranslate 1
Define WM_BEGINDRAG 0x0420
Define WM_ENDDRAG 0x0421
Define WM_SINGLESELECT 0x0422
Define WM_OPEN 0x0423
Define WM_CONTEXTMENU 0x0424
Define WM_CONTEXTHELP 0x0425
Define WM_TEXTEDIT 0x0426
Define WM_BEGINSELECT 0x0427
Define WM_ENDSELECT 0x0428
Group MediaControlInterface 1
Define MM_MCINOTIFY 0x0500
Define MM_MCIPASSDEVICE 0x0501
Define MM_MCIPOSITIONCHANGE 0x0502
Define MM_MCICUEPOINT 0x0503
Define MM_MCIPLAYLISTMESSAGE 0x0504
Define MM_MCIEVENT 0x0505
Define MM_MCISYNCH 0x0506
Group SecondaryWindow 1
Define WM_INITSECONDARYWINDOW 0x0519
Group GraphicButton 1
Define GBN_BUTTONUP 0x0524
Define GBN_BUTTONDOWN 0x0525
Define GBN_BUTTONHILITE 0x0526
Define GBM_SETGRAPHICDATA 0x052A
Define GBM_ANIMATE 0x052B
Define GBM_SETANIMATIONRATE 0x052C
Define GBM_QUERYANIMATIONACTIVE 0x052D
Define GBM_QUERYANIMATIONRATE 0x052E
Define GBM_SETBITMAPINDEX 0x052F
Define GBM_QUERYBITMAPINDEX 0x0530
Define GBM_SETSTATE 0x0531
Define GBM_QUERYSTATE 0x0532
Define GBM_SETTEXTPOSITION 0x0533
Define GBM_QUERYTEXTPOSITION 0x0534
Define MM_TABHELP 0x054C
Group CircularSlider 1
Define CSM_QUERYRANGE 0x053D
Define CSM_SETRANGE 0x053E
Define CSM_QUERYVALUE 0x053F
Define CSM_SETVALUE 0x0540
Define CSM_QUERYRADIUS 0x0541
Define CSM_SETINCREMENT 0x0542
Define CSM_QUERYINCREMENT 0x0543
Define CSM_SETBITMAPDATA 0x0544
Define CSN_SETFOCUS 0x0548
Define CSN_CHANGED 0x0549
Define CSN_TRACKING 0x054A
Define CSN_QUERYBACKGROUNDCOLOR 0x054B
/* Standard message status */
Include All
Exclude MouseMovement
Exclude WM_QUERYFOCUSCHAIN
ΓòÉΓòÉΓòÉ 10. Using Trigger Messages ΓòÉΓòÉΓòÉ
It is possible to define messages to trigger the automatic thawing or freezing
of the message list using:
1. the Message Filtering dialog
2. a profile file that you have created.
Trigger messages are valuable when you only want to see the messages that
occur:
o up to a event
o after a event
o between two events (see example below)
For example, to determine only the messages that are processed by the OS/2
Desktop when mouse button #1 is pressed and released:
1. Use the Freeze pull-down to stop messages from being added to the message
list
2. Open the Message Filtering dialog
3. Ensure that both the WM_BUTTON1DOWN and WM_BUTTON1UP messages are currently
included.
4. Select only the WM_BUTTON1DOWN message then press the Thaw pushbutton. Now
when this message is seen, messages will start being added to the message
list.
5. Select only the WM_BUTTON1UP message then press the Freeze pushbutton. When
this message is seen, messages will stop being added to the message list.
6. Select Done to close the dialog.
7. Use the Select desktop window pull-down to select the OS/2 Desktop for
spying.
8. Move the mouse cursor over a blank area of the desktop. Press and hold
mouse button #1. You should see messages added to the message list.
9. Release the mouse button and the message list should freeze.
This is a sample of what the previous steps generate:
ΓöîΓöÇΓöÇΓöÇ Step above
Γöé ΓöîΓöÇ List items
1 <<< list frozen >>>
8 <<< list thawed by trigger >>>
8 WM_BUTTON1DOWN 01EA0191 00000000 P 04801E64
8 WM_FOCUSCHANGE 8FE0CB9C 00000001 S 04801E64
8 WM_ACTIVATE 00000001 04601D64 S 04801E64
8 WM_SETSELECTION 00000001 00000000 S 04801E64
8 WM_SETFOCUS 8FE0CB9C 00000001 S 04801E64
8 CM_PAINTBACKGROUND 0003ED70 00000000 S 04801E64
8 CM_QUERYCNRINFO 0003E910 0000005C S 04801E64
8 WM_CONTROL 00708008 04801E64 S 04801E64
9 WM_BUTTON1UP 01EA0192 00000000 P 04801E64
9 <<< list frozen by trigger >>>
ΓòÉΓòÉΓòÉ 11. Message Filtering Dialog ΓòÉΓòÉΓòÉ
This dialog allows you to assign spying attributes to individual messages.
All of the messages are displayed with their current attributes. Select the
item(s) you want to adjust, then apply an attribute by using an attribute
button. After a button is used, each item is updated in the list. Press the
Done button when you have completed all assignments.
Include when the message is detected, it will be added to the spy list. the
message will also be examined to see if it is a triggering event
Exclude when the message is detected, it will not be added to the spy list.
the message's triggering attributes will not be examined
Freeze when the message is detected and is currently included, it will
automatically trigger the freezing of the spy list
Thaw when the message is detected and is currently included, it will
automatically trigger the thawing of the spy list
No trigger removes automatic freeze/thaw triggering
Reset resets message specific dynamic data (like how many times the message
has been seen, etc)
Delete deletes each message (it can NO longer be spyed..)
Notes:
o usually you will open this dialog after setting the filter list to a known
state (using one or more the following pull-downs: Include All, Exclude All,
Freeze, or Thaw)
o Delete is normally used when creating custom profiles
o the Color list allows you to additionally highlight messages in the spy list
with a special color. Pick a color before selecting an attribute pushbutton.
ΓòÉΓòÉΓòÉ 12. Group Filtering Dialog ΓòÉΓòÉΓòÉ
This dialog allows you to assign spying attributes to messages based on their
logical grouping.
All of the groups are displayed with their current attributes. Select the
item(s) you want to adjust, then apply an attribute by using an attribute
button. After a button is used, each item is updated in the list. Press the
Done button when you have completed all assignments.
Include when a message in this group is detected, it will be added to the spy
list
Exclude when a message in this group is detected, it will never added to the
spy list
Delete deletes all messages defined in this group (they can NO longer be
spyed..)
Notes:
o usually you will open this dialog after setting the filter list to a known
state (using one or more the following pull-downs: Include All, or Exclude
All)
o Delete is normally used when creating custom profiles
o the Color list allows you to additionally highlight messages in the spy list
with a special color. Pick a color before selecting an attribute pushbutton.
ΓòÉΓòÉΓòÉ 13. Window Selection dialog ΓòÉΓòÉΓòÉ
This dialog allows you to select a window for spying from a list of windows who
are descendents of HWND_DESKTOP and/or HWND_OBJECT. The list includes the
following data:
Hmq: 09112F78 Hwnd: 0000968F Linage: DSK.491.1 Class: Clock
Windows Windows Γöé P T Windows
queue handle DeSKtop ΓöÇΓöñ I I class name
OBJect ΓöÇΓöÿ D D
Select the window from the list that you would like to spy and then press a
pushbutton:
Spy HWND begins spying on the selected window's handle.
Spy HMQ begins spying on the selected window's queue.
Refresh refreshes the list using the current DESKTOP windows and
OBJECT windows values as criteria.
Cancel ends the dialog and preserves the current window/queue being
spyed.
ΓòÉΓòÉΓòÉ 14. Message Detail dialog ΓòÉΓòÉΓòÉ
This dialog displays detailed information about a particular spied message.
This includes displaying the message parameters in various formats as well as
message specific usage information.
To open this dialog, double-click mouse button #1 on a message in the message
list.
ΓòÉΓòÉΓòÉ 15. Notes dialog ΓòÉΓòÉΓòÉ
This dialog allows you to enter a text note that is then placed in the PMSPY
list and possible the LOG file.
You can use these notes to document what is happening, the beginning or end of
a test case, etc.
Enter the desired note text then press one of the pushbuttons.
OK This will accept the note text that you have entered. If you have
entered text, it will be placed in the PMSPY list and remembered as
the default note text for the next dialog invocation. If you have
not entered text, you will be warned by a beep.
Cancel This will cancel the dialog. All note text is discarded.
ΓòÉΓòÉΓòÉ 16. Font dialog ΓòÉΓòÉΓòÉ
This dialog allows you to select the non-proportional font to be used in the
PMSPY message list and dialogs.
Select the desired font then press one of the pushbuttons.
OK The PMSPY list will change to use the selected font.
Cancel This will cancel the dialog. All note text is discarded.
ΓòÉΓòÉΓòÉ 17. File ΓòÉΓòÉΓòÉ
This item allows you to work with:
o A profile file that you have created.
o A log file for saving the message list contents on disk.
o The default profile
ΓòÉΓòÉΓòÉ 18. Message profile ΓòÉΓòÉΓòÉ
This pull-down allows you to work with profile files that you have created.
ΓòÉΓòÉΓòÉ 19. Open, replace current ΓòÉΓòÉΓòÉ
This pull-down allows you to open a profile file that you have created. It
totally replaces the current profile. You would want to replace the current
profile to ensure that only the specific messages that you are interested in
are defined.
A file open dialog is opened to let you select the desired profile file.
ΓòÉΓòÉΓòÉ 20. Open, append to current ΓòÉΓòÉΓòÉ
This pull-down allows you to open a profile file that you have created. It is
appended to the current profile. You would want to append to the current
profile to only incrementally add application specific messages to those that
are currently defined. For example, you may create a profile for your
application's WM_USER and above messages. You would then append that to the
PMSPY default profile to be able to process standard PM as well as application
unique messages.
A file open dialog is opened to let you select the desired profile file.
ΓòÉΓòÉΓòÉ 21. Save current ΓòÉΓòÉΓòÉ
This pull-down allows you to save the current profile in a disk file. For
example, you may want to create a custom profile. After starting PMSPY you
would then select this pull-down to save the default profile in a disk file.
A file open dialog is opened to let you select the desired profile file.
ΓòÉΓòÉΓòÉ 22. Log file ΓòÉΓòÉΓòÉ
This pull-down allows you to work with a log file
ΓòÉΓòÉΓòÉ 23. Open ΓòÉΓòÉΓòÉ
This pull-down allows you to open a log file for saving the message list
contents on disk. The log file provides an added debugging and/or learning
opportunity because it contains all of the messages and notes that have
occurred since the log file was opened.
A file open dialog is opened to let you select the desired log file.
ΓòÉΓòÉΓòÉ 24. Open with list snapshot ΓòÉΓòÉΓòÉ
This pull-down allows you to open a log file for saving the message list
contents on disk. After the log file is opened, the current contents of the
message list is written to it. This after the fact logging can be a very
useful debug aid.
The log file provides an added debugging and/or learning opportunity because it
contains all of the messages and notes that have occurred since the log file
was opened.
A file open dialog is opened to let you select the desired log file.
ΓòÉΓòÉΓòÉ 25. Close ΓòÉΓòÉΓòÉ
This pull-down allows you to close the log file.
ΓòÉΓòÉΓòÉ 26. Default message profile ΓòÉΓòÉΓòÉ
This pull-down allows you to work with the default profile file shipped with
PMSPY.
ΓòÉΓòÉΓòÉ 27. Open, replace current ΓòÉΓòÉΓòÉ
This pull-down allows you to totally replace the current profile with the
default profile file. You would want to replace the current profile to restore
PMSPY back to its startup state.
ΓòÉΓòÉΓòÉ 28. Open, append to current ΓòÉΓòÉΓòÉ
This pull-down allows you to append the current profile with the default
profile file. This would add the standard set of PM messages. Since PMSPY has
already defined the standard messages, this is one less thing that you as an
application developer have to worry about.
ΓòÉΓòÉΓòÉ 29. Browse ΓòÉΓòÉΓòÉ
This pull-down allows you to browse the default profile file. This provides a
handy reference to all of the standard PM messages (including their hex
values).
ΓòÉΓòÉΓòÉ 30. Exit ΓòÉΓòÉΓòÉ
This pull-down allows you to exit PMSPY.
Note: If you select this pull-down, the current agent characteristics are
saved.
ΓòÉΓòÉΓòÉ 31. Spyon ΓòÉΓòÉΓòÉ
This item allows you to:
o Select the window to spy on
o Stop spying on a window
ΓòÉΓòÉΓòÉ 32. Select desktop window ΓòÉΓòÉΓòÉ
This pull-down allows you to select a visible window from the desktop for
spying. The pointer changes to a cross-hair to indicate that window selection
is in progress. If mouse moves over the current PMSPY window, the pointer
changes to an illegal pointer.
Position the pointer over the window you wish to spy and use one of the
following mouse actions to complete the selection process:
ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
ΓöéMouse ΓöéWhat happens then Γöé
Γöéaction Γöé Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöésingle ΓöéThe window and queueΓöé
Γöéclick Γöéhandles will be Γöé
Γöébutton Γöéretrieved for that Γöé
Γöé#1 Γöéwindow and spying Γöé
Γöé Γöéwill begin as Γöé
Γöé Γöémessages move Γöé
Γöé Γöéthrough the queue orΓöé
Γöé Γöéare sent to the Γöé
Γöé Γöéwindow. The window Γöé
Γöé Γöéor queue handle willΓöé
Γöé Γöébe displayed in the Γöé
Γöé ΓöéPMSPY titlebar. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöésingle ΓöéReveals the class Γöé
Γöéclick Γöéname, window and Γöé
Γöébutton Γöéqueue handles for Γöé
Γöé#2 Γöéthe window beneath Γöé
Γöé Γöéthe cursor. The Γöé
Γöé Γöéselection process Γöé
Γöé Γöéremains active. Γöé
Γöé ΓöéThis is a handy way Γöé
Γöé Γöéto explore the Γöé
Γöé Γöécurrent set of Γöé
Γöé Γöéwindows. Γöé
Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
Γöédouble ΓöéCancels the Γöé
Γöéclick Γöéselection of a Γöé
Γöébutton Γöéwindow. Γöé
Γöé#2 Γöé Γöé
ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
ΓòÉΓòÉΓòÉ 33. Select any window ΓòÉΓòÉΓòÉ
This pull-down displays a list of windows who are descendents of HWND_DESKTOP
and/or HWND_OBJECT. A window or queue can then be selected list for spying.
ΓòÉΓòÉΓòÉ 34. System message queue ΓòÉΓòÉΓòÉ
This pull-down allows you to select the PM system message queue for spying.
This allows you to spy all windows and application message queues at once.
W A R N I N G
Since spying on the system message queue can greatly affect PM and/or
application operation, it is recommended that all unnecessary PM messages be
excluded from spying before using this selection. Only the minimum required
subset of messages should be included.
ΓòÉΓòÉΓòÉ 35. Deselect current ΓòÉΓòÉΓòÉ
This pull-down allows you to stop spying on the selected window or queue.
ΓòÉΓòÉΓòÉ 36. SpyWhat ΓòÉΓòÉΓòÉ
This item allows you to:
o Spy on the selected window only
o Spy on all windows supported by the current message queue
ΓòÉΓòÉΓòÉ 37. Spy on window ΓòÉΓòÉΓòÉ
This pull-down limits the spying of messages to only those destined for the
current window or OBJECT. Any message not destined for that specific window is
ignored.
ΓòÉΓòÉΓòÉ 38. Spy on queue ΓòÉΓòÉΓòÉ
This pull-down expands the spying scope to include messages for all windows
supported by the current message queue. This capability to examine all windows
is required if you desire to debug dialogs.
ΓòÉΓòÉΓòÉ 39. Options ΓòÉΓòÉΓòÉ
This item allows you to:
o Control the message list
o Control the log file
o Add a text note
*
ΓòÉΓòÉΓòÉ 40. Spy list ΓòÉΓòÉΓòÉ
This set of pull-downs allow you to control message list operations.
ΓòÉΓòÉΓòÉ 41. Clear ΓòÉΓòÉΓòÉ
This pull-down clears all of the messages and/or notes from the message list.
You may want to clear the list as part of the setup for debugging a special
problem.
ΓòÉΓòÉΓòÉ 42. Freeze ΓòÉΓòÉΓòÉ
This pull-down freezes the message list. This means that no new messages will
be automatically added to the list until either:
1. you manually thaw the message list
2. a trigger message automatically thaws the message list
ΓòÉΓòÉΓòÉ 43. Thaw ΓòÉΓòÉΓòÉ
This pull-down thaws a previously frozen message list. This means that new,
eligible messages will again be automatically added to the list until either:
1. you manually freeze the message list
2. a trigger message automatically freezes the message list
ΓòÉΓòÉΓòÉ 44. Auto scroll? ΓòÉΓòÉΓòÉ
This pull-down represents the automatic scrolling state of the message list.
When checked, the message list will automatically scroll to keep the last added
message visible. This is the default setting.
When not checked, the list does not automatically scroll to keep the last added
message visible. This is useful when you need to examine the messages that have
previously been added to the list and do not want to be bothered by the
automatic scrolling that occurs when a new message is subsequently added to the
list.
ΓòÉΓòÉΓòÉ 45. Font ΓòÉΓòÉΓòÉ
This pull-down presents the Font dialog so that you can select the
non-proportional font used by the message list and dialogs.
ΓòÉΓòÉΓòÉ 46. Log file ΓòÉΓòÉΓòÉ
This set of pull-downs allow you to control log file operations.
ΓòÉΓòÉΓòÉ 47. Freeze ΓòÉΓòÉΓòÉ
This pull-down freezes the log file. This means that no new messages are
automatically written to the file (even though they are added to the message
list).
ΓòÉΓòÉΓòÉ 48. Thaw ΓòÉΓòÉΓòÉ
This pull-down thaws a previously frozen log file. This means that new messages
are also automatically written to the file (as well as being added to the
message list).
ΓòÉΓòÉΓòÉ 49. Add note ΓòÉΓòÉΓòÉ
This pull-down presents the Notes dialog so that you can enter a text note for
addition to the message list and possibly the log file.
You can use notes to document scenario setups, debugging notes, etc for later
reference or debugging assistance.
ΓòÉΓòÉΓòÉ 50. Save options ΓòÉΓòÉΓòÉ
This pull-down saves this PMSPY agent's current options in PMSPY.INI.
ΓòÉΓòÉΓòÉ 51. Filter ΓòÉΓòÉΓòÉ
This item allows you to:
o Control the spying of profile defined messages (on a group or individual
message basis)
o Control the spying of undefined messages
ΓòÉΓòÉΓòÉ 52. By group ΓòÉΓòÉΓòÉ
This pull-down presents the Group Filtering dialog so that you can select one
or more groups of messages.
Each group represents one or more individual messages that are logically
related to each other (for instance, all titlebar messages, etc). Message
groups are defined by PMSPY in the default profile or by you in a profile file.
ΓòÉΓòÉΓòÉ 53. By message ΓòÉΓòÉΓòÉ
This pull-down presents the Message Filtering dialog so that you can select one
or more messages. Messages are defined by PMSPY in the default profile or by
you in a profile file.
ΓòÉΓòÉΓòÉ 54. Exclude all messages ΓòÉΓòÉΓòÉ
This pull-down automatically excludes all defined messages (and groups) from
being included in the message list. By itself, this function is not very
useful. But when used before the Group Filtering dialog or the Message
Filtering dialog it provides a quick method for placing the message filtering
controls into a known state before setting up special filter combinations.
ΓòÉΓòÉΓòÉ 55. Include all messages ΓòÉΓòÉΓòÉ
This pull-down automatically enables the inclusion of all defined messages (and
groups) in the message list. By itself, this function is not very useful. But
when used before the Group Filtering dialog or the Message Filtering dialog it
provides a quick method for placing the message filtering controls into a known
state before setting up special filter combinations.
ΓòÉΓòÉΓòÉ 56. Include undefined messages? ΓòÉΓòÉΓòÉ
This pull-down allows you to spy on messages with a value less than WM_USER
that have not been defined in the current profile file. This allows you to spy
on other applications and see the non-standard messages that are used (for
example, the messages used with a program group dialog when items are selected
and dragged from one line to another). The Include undefined WM_USER pull-down
allows you to just include undefined messages that begin at the WM_USER value.
The following special format is used when displaying undefined messages:
WM_???? (0303) 01B40372 00010001 S 03300CC8
To examine just the undefined messages, first use the Exclude all messages,
then select this pull-down item.
ΓòÉΓòÉΓòÉ 57. Include undefined WM_USER? ΓòÉΓòÉΓòÉ
This pull-down allows you to spy on all messages defined at or above the
WM_USER value that have not been defined in the current profile file. This
allows you to spy on your (or other) applications and see the WM_USER messages
being used without having to define a special profile file. The Include
undefined messages? pull-down allow you to include all undefined messages.
The following special format is used when displaying undefined WM_USER
messages:
WM_USER (1010) 01B40372 00010001 S 03300CC8
To examine just the WM_USER messages, first use the Exclude all messages, then
select this pull-down item.
ΓòÉΓòÉΓòÉ 58. Help ΓòÉΓòÉΓòÉ
This item allows you to:
o Obtain operational help on using PMSPY
o Display PMSPY product information
ΓòÉΓòÉΓòÉ 59. Help for help ΓòÉΓòÉΓòÉ
This pull-down provides help on using the online help system.
ΓòÉΓòÉΓòÉ 60. Keys help ΓòÉΓòÉΓòÉ
This pull-down provides information about the various keyboard keys and their
usage.
ΓòÉΓòÉΓòÉ 61. Extended help ΓòÉΓòÉΓòÉ
This pull-down provides extended help about PMSPY.
ΓòÉΓòÉΓòÉ 62. Extended index ΓòÉΓòÉΓòÉ
This pull-down provides an index of all help topics.
ΓòÉΓòÉΓòÉ 63. Product Information ΓòÉΓòÉΓòÉ
This pull-down provides information about this version of PMSPY.
ΓòÉΓòÉΓòÉ 64. WinCreateHelpInstance error ΓòÉΓòÉΓòÉ
An error was detected during a WinCreateHelpInstance call.
ΓòÉΓòÉΓòÉ 65. WinAssociateHelpInstance error ΓòÉΓòÉΓòÉ
An error was detected during a WinAssociateHelpInstance call.
ΓòÉΓòÉΓòÉ 66. IPF Processing error ΓòÉΓòÉΓòÉ
An IPF error was detected.
ΓòÉΓòÉΓòÉ 67. Too many PMSPY instances ΓòÉΓòÉΓòÉ
There are already 8 PMSPY agents active. No more can be started at this time.
Re-use one of current PMSPY instances to process a new message queue or window.
ΓòÉΓòÉΓòÉ 68. Executible and "Hook" DLL Incompatible ΓòÉΓòÉΓòÉ
The internal versions of PMSPY.EXE and PMSPYHK.DLL are not compatible. Ensure
that the LIBPATH and PATH environment variables locate compatible files. If
necessary, re-install PMSPY.
ΓòÉΓòÉΓòÉ 69. Log file already exists ΓòÉΓòÉΓòÉ
The log file you selected already exists. This message requests verification
before replacing the existing file.
ΓòÉΓòÉΓòÉ 70. Profile file already exists ΓòÉΓòÉΓòÉ
The profile file you selected for saving already exists. This message requests
verification before replacing the existing file.
ΓòÉΓòÉΓòÉ 71. Spying on the PM system queue ΓòÉΓòÉΓòÉ
This message requests verification before beginning to spy on the PM system
message queue.
W A R N I N G
Since spying on the system message queue can greatly affect PM and/or
application operation, it is recommended that all unnecessary PM messages be
excluded from spying before using this selection. Only the minimum required
subset of messages should be included.
ΓòÉΓòÉΓòÉ 72. Profile file ΓòÉΓòÉΓòÉ
An optional profile can be used to define colors and message filtering options.
The file is interpreted sequentially. One advantage of creating a profile for
your application is that you define the message name to have the same mnemonic
value as you used when you coded it (for example, WM_STARTUP_PROCESSING) It is
even possible to automate the generation of application specific profiles to
ensure that they remain consistent with your application code as it changes
during the development cycle.
For an example, look at the default profile.
X <n>
Y <n>
CX <n>
CY <n>
SPYON <WINDOW> | <QUEUE>
LIST <THAW> | <FREEZE>
FONT <"10.System Monospaced">
COLOR <color> <SYSCLR_xxx> | <CLR_xxx>
GROUP <GroupID> [<color>]
DEFINE <MsgID> <MsgNo> [<color>]
INCLUDE ALL | <GroupID> | <MsgID>
EXCLUDE ALL | <GroupID> | <MsgID>
TRIGGER <MsgID> <THAW> | <FREEZE>
* <color> is 1..8 (1=default color; omit to leave default color ASIS)
1=color used for undefined messages
2=color used for undefined WM_USER messages
7=color used for NOTES
8=color used for PMSPY status messages
* <MsgID> is a blank delimited "word" (optionally it may be enclosed in
double quotes)
* <MsgNo> is a decimal, hex, or octal (for those DEC fans) number.
Simple addition is also supported: WM_USER+5
* <GroupID> is a blank delimited "word" (optionally it may be enclosed in
double quotes)
ΓòÉΓòÉΓòÉ 73. Command Line ΓòÉΓòÉΓòÉ
The following command line parameters are all optional and case insensitive.
They are processed as they are found (left-to-right).
PMSPY [/PRO=file] [/APP=file]
/PRO=file reads <file> as a profile and replaces the default profile.
/APP=file reads <file> as a profile and appends it to the default profile.
Combinations of /PRO= /APP= may be used on one invocation to setup special
filtering situations. For example, the following invocation establishes an
application specific filter set composed of two groups of messages (without
using the 'standard' PM message set):
PMSPY /PRO=app_set1.pro /APP=app_set2.pro
The first /PRO= "clears" the default message filtering set then loads the
message groups defined in APP_SET1.PRO. The /APP= then adds the additional
messages groups defined in APP_SET2.PRO.
ΓòÉΓòÉΓòÉ 74. Log file ΓòÉΓòÉΓòÉ
This file can be used to save the contents of the message list on disk. All
messages and text notes are written to the log file if one has been opened.
One advantage of using a log file is that you can view all of the messages that
have occurred. Due to listbox limitations, the oldest messages are deleted
from the listbox to make room for the ones currently occurring.
ΓòÉΓòÉΓòÉ 75. Keys Help ΓòÉΓòÉΓòÉ
All OS/2 keys are functional while you are using PMSPY. See the OS/2 keys help
for a complete list of these keys.
In addition, shortcut keys have been defined for selected PMSPY actions. These
are indicated when an action bar item is selected and its pull-downs are
displayed.
ΓòÉΓòÉΓòÉ 76. Help for Help ΓòÉΓòÉΓòÉ
Help is always available. The type of help you get is determined by the item
selected when you requested help.
When you ask for help, you will see a window containing help information. You
can size or move this window like any other. You can also leave the help window
visible while you do the task.