class RAutomation::Adapter::MsUia::KeystrokeConverter

Public Class Methods

convert(str) click to toggle source
# File lib/rautomation/adapter/ms_uia/keystroke_converter.rb, line 8
def convert(str)
  special_characters = ""

  str.split(/([{}])/).inject([]) do |converted_keys, str|
    if str == "}"
      converted_keys << convert_special_characters(special_characters << str)
      special_characters = ""
    elsif str == "{" || !special_characters.empty?
      special_characters << str
    else
      converted_keys += convert_characters(str)
    end
    converted_keys
  end.flatten
end

Private Class Methods

convert_characters(element) click to toggle source
# File lib/rautomation/adapter/ms_uia/keystroke_converter.rb, line 61
def convert_characters(element)
  element.split(//).inject([]) do |chars, char|
    char_code = char.upcase.unpack("c")[0]
    case char
      when "!"
        chars += in_upcase(49)
      when "@"
        chars += in_upcase(50)
      when "\#"
        chars += in_upcase(51)
      when "$"
        chars += in_upcase(52)
      when "%"
        chars += in_upcase(53)
      when "^"
        chars += in_upcase(54)
      when "&"
        chars += in_upcase(55)
      when "*"
        chars += in_upcase(56)
      when "("
        chars += in_upcase(57)
      when ")"
        chars += in_upcase(48)
      when "\""
        chars += in_upcase(0xDE)
      when "'"
        chars << 0xDE
      when "/"
        chars << 0xBF
      when "-"
        chars << 0xBD
      when ","
        chars << 0xBC
      when "'"
        chars << 0xDE
      when "&"
        chars += in_upcase(0x37)
      when "_"
        chars += in_upcase(0xBD)
      when "<"
        chars += in_upcase(0xBC)
      when ">"
        chars += in_upcase(0xBE)
      else
        if char =~ /[A-Z]/
          chars += in_upcase(char_code)
        else
          chars << char_code
        end
    end
  end
end
convert_special_characters(chars) click to toggle source
# File lib/rautomation/adapter/ms_uia/keystroke_converter.rb, line 26
def convert_special_characters chars
  case chars.downcase
    when "{tab}"
      Constants::VK_TAB
    when "{backspace}"
      Constants::VK_BACK
    when "{enter}"
      Constants::VK_RETURN
    when "{left}"
      Constants::VK_LEFT
    when "{right}"
      Constants::VK_RIGHT
    when "{down}"
      Constants::VK_DOWN
    when "{up}"
      Constants::VK_UP
    when "{home}"
      Constants::VK_HOME
    when "{end}"
      Constants::VK_END
    when "{delete}"
      Constants::VK_DELETE
    when "{pgdown}"
      Constants::VK_NEXT
    when "{pgup}"
      Constants::VK_PRIOR
    else
      # unsupported special tag, ignore the tag itself, but convert the
      # characters inside the tag
      convert_characters(chars.gsub(/[{}]/, ""))
  end
end
in_upcase(char_code) click to toggle source
# File lib/rautomation/adapter/ms_uia/keystroke_converter.rb, line 115
def in_upcase(char_code)
  [Constants::VK_LSHIFT, char_code]
end