Let’s face it. If you’ve been doing test automation for any length of time you’ve faced situations in which you need to perform mouse or keyboard actions using screen coordinates.
When the Set and Type Methods Suck:
Even though most objects have Set and Type methods, these methods — for whatever reason — may not work in all situations. If they don’t then your next step may be to try VBScript's sendkey method. But even sendkeys sometimes do not have a way to perform certain actions, such as pressing the left alt key. Hence the need for QTP’s undocumented Device Replay features.
No ASCII No Problem:
A few months back, I posted an article outlining three different ways to use keyboard input in QTP. I recently came across some more Device Replay Key codes for the PressKey, Keydown, Keyup and PressNKeys that I’d like to share with you. These methods are particularly helpful in certain situations in which you need to perform an action using a code that does not have an ASCII equivalent.
Chart of the keyboard key codes for the PressKey, Keydown, Keyup and PressNKeys:
The number keys:
Keystroke | Code to use |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
The keypad number keys:
Keystroke | Code to use |
1 | 79 |
2 | 80 |
3 | 81 |
4 | 75 |
5 | 76 |
6 | 77 |
7 | 71 |
8 | 72 |
9 | 73 |
0 | 82 |
The Function keys:
Keystroke | Code to use |
F1 | 59 |
F2 | 60 |
F3 | 61 |
F4 | 62 |
F5 | 63 |
F6 | 64 |
F7 | 65 |
F8 | 66 |
F9 | 67 |
F10 | 68 |
F11 | 87 |
F12 | 88 |
The Letter keys:
Keystroke | Code to use |
A | 30 |
B | 48 |
C | 46 |
D | 32 |
E | 18 |
F | 33 |
G | 34 |
H | 35 |
I | 23 |
J | 36 |
K | 37 |
L | 38 |
M | 50 |
N | 49 |
O | 24 |
P | 25 |
Q | 16 |
R | 19 |
S | 31 |
T | 20 |
U | 22 |
V | 47 |
W | 17 |
X | 45 |
Y | 21 |
Z | 44 |
The Enter, Space, Shift, Ctrl and Alt keys:
Keystroke | Code to use |
ENTER | 28 |
SPACE | 57 |
LEFT SHIFT | 42 |
LEFT CTRL | 29 |
LEFT ALT | 56 |
RIGHT SHIFT | 54 |
RIGHT CTRL | 157 |
RIGHT ALT | 184 |
; | 39 |
‘ | 40 |
, | 51 |
. | 52 |
/ | 53 |
The Weird/Other keys:
Keystroke | Code to use |
– | 12 |
[ | 26 |
] | 27 |
` | 41 |
= | 13 |
BACKSPACE | 14 |
CAPSLOCK | 58 |
DELETE | 211 |
DOWN | 208 |
END | 207 |
HOME | 199 |
INSERT | 210 |
LEFT | 203 |
NUMLOCK | 69 |
KEYPAD DECIMAL | 83 |
KEYPAD DIVIDE | 181 |
KEYPAD ENTER | 156 |
KEYPAD MINUS | 74 |
KEYPAD MULTIPLY | 55 |
PAUSE | 116 |
PAGE DOWN | 209 |
PAGE UP | 201 |
RIGHT | 205 |
SCROLL LOCK | 70 |
TAB | 15 |
UP | 20O |
Joe,
Any idea why Device Replay feature is undocumented?
Great post Joe.
Is there any way to simulate the Windows or the Right Click Key through Device Replay?
Abhijeet » Thanks Abhijeet – I think you can mimic a right click by passing the deviceReplay’s Mouse click method the RIGHT_MOUSE_BUTTON option:
Set deviceReplay = CreateObject(“Mercury.DeviceReplay”)
deviceReplay.MouseClick getX,getY,RIGHT_MOUSE_BUTTON
What is the number code to use for zero (0) on the number keys? (NOT keypad number keys)
Looks like scancode set 1 to me (MAKE).
Here’s a full list
http://www.computer-engineering.org/ps2keyboard/scancodes1.html
Hi Joe,
Great post, what is the code for an “Esc” key?
Thanks – I think {ESCAPE} should work
Joe, this has been invaluable. I was a bit thrown by the capital letters when I wanted to use a lower case one, but once I figured out that the numbers refer to the key positions, it was fine.
how to minimize the browser in qtp with the help of send keys and device replay, PressKey, KeyDown, KeyUp and PressNKeys.
Hi Does this work to minimize the browser:
Dim hwnd, isMinimized, isMinimizable
‘Find the handle for the Browser window
hwnd = Browser(“CreationTime:=0”).Object.HWND
‘Check if the Browser is already minimized or not
If Window(“hwnd:=” & hwnd).GetROProperty(“minimized”) = True Then
isMinimized = True
Else
isMinimized = False
End If
‘Check if the Browser is minimizable or not
If Window(“hwnd:=” & hwnd).GetROProperty(“minimizable”) = True Then
isMinimizable = True
Else
isMinimizable = False
End If
‘Minimize the browser window if it is not already minimized and is minimizable
If isMinimized = False and isMinimizable = True Then
Window(“hwnd:=” & hwnd).Minimize
End If
Great document, its been helping me with my coding, However the ASCII code for numbers 1-9 is incorrect, in example the ASCII code for the number 2 is not 2 but 3, enjoy!
I need to press “Alt+r” key , currently i’m working in IE browser. Please help with the syntax
Joe, you are amazing. Where do you find this stuff? I am just glad you do. Thanks for your continued help. Oh, and I love your API Manifesto book. It is fantastic.
Thanks Brian! Glad it helped.
Hi Joe,
I want to hold left mouse button for at least 2 or 3 second, may i know how to use it
Can you do something like this?
SwfWindow(“Window”).Type micShiftDwn ‘To press the shift key down
wait(3)
SwfWindow(“Window”).Type micShiftUp ‘To release the pressed key.
Device reply is failing 50% of time in remote run. It works fine if I run in local machine. But 50% of cases fails when we run in remote machine.
Any suggestions?
I am facing trouble in using “Mercury.Clipboard”.
It throws an error : “Active’x component can’t create object: Mercury.Clipboard”.
Any help or advice is really appreciated.
Hi Joe, HP or rather Micro Focus UFT is a slow tool which uses the dead language VbScript for web ui automation. I wonder if the tool is still useful for any web ui automation. Would you recommend UFT under for web ui under any circumstances ?
I would if you have a web application that needs to interact with thick client applications as well.