Class: MacOS::Keyboard

Inherits:
Object
  • Object
show all
Defined in:
lib/macos/keyboard.rb

Overview

Simulates a macOS keyboard.

Constant Summary collapse

MILISECOND =
0.001

Instance Method Summary collapse

Instance Method Details

#key(character, mask: 0) ⇒ Object

Examples:

keyboard.key("s", mask: Library::CoreGraphics::EventFlags::MASK_COMMAND)

Parameters:

  • character (String)

    a character to be pressed then released

  • mask (Integer) (defaults to: 0)

    a bitmask of event flags (e.g. Library::CoreGraphics::EventFlags::MASK_SHIFT)



42
43
44
45
# File 'lib/macos/keyboard.rb', line 42

def key(character, mask: 0)
  key_down(character, mask:)
  key_up(character, mask:)
end

#key_down(character, mask: 0) ⇒ Object

Examples:

keyboard.key_down("c", mask: Library::CoreGraphics::EventFlags::MASK_COMMAND)

Parameters:

  • character (String)

    a character to be typed

  • mask (Integer) (defaults to: 0)

    a bitmask of event flags (e.g. Library::CoreGraphics::EventFlags::MASK_SHIFT)



52
53
54
55
56
57
58
59
# File 'lib/macos/keyboard.rb', line 52

def key_down(character, mask: 0)
  code = Library::CoreGraphics::KeyCode.find(character)
  event = Library::CoreGraphics.CGEventCreateKeyboardEvent(nil, code, true)
  Library::CoreGraphics.CGEventSetFlags(event, mask) unless mask.zero?
  Library::CoreGraphics.CGEventPost(Library::CoreGraphics::EventTapLocation::HID_EVENT_TAP, event)
  Library::CoreGraphics.CFRelease(event)
  sleep(MILISECOND)
end

#key_up(character, mask: 0) ⇒ Object

Examples:

keyboard.key_up("c", mask: Library::CoreGraphics::EventFlags::MASK_COMMAND)

Parameters:

  • character (String)

    a character to be released

  • mask (Integer) (defaults to: 0)

    a bitmask of event flags (e.g. Library::CoreGraphics::EventFlags::MASK_SHIFT)



66
67
68
69
70
71
72
73
# File 'lib/macos/keyboard.rb', line 66

def key_up(character, mask: 0)
  code = Library::CoreGraphics::KeyCode.find(character)
  event = Library::CoreGraphics.CGEventCreateKeyboardEvent(nil, code, false)
  Library::CoreGraphics.CGEventSetFlags(event, mask) unless mask.zero?
  Library::CoreGraphics.CGEventPost(Library::CoreGraphics::EventTapLocation::HID_EVENT_TAP, event)
  Library::CoreGraphics.CFRelease(event)
  sleep(MILISECOND)
end

#keys(text) ⇒ Object

Examples:

keyboard.keys("a")
keyboard.keys("b")
keyboard.keys("c")
keyboard.keys("command+shift+s")
keyboard.keys("comand+shift+tab")

Parameters:

  • text (String)

    e.g. “a”, “b”, “command+shift+s” or “”



25
26
27
28
29
30
31
32
33
34
35
# File 'lib/macos/keyboard.rb', line 25

def keys(text)
  mask = 0
  options = text.split("+")
  key = options.pop

  options.each do |option|
    mask |= Library::CoreGraphics::EventFlags.find(option)
  end

  key(key.downcase, mask:)
end

#type(text) ⇒ Object

Parameters:

  • text (String)


9
10
11
12
13
14
15
# File 'lib/macos/keyboard.rb', line 9

def type(text)
  text.chars.each do |character|
    mask = 0
    mask |= Library::CoreGraphics::EventFlags::MASK_SHIFT if Library::CoreGraphics::KeyCode.shifted?(character)
    key(character, mask:)
  end
end