我确实从列表中选择了一个项目(使用下面的代码),我现在需要发送ctrl+E
。问题是以某种方式SendKeys方法isn't available,我不能使用SendKeys('^e')
。 (此快捷方式将编辑同上应用中的所选项目)
from pywinauto.application import Application
from pywinauto import findbestmatch
from pywinauto import keyboard #not sure if I need to import it
ditto=Application().connect(path='Ditto.exe')
#---- print all available methods of the object
print(dir(ditto.ditto.SysListView321.wrapper_object())) #( the list does not contains 'SendKeys')
#-----Find and select the item (containing 'xxx') in the SysListView321
#The list of texts to search through
texts = ditto.ditto.SysListView321.texts()[1:] #skip window text itself, use only item texts
# The list of items corresponding (1 to 1) to the list of texts to search through.
items = ditto.ditto.SysListView321.items() #>>[]
found_item = findbestmatch.find_best_match('xxx', texts, items, limit_ratio=0.1).Select()
一些错误:
ditto.ditto.SysListView321.SendKeys('^e')
... WindowSpecification类没有'SendKeys'方法
ditto.ditto.SysListView321.keyboard.SendKeys('^e')
... findbestmatch.MatchError:找不到'dict_keys'中的'keyboard'(['','Header'])'
[编辑](更多错误)
ditto.ditto.SysListView321.type_keys('^e')
win32gui.SetForegroundWindow(self.handle)pywintypes.error:(0, 'SetForegroundWindow','没有错误消息可用')
keyboard.send_keys('^e')
AttributeError:模块'pywinauto.keyboard'没有属性'send_keys'
(适合初学者的Ps. app.Ditto
相当于app.window(best_match='Ditto')
)
答案 0 :(得分:2)
对于指定的UI元素,此方法为
# it will activate target window if it's not in focus
ditto.ditto.SysListView321.type_keys('^e')
但
keyboard.SendKeys('^e') # should work also if you don't change active window
它可以在不绑定任何特定控件的情况下使用。
因此,您不应尝试使用模块名称(如keyboard
)作为任何对象的属性名称。这是Python。只学习Python基础知识,你也会更好地理解pywinauto。
答案 1 :(得分:1)
完成瓦西里的回答。以下是编辑单个同上项目所需的代码(大部分时间都可以使用)
from pywinauto import findbestmatch
from pywinauto.application import Application
from pywinauto import remote_memory_block
from pywinauto import keyboard
from pywinauto import timings
import time #needed for time.sleep(3)
keyboard.SendKeys('^*') # custom shortcut to launch the specific ditto "group"
time.sleep(2) # wait 2 sec for the app
ditto=Application().connect(path='Ditto.exe')
time.sleep(0.5)
##find & select item
#The list of texts to search through:
texts = ditto.ditto.SysListView321.texts()[1:] #skip window text itself
# The list of items corresponding (1 to 1) to the list of texts to search through.
items = ditto.ditto.SysListView321.items() #>>[]
found_item = findbestmatch.find_best_match('test', texts, items, limit_ratio=0.1).Select()
## Extra: open the item in editor
# Bring the window to the foreground first
ditto.ditto.set_keyboard_focus() # (work also with set_focus but it remove the cursor)
# edit the selected entry (it's a shortcut)
keyboard.SendKeys('^e')
# Wait (for the windows to load)
time.sleep(1) # 1 sec
# Select all
keyboard.SendKeys('^a')
ditto.Editor.close()