SilkTest高级进阶系列7-用PostMessage模拟鼠标

SilkTest可以通过调用Windows API来向控件发送消息,从而进行特定的操作。下面这段code使用PostMessage来向计算器上的清除键发送WM_LBUTTONDOWN和WM_LBUTTONUP两个消息,从而模拟PressMouse和ReleaseMouse的操作。

[ ] use “C:/TA/SilkTest/mswfun32.inc”
[ ] use “C:/TA/SilkTest/msw32.inc”
[ ] use “C:/TA/SilkTest/mswconst.inc”
[ ]
[+] window MainWin Calculator
[+] multitag “Calculator”
[ ] “$C:/WINNT/system32/calc.exe”
[+] Menu Edit
[ ] tag “Edit”
[+] MenuItem Copy
[+] multitag “Copy”
[ ] “$300”
[+] MenuItem Paste
[+] multitag “Paste”
[ ] “$301”
[+] Menu View
[ ] tag “View”
[+] MenuItem Standard
[+] multitag “Standard”
[ ] “$305”
[+] MenuItem Scientific
[+] multitag “Scientific”
[ ] “$304”
[+] MenuItem DigitGrouping
[+] multitag “Digit grouping”
[ ] “$303”
[+] Menu Help
[ ] tag “Help”
[+] MenuItem HelpTopics
[+] multitag “Help Topics”
[ ] “$317”
[+] MenuItem AboutCalculator
[+] multitag “About Calculator”
[ ] “$302”
[+] TextField TextField1
[ ] tag “$403”
[+] PushButton MC
[+] multitag “MC”
[ ] “$113”
[+] PushButton MR
[+] multitag “MR”
[ ] “$114”
[+] PushButton MS
[+] multitag “MS”
[ ] “$115”
[+] PushButton M
[+] multitag “M+”
[ ] “$116”
[+] PushButton N7
[+] multitag “7”
[ ] “$131”
[+] PushButton N4
[+] multitag “4”
[ ] “$128”
[+] PushButton N1
[+] multitag “1”
[ ] “$125”
[+] PushButton N0
[+] multitag “0”
[ ] “$124”
[+] PushButton N8
[+] multitag “8”
[ ] “$132”
[+] PushButton N51
[+] multitag “5”
[ ] “$129”
[+] PushButton N2
[+] multitag “2”
[ ] “$126”
[+] PushButton PushButton24
[+] multitag “+?-”
[ ] “$80”
[+] PushButton N91
[+] multitag “9”
[ ] “$133”
[+] PushButton N6
[+] multitag “6”
[ ] “$130”
[+] PushButton N3
[+] multitag “3”
[ ] “$127”
[+] PushButton N16
[+] multitag “?[16]”
[ ] “$85”
[+] PushButton N52
[+] multitag “?[5]”
[ ] “$90”
[+] PushButton N92
[+] multitag “?[9]”
[ ] “$91”
[+] PushButton PushButton20
[+] multitag “-”
[ ] “$93”
[+] PushButton PushButton26
[+] multitag “+”
[ ] “$92”
[+] PushButton PushButton27
[+] multitag “=”
[ ] “$112”
[+] PushButton Backspace
[+] multitag “Backspace”
[ ] “$83”
[+] PushButton CE
[+] multitag “CE”
[ ] “$82”
[+] PushButton C
[+] multitag “C”
[ ] “$81”
[+] StaticText StaticText1
[ ] tag “$401”
[+] PushButton N1X
[+] multitag “1?x”
[ ] “$107”
[+] PushButton Sqt
[+] multitag “sqt”
[ ] “$103”
[+] PushButton PushButton15
[+] multitag “%”
[ ] “$109”
[+] StaticText StaticText2
[ ] tag “$1000”
[ ]
[+] testcase PressAndReleaseButton() appstate none
[ ] // get the hanle of window
[ ] INTEGER hdWnd = Calculator.CE.GetHandle()
[ ] // input 11
[ ] Calculator.SetActive()
[ ] Calculator.N1.Click()
[ ] Calculator.N1.Click()
[ ] sleep(1)
[ ] // Press Left key of mouse
[ ] PostMessage(hdWnd, WM_LBUTTONDOWN, 0, 0 )
[ ] sleep(4)
[ ] // Release Left key of mouse
[ ] PostMessage(hdWnd, WM_LBUTTONUP,0, 0)
[ ]

你同样可以通过SendMessage实现相同的功能,他们二者的差别就是一个是异步消息,一个是同步消息。如果你想了解更多,可以google下二者具体的区别。

另外附上一些Windows常用消息号。

WM_NULL = 0x00
WM_CREATE = 0x01
WM_DESTROY = 0x02
WM_MOVE = 0x03
WM_SIZE = 0x05
WM_ACTIVATE = 0x06
WM_SETFOCUS = 0x07
WM_KILLFOCUS = 0x08
WM_ENABLE = 0x0A
WM_SETREDRAW = 0x0B
WM_SETTEXT = 0x0C
WM_GETTEXT = 0x0D
WM_GETTEXTLENGTH = 0x0E
WM_PAINT = 0x0F
WM_CLOSE = 0x10
WM_QUERYENDSESSION = 0x11
WM_QUIT = 0x12
WM_QUERYOPEN = 0x13
WM_ERASEBKGND = 0x14
WM_SYSCOLORCHANGE = 0x15
WM_ENDSESSION = 0x16
WM_SYSTEMERROR = 0x17
WM_SHOWWINDOW = 0x18
WM_CTLCOLOR = 0x19
WM_WININICHANGE = 0x1A
WM_SETTINGCHANGE = 0x1A
WM_DEVMODECHANGE = 0x1B
WM_ACTIVATEAPP = 0x1C
WM_FONTCHANGE = 0x1D
WM_TIMECHANGE = 0x1E
WM_CANCELMODE = 0x1F
WM_SETCURSOR = 0x20
WM_MOUSEACTIVATE = 0x21
WM_CHILDACTIVATE = 0x22
WM_QUEUESYNC = 0x23
WM_GETMINMAXINFO = 0x24
WM_PAINTICON = 0x26
WM_ICONERASEBKGND = 0x27
WM_NEXTDLGCTL = 0x28
WM_SPOOLERSTATUS = 0x2A
WM_DRAWITEM = 0x2B
WM_MEASUREITEM = 0x2C
WM_DELETEITEM = 0x2D
WM_VKEYTOITEM = 0x2E
WM_CHARTOITEM = 0x2F

WM_SETFONT = 0x30
WM_GETFONT = 0x31
WM_SETHOTKEY = 0x32
WM_GETHOTKEY = 0x33
WM_QUERYDRAGICON = 0x37
WM_COMPAREITEM = 0x39
WM_COMPACTING = 0x41
WM_WINDOWPOSCHANGING = 0x46
WM_WINDOWPOSCHANGED = 0x47
WM_POWER = 0x48
WM_COPYDATA = 0x4A
WM_CANCELJOURNAL = 0x4B
WM_NOTIFY = 0x4E
WM_INPUTLANGCHANGEREQUEST = 0x50
WM_INPUTLANGCHANGE = 0x51
WM_TCARD = 0x52
WM_HELP = 0x53
WM_USERCHANGED = 0x54
WM_NOTIFYFORMAT = 0x55
WM_CONTEXTMENU = 0x7B
WM_STYLECHANGING = 0x7C
WM_STYLECHANGED = 0x7D
WM_DISPLAYCHANGE = 0x7E
WM_GETICON = 0x7F
WM_SETICON = 0x80

WM_NCCREATE = 0x81
WM_NCDESTROY = 0x82
WM_NCCALCSIZE = 0x83
WM_NCHITTEST = 0x84
WM_NCPAINT = 0x85
WM_NCACTIVATE = 0x86
WM_GETDLGCODE = 0x87
WM_NCMOUSEMOVE = 0xA0
WM_NCLBUTTONDOWN = 0xA1
WM_NCLBUTTONUP = 0xA2
WM_NCLBUTTONDBLCLK = 0xA3
WM_NCRBUTTONDOWN = 0xA4
WM_NCRBUTTONUP = 0xA5
WM_NCRBUTTONDBLCLK = 0xA6
WM_NCMBUTTONDOWN = 0xA7
WM_NCMBUTTONUP = 0xA8
WM_NCMBUTTONDBLCLK = 0xA9

WM_KEYFIRST = 0x100
WM_KEYDOWN = 0x100
WM_KEYUP = 0x101
WM_CHAR = 0x102
WM_DEADCHAR = 0x103
WM_SYSKEYDOWN = 0x104
WM_SYSKEYUP = 0x105
WM_SYSCHAR = 0x106
WM_SYSDEADCHAR = 0x107
WM_KEYLAST = 0x108

WM_IME_STARTCOMPOSITION = 0x10D
WM_IME_ENDCOMPOSITION = 0x10E
WM_IME_COMPOSITION = 0x10F
WM_IME_KEYLAST = 0x10F

WM_INITDIALOG = 0x110
WM_COMMAND = 0x111
WM_SYSCOMMAND = 0x112
WM_TIMER = 0x113
WM_HSCROLL = 0x114
WM_VSCROLL = 0x115
WM_INITMENU = 0x116
WM_INITMENUPOPUP = 0x117
WM_MENUSELECT = 0x11F
WM_MENUCHAR = 0x120
WM_ENTERIDLE = 0x121

WM_CTLCOLORMSGBOX = 0x132
WM_CTLCOLOREDIT = 0x133
WM_CTLCOLORLISTBOX = 0x134
WM_CTLCOLORBTN = 0x135
WM_CTLCOLORDLG = 0x136
WM_CTLCOLORSCROLLBAR = 0x137
WM_CTLCOLORSTATIC = 0x138

WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200
WM_LBUTTONDOWN = 0x201
WM_LBUTTONUP = 0x202
WM_LBUTTONDBLCLK = 0x203
WM_RBUTTONDOWN = 0x204
WM_RBUTTONUP = 0x205
WM_RBUTTONDBLCLK = 0x206
WM_MBUTTONDOWN = 0x207
WM_MBUTTONUP = 0x208
WM_MBUTTONDBLCLK = 0x209
WM_MOUSEWHEEL = 0x20A
WM_MOUSEHWHEEL = 0x20E

WM_PARENTNOTIFY = 0x210
WM_ENTERMENULOOP = 0x211
WM_EXITMENULOOP = 0x212
WM_NEXTMENU = 0x213
WM_SIZING = 0x214
WM_CAPTURECHANGED = 0x215
WM_MOVING = 0x216
WM_POWERBROADCAST = 0x218
WM_DEVICECHANGE = 0x219

WM_MDICREATE = 0x220
WM_MDIDESTROY = 0x221
WM_MDIACTIVATE = 0x222
WM_MDIRESTORE = 0x223
WM_MDINEXT = 0x224
WM_MDIMAXIMIZE = 0x225
WM_MDITILE = 0x226
WM_MDICASCADE = 0x227
WM_MDIICONARRANGE = 0x228
WM_MDIGETACTIVE = 0x229
WM_MDISETMENU = 0x230
WM_ENTERSIZEMOVE = 0x231
WM_EXITSIZEMOVE = 0x232
WM_DROPFILES = 0x233
WM_MDIREFRESHMENU = 0x234

WM_IME_SETCONTEXT = 0x281
WM_IME_NOTIFY = 0x282
WM_IME_CONTROL = 0x283
WM_IME_COMPOSITIONFULL = 0x284
WM_IME_SELECT = 0x285
WM_IME_CHAR = 0x286
WM_IME_KEYDOWN = 0x290
WM_IME_KEYUP = 0x291

WM_MOUSEHOVER = 0x2A1
WM_NCMOUSELEAVE = 0x2A2
WM_MOUSELEAVE = 0x2A3

WM_CUT = 0x300
WM_COPY = 0x301
WM_PASTE = 0x302
WM_CLEAR = 0x303
WM_UNDO = 0x304

WM_RENDERFORMAT = 0x305
WM_RENDERALLFORMATS = 0x306
WM_DESTROYCLIPBOARD = 0x307
WM_DRAWCLIPBOARD = 0x308
WM_PAINTCLIPBOARD = 0x309
WM_VSCROLLCLIPBOARD = 0x30A
WM_SIZECLIPBOARD = 0x30B
WM_ASKCBFORMATNAME = 0x30C
WM_CHANGECBCHAIN = 0x30D
WM_HSCROLLCLIPBOARD = 0x30E
WM_QUERYNEWPALETTE = 0x30F
WM_PALETTEISCHANGING = 0x310
WM_PALETTECHANGED = 0x311

WM_HOTKEY = 0x312
WM_PRINT = 0x317
WM_PRINTCLIENT = 0x318

WM_HANDHELDFIRST = 0x358
WM_HANDHELDLAST = 0x35F
WM_PENWINFIRST = 0x380
WM_PENWINLAST = 0x38F
WM_COALESCE_FIRST = 0x390
WM_COALESCE_LAST = 0x39F
WM_DDE_FIRST = 0x3E0
WM_DDE_INITIATE = 0x3E0
WM_DDE_TERMINATE = 0x3E1
WM_DDE_ADVISE = 0x3E2
WM_DDE_UNADVISE = 0x3E3
WM_DDE_ACK = 0x3E4
WM_DDE_DATA = 0x3E5
WM_DDE_REQUEST = 0x3E6
WM_DDE_POKE = 0x3E7
WM_DDE_EXECUTE = 0x3E8
WM_DDE_LAST = 0x3E8

WM_USER = 0x400
WM_APP = 0x8000

Leave a comment

请输入正确的验证码