15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_FRAME_TEST_SIMULATE_INPUT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_FRAME_TEST_SIMULATE_INPUT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/process_handle.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace simulate_input { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum Modifier { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NONE, 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHIFT = 1, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTROL = 2, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ALT = 4 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum KeyMode { 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) KEY_DOWN, 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) KEY_UP, 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Bring a window into foreground to receive user input. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that this may not work on 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ForceSetForegroundWindow(HWND window); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Looks for a top level window owned by the given process id and 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// calls ForceSetForegroundWindow on it. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool EnsureProcessInForeground(base::ProcessId process_id); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper function to set keyboard focus to a window. This is achieved by 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// sending a mouse move followed by a mouse down/mouse up combination to the 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// window. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetKeyboardFocusToWindow(HWND window); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Sends a keystroke to the currently active application with optional modifiers 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// set. Sends one "key (down|up)" input event for each modifier set, plus one 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// for |mnemonic_char| depending on the value of |key_mode|. This can be useful 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// as it has been observed that tests will exit after receiving the "key down" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// events leaving the keyboard in an inconsistent state. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SendMnemonic(WORD mnemonic_char, uint32 modifiers, bool extended, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool unicode, KeyMode key_mode); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sends a mouse click to the desktop. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum MouseButton { LEFT, RIGHT, MIDDLE, X }; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SendMouseClick(int x, int y, MouseButton button); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sends a mouse click to the window passed in, after ensuring that the window 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// is in the foreground. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SendMouseClick(HWND window, int x, int y, MouseButton button); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Translates a single char to a virtual key. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SendScanCode(short scan_code, uint32 modifiers); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SendCharA(char c, uint32 modifiers); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SendCharW(wchar_t c, uint32 modifiers); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Sends extended keystroke to the currently active application with optional 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// modifiers set. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SendExtendedKey(WORD key, uint32 modifiers); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Iterates through all the characters in the string and simulates 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// keyboard input. The input goes to the currently active application. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SendStringW(const std::wstring& s); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SendStringA(const std::string& s); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // end namespace simulate_input 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_FRAME_TEST_SIMULATE_INPUT_H_ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74