Home | History | Annotate | Download | only in test
      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 
     14 namespace simulate_input {
     15 
     16 enum Modifier {
     17   NONE,
     18   SHIFT = 1,
     19   CONTROL = 2,
     20   ALT = 4
     21 };
     22 
     23 enum 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
     30 bool ForceSetForegroundWindow(HWND window);
     31 
     32 // Looks for a top level window owned by the given process id and
     33 // calls ForceSetForegroundWindow on it.
     34 bool 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.
     39 void 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.
     46 void SendMnemonic(WORD mnemonic_char, uint32 modifiers, bool extended,
     47                   bool unicode, KeyMode key_mode);
     48 
     49 // Sends a mouse click to the desktop.
     50 enum MouseButton { LEFT, RIGHT, MIDDLE, X };
     51 void 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.
     54 void SendMouseClick(HWND window, int x, int y, MouseButton button);
     55 
     56 // Translates a single char to a virtual key.
     57 void SendScanCode(short scan_code, uint32 modifiers);
     58 void SendCharA(char c, uint32 modifiers);
     59 void SendCharW(wchar_t c, uint32 modifiers);
     60 
     61 // Sends extended keystroke to the currently active application with optional
     62 // modifiers set.
     63 void 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.
     67 void SendStringW(const std::wstring& s);
     68 void SendStringA(const std::string& s);
     69 
     70 }  // end namespace simulate_input
     71 
     72 #endif  // CHROME_FRAME_TEST_SIMULATE_INPUT_H_
     73 
     74