pywinauto(或其他):模拟Ctrl + A& Ctrl + X位于任何位置(不仅适用于指定的应用)

时间:2017-01-27 13:53:55

标签: python-3.x autohotkey ctypes sendkeys pywinauto

我正在寻找一种方法来生成ctrl+A(全选),然后在python脚本中生成ctrl+x。我知道如何在特定的应用程序中生成它(pywinauto和其他模块这样做)。但我正在寻找一种方法在任何应用程序(在活动窗口的任何字段中)发送这些密钥。我想在任何地方启动包含这些键的python脚本(脚本将使用键快捷键启动。详情如下(1))

编辑:我不是要在命令窗口中复制/过去(参见最后两句)。 我的脚本在命令窗口中发送密钥,但这是我正在尝试解决的问题......

使用python pywinauto(或Ctypes或其他模块)

我尝试了几个列出here的命题,结果相同。

我以为pywinauto可以做到。在pywinauto latest documentation之后我试了一下:

  1. 打开包含文本字段(即活动窗口)的(任何)应用程序
  2. 将光标放在要选择全部+剪切/过去
  3. 的位置
  4. 使用快捷方式运行脚本(因此您不会离开活动窗口)

    from pywinauto.keyboard import SendKeys

    SendKeys('^a^x')

  5. 结果 代码只在python控制台中打印^A^X。它不会在活动窗口(我放置光标的位置)的字段中执行它所做的操作:它不是select all + cut the text

    使用autohotkey

    我发现模拟真实 crtl+A ctrl+C的唯一方法是使用autohotkey(它可以工作,但它不是python解决方案):

    1. 将代码保存在我的AHK脚本中:select_copy.ahk

      Send, ^a

      Send, ^x

    2. 创建另一个名为shortcut.ahk的AHK脚本,您将在其中指定启动select_copy.ahk的快捷方式(shortcut.ahk可以在Windows后台运行(2))

      !^+G:: Run select_copy.ahk , C:\Users\Me\Desktop

    3. (意思是:当我点击ctrl+alt+shift+G时,运行脚本select_copy.ahk

      结果: 有用。当我调用ahk时,它会选择/剪切活动窗口中的内容。

      两者的组合无效
      我尝试从python脚本中启动select_copy.ahk(使用subprocess.call),但最终得到的结果与pywinauto(或Ctypes)相同:它只在consol中输出^A^X,但没有选择&切。所以我想知道python是否能真正做到autohotkey所做的事情。

      (1)脚本将做什么:我将在一个或另一个html编辑器上启动脚本(使用快捷键),它将剪切所有文本,解析其源代码,进行一些更改将数据放回剪贴板,并通过它。我只缺少第一部分(选择全部+剪切)和最后一部分(过去)。

      (2)这不是什么大问题,因为shortcut.ahk还包含我所有其他的ahk快捷方式和脚本。

1 个答案:

答案 0 :(得分:0)

您的AutoHotKey脚本应该可以使用,并且可以在我的计算机上运行。但是,我建议您只有一个包含以下内容的shortcut.ahk文件:

!^+G::
Send, ^a
Send, ^x
Return

...然后把它放在你的python文件中:

subprocess.call("C:\\Path\\To\\AutoHotKey.exe /r C:\\Path\\To\\shortcut.ahk")

将路径替换为AutoHotKey可执行文件所在的位置,以及shortcut.ahk文件所在的位置。

正如旁注:!^+G:: 触发 Alt + Shift + Ctrl + G你在问题中写道不是 Shift + Ctrl + G

  

(意思是:当我点击ctrl + shift + G运行脚本select_copy.ahk)

编辑:此外,根据您问题中的短语in the python console,您似乎正在尝试选择所有内容,然后在CMD中将其剪切。此根本不起作用。相反,如果您只想清除控制台,只需使用命令cls(仅限Windows;在Linux中使用clear)。如果你想复制整个控制台输出然后清除它(即剪切)你将需要不同的东西。