Class: ThinClient::Keyboard

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKeyboard

Returns a new instance of Keyboard.



9
10
11
# File 'lib/thinclient/keyboard.rb', line 9

def initialize()
	getKeyboardEvent()
end

Class Method Details

.dealArg(keys) ⇒ Object

处理输入的参数



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/thinclient/keyboard.rb', line 75

def self.dealArg(keys)
	begin
	  keys = keys.to_s		
	rescue => ex
	  Log.error("#{ex}")
	  print("#{ex}")
	end	
	args = []
	tmp = keys.split(/\+/)
	Log.debug("Keys:#{tmp}")
	tmp.each { |key|
		key = "KEY_" + key.upcase
		index = KeyCode.key2code(key)
		if (index == 0xffff)
			return args
		end
		args.push(index)
	}
	return args
end

.getKeyboardEventObject

获取键盘设备



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/thinclient/keyboard.rb', line 14

def self.getKeyboardEvent()
	# getevent获取到的键盘的名字不是统一的,观察到的名字中都包含" USB"字样
	str = `adb shell getevent -p`

    begin
      events = str.scan(/\/dev\/input\/event.\r\n.* USB.*/)
      Log.debug("Events:#{events}")
      if (events.size != 2)
      	  Log.error("Keyboard Not Found. It Cannot Work Without a Keyboard Connected to The ThinClient")
      	  return false
      end
      @keyboardEvent = events[1].split(/\r/)[0]
      @SYN_EVENT = "adb shell sendevent #{@keyboardEvent} 0 0 0"
      #print @keyboardEvent
      return true
    rescue => ex
      Log.error("#{ex}")
      print ex
      return false
    end
end

.keyDown(keycode) ⇒ Object

按下键盘按键



37
38
39
40
41
42
43
44
45
46
# File 'lib/thinclient/keyboard.rb', line 37

def self.keyDown(keycode)
	begin
	  keycode = keycode.to_s		
	rescue => ex
	  Log.error("#{ex}")
	  print("#{ex}")
	end		
	system("adb shell sendevent #{@keyboardEvent} 1 #{keycode} 1")
	system("#{@SYN_EVENT}")
end

.keyUp(keycode) ⇒ Object

抬起键盘按键



49
50
51
52
53
54
55
56
57
58
# File 'lib/thinclient/keyboard.rb', line 49

def self.keyUp(keycode)
	begin
	  keycode = keycode.to_s		
	rescue => ex
	  Log.error("#{ex}")
	  print("#{ex}")
	end	
	system("adb shell sendevent #{@keyboardEvent} 1 #{keycode} 0")
	system("#{@SYN_EVENT}")
end

.sendKeys(keys) ⇒ Object

发送键盘按键,多个按键用“+”隔开(按键名称见KeyCode.Key)



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/thinclient/keyboard.rb', line 61

def self.sendKeys(keys)
	if false === getKeyboardEvent()
		return 
	end
	args = dealArg(keys)
	args.each { |key|
		keyDown(key)
	}
	args.each { |key|
		keyUp(key)
	}
end