lib/rautomation/adapter/ms_uia/uia_dll.rb in rautomation-0.13.0 vs lib/rautomation/adapter/ms_uia/uia_dll.rb in rautomation-0.14.0

- old
+ new

@@ -92,11 +92,11 @@ end def data=(value) case how when :hwnd - self[:data][:int_data] = value + self[:data][:int_data] = value || 0 # cannot accept nil when :id, :value self[:data][:string_data] = value when :point self[:data][:point_data].to_ptr.write_array_of_int(value) end @@ -300,36 +300,48 @@ # Table methods attach_function :Table_GetHeaders, [SearchCriteria.by_ref, :pointer], :int attach_function :Table_GetValues, [SearchCriteria.by_ref, :pointer], :int + attach_function :Table_GetSelectedIndexes, + [SearchCriteria.by_ref, :pointer], :int attach_function :table_row_count, :Table_RowCount, [SearchCriteria.by_ref], :int attach_function :Table_CoordinateIsValid, [SearchCriteria.by_ref, :int, :int], :bool attach_function :Table_ValueAt, [SearchCriteria.by_ref, :int, :int, :pointer, :int], :void attach_function :Table_SelectByIndex, [SearchCriteria.by_ref, :int, :pointer, :int], :void + attach_function :Table_SingleSelectByIndex, + [SearchCriteria.by_ref, :int, :pointer, :int], :void attach_function :Table_SelectByValue, [SearchCriteria.by_ref, :string, :pointer, :int], :void attach_function :table_row_is_selected, :Table_IsSelectedByIndex, [SearchCriteria.by_ref, :int], :bool attach_function :Table_RemoveRowByIndex, [SearchCriteria.by_ref, :int, :pointer, :int], :void attach_function :Table_RemoveRowByValue, [SearchCriteria.by_ref, :string, :pointer, :int], :void + def self.table_selected_indexes(search_information) + integers_from(:Table_GetSelectedIndexes, search_information) + end + def self.table_select(search_information, which_item) case which_item when Integer can_throw(:Table_SelectByIndex, search_information, which_item) when String can_throw(:Table_SelectByValue, search_information, which_item) end end + def self.table_single_select(search_information, which_item) + can_throw(:Table_SingleSelectByIndex, search_information, which_item) + end + def self.table_value_at(search_information, row, column=0) string_from(:Table_ValueAt, search_information, row, column) end def self.table_coordinate_valid?(search_information, row, column=0) @@ -379,9 +391,16 @@ def self.control_click(search_information) can_throw(:Click, search_information) end private + def self.integers_from(method, search_information) + item_count = send method, search_information, nil + pointer = FFI::MemoryPointer.new :pointer, item_count + send method, search_information, pointer + pointer.read_array_of_int(item_count) + end + def self.strings_from(method, hwnd) string_count = send method, hwnd, nil pointer = FFI::MemoryPointer.new :pointer, string_count send method, hwnd, pointer strings = pointer.get_array_of_string 0, string_count