如何使用shell.SendKeys选择并删除所有内容 (ctrl + shift + left arrow + del)?
嘿,我在这里遇到了一些麻烦……
我想知道怎么用sendkeys把一个字段里的所有文字都删掉?
我该怎么同时按住ctrl和shift,再按左箭头,最后再按删除键呢?
补充说明:
比如,我有这段代码
ctypes.windll.user32.SetCursorPos(910,475)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0)
time.sleep(0.1)
shell.SendKeys(inf_firstname)
这段代码是用来选择一个字段并粘贴名字信息的(就像一个宏一样),但我想在粘贴信息之前,先把字段里的内容删掉,如果里面有的话……
明白了吗?
2 个回答
4
我不太了解Sendkeys,但我知道你可以用ctypes发送按键。
下面是通过发送CTRL+A和BACK来删除文本的方法:
ctypes.windll.user32.keybd_event(0x11, 0, 0, 0) #CTRL is down
ctypes.windll.user32.keybd_event(ord("A"), 0, 0, 0) #A is down
ctypes.windll.user32.keybd_event(ord("A"), 0, 0x0002, 0) #A is up
ctypes.windll.user32.keybd_event(0x11, 0, 0x0002, 0) #CTRL is up
ctypes.windll.user32.keybd_event(0x08, 0, 0, 0) #BACK is down
ctypes.windll.user32.keybd_event(0x08, 0, 0x0002, 0) #BACK is up
你需要发送Windows的虚拟键码。完整的列表可以在这里找到。
这可能和SendKeys类似。
希望这对你有帮助。
3
你可能想试试按 Ctrl+A 呢?
能给我一个你遇到问题的代码短例子吗?
根据 SendKeys 的实现方式,它可能不能一次性接受所有的输入。可能需要多次调用 SendKeys。你可以试着分开来,一次一个地调用 SendKeys。
编辑:
http://msdn.microsoft.com/en-us/library/8c6yea83.aspx
在我看来,你应该可以这样做:
shell.SendKeys("^a")
shell.SendKeys("{DELETE}")