如何使用shell.SendKeys选择并删除所有内容 (ctrl + shift + left arrow + del)?

1 投票
2 回答
3662 浏览
提问于 2025-04-16 02:16

嘿,我在这里遇到了一些麻烦……

我想知道怎么用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}")

撰写回答