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