1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_FRAME_TEST_SIMULATE_INPUT_H_
6#define CHROME_FRAME_TEST_SIMULATE_INPUT_H_
7
8#include <windows.h>
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/process/process_handle.h"
13
14namespace simulate_input {
15
16enum Modifier {
17  NONE,
18  SHIFT = 1,
19  CONTROL = 2,
20  ALT = 4
21};
22
23enum KeyMode {
24  KEY_DOWN,
25  KEY_UP,
26};
27
28// Bring a window into foreground to receive user input.
29// Note that this may not work on
30bool ForceSetForegroundWindow(HWND window);
31
32// Looks for a top level window owned by the given process id and
33// calls ForceSetForegroundWindow on it.
34bool EnsureProcessInForeground(base::ProcessId process_id);
35
36// Helper function to set keyboard focus to a window. This is achieved by
37// sending a mouse move followed by a mouse down/mouse up combination to the
38// window.
39void SetKeyboardFocusToWindow(HWND window);
40
41// Sends a keystroke to the currently active application with optional modifiers
42// set. Sends one "key (down|up)" input event for each modifier set, plus one
43// for |mnemonic_char| depending on the value of |key_mode|. This can be useful
44// as it has been observed that tests will exit after receiving the "key down"
45// events leaving the keyboard in an inconsistent state.
46void SendMnemonic(WORD mnemonic_char, uint32 modifiers, bool extended,
47                  bool unicode, KeyMode key_mode);
48
49// Sends a mouse click to the desktop.
50enum MouseButton { LEFT, RIGHT, MIDDLE, X };
51void SendMouseClick(int x, int y, MouseButton button);
52// Sends a mouse click to the window passed in, after ensuring that the window
53// is in the foreground.
54void SendMouseClick(HWND window, int x, int y, MouseButton button);
55
56// Translates a single char to a virtual key.
57void SendScanCode(short scan_code, uint32 modifiers);
58void SendCharA(char c, uint32 modifiers);
59void SendCharW(wchar_t c, uint32 modifiers);
60
61// Sends extended keystroke to the currently active application with optional
62// modifiers set.
63void SendExtendedKey(WORD key, uint32 modifiers);
64
65// Iterates through all the characters in the string and simulates
66// keyboard input.  The input goes to the currently active application.
67void SendStringW(const std::wstring& s);
68void SendStringA(const std::string& s);
69
70}  // end namespace simulate_input
71
72#endif  // CHROME_FRAME_TEST_SIMULATE_INPUT_H_
73
74