2017-01-27 21 views
1

Я ищу способ генерации ctrl+A (выберите все), а затем ctrl+x в сценарии python. Я знаю, как генерировать это в определенном приложении (pywinauto и другие модули делают это). Но я ищу способ отправить эти ключи в любых приложениях (в любом поле активных окон). Я хочу, чтобы запустить сценарий Python, содержащий эти ключи в любом местеpywinauto (или другие): эмулировать Ctrl + A и Ctrl + X в любом месте (не только в указанном приложении)

EDIT (сценарий будет запуск с помощью комбинации клавиш Подробности ниже (1).): Я не пытаюсь копировать/прошлое в командных окнах (см. 2 последних предложения). Мой сценарий отправить ключи в командных окнах, но это проблема, которую я пытаюсь решить ...


Использование питона pywinauto (или Ctypes или другие модули)

Я попытался несколько предложений, перечисленных here с тем же результатом.

Я думал, что pywinauto может это сделать. После pywinauto latest documentation я пробовал:

  1. открыть (любой) приложение, содержащее текстовое поле (это активные окна)
  2. место курсор, где вы хотите, чтобы выбрать все + вырезано/прошлое
  3. запустить скрипт пыльник с помощью ярлыка (так что вы не будете оставлять активные окна)

    from pywinauto.keyboard import SendKeys

    SendKeys('^a^x')

Результат Код печати только ^A^X в консоли питона. Он не делает то, что он должен делать в области активного окна (где я разместил свой курсор): это не select all + cut the text.


Использование autohotkey:

Единственный способ я нашел, чтобы имитировать реальнуюcrtl+Actrl+C это с помощью AutoHotkey (он работает, но это не решение питона):

  1. Сохраните этот текст в моем скрипте AHK: select_copy.ahk

    Send, ^a

    Send, ^x

  2. создать другой сценарий АХК под названием shortcut.ahk, где вы зададите ярлык для запуска select_copy.ahk (ярлык.АХК sould работать постоянно в фоновом режиме окна (2))

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

(то есть: когда я ударил ctrl+alt+shift+G запустить скрипт select_copy.ahk)

результат: Он работает. когда я вызываю ahk, он выбирает/режет вещи в активных окнах.


Комбинация обоих не работает
Я попытался запустить select_copy.ahk внутри питона сценария (с использованием subprocess.call), но я в конечном итоге с тем же результатом, чем pywinauto (или Ctypes): он печатает только ^A^X в консоли, но не выбирает & cut. Поэтому мне интересно, может ли python действительно делать то, что делает autohotkey.

(1) Что будет делать скрипт: я запустил скрипт (с помощью сочетания клавиш) в том или ином редакторе HTML, он вырежет весь текст, проанализирует его исходный код, внесите некоторые изменения, вернув данные в clipbboard и пропустить его. Мне не хватает первой части (выберите все + вырезать) и последней части (прошлой).

(2) Это не очень важно, так как shortcut.ahk содержит также все мои другие ярлыки и скрипты ahk.

+0

Какое приложение вы пытаетесь это сделать? Консоль (cmd.exe) не может принимать Ctrl + A, даже если вы делаете это вручную на своей клавиатуре! Вам также необходимо установить фокус на элемент управления редактированием, прежде чем нажимать Ctrl + A. Поэтому может потребоваться более сложный код, если вы переключитесь на окно проводника, чтобы щелкнуть ярлык. –

+0

@VasilyRyabov за ваш ответ! CtrlX должен работать с несколькими приложениями, которые содержат html-редактор (в основном редактор tinyMCE), в браузере (firefox, chrome) и других приложениях. (AutoHotkey -.ahk- делает это). Нет, мне неинтересно останавливать что-либо в консоли. Python просто запускает его в консоли, но он не нужен. Предыдущее сокращение должно применяться в активных окнах. Я запускаю скрипт с помощью AHK-ярлыка (ctrl + shift + p), не выходя из редактора. –

+0

(вкратце: это должно работать в любом месте, в любом поле, где разрешено selectA и разрезать прошлое, как обычный ctrl + x) –

ответ

0

Ваш скрипт AutoHotKey должен работать и работает на моей машине. Тем не менее, я рекомендую вам только один shortcut.ahk файл, содержащий следующие:

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

..., а затем поместить его в файл питона:

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

заменяющего пути с везде, где AutoHotKey исполняемый , и где бы ни находился файл shortcut.ahk.

Так же, как примечание стороны: !^+G::триггеры на Alt + Сдвиг + Ctrl + G, не сдвига + Ctrl + G как вы написали в своем вопросе:

(что означает: когда я нажимаю Ctrl + shift + G запускает скрипт select_cop y.ahk)

EDIT: Кроме того, из фразы in the python console в вашем вопросе, кажется, что вы пытаетесь, чтобы выбрать все, а затем разрезать его в CMD. Это не будет работать вообще. Вместо этого, если вы хотите просто очистить консоль, просто используйте команду cls (только для Windows, используйте clear в Linux). Если вы хотите скопировать весь вывод консоли и затем очистить его (то есть вырезать), вам понадобится что-то другое.

+0

Спасибо, но я не использую ярлык AHK для запуска AHK (для этого мне не нужен python) , Ярлык используется для запуска скрипта python (который вызывает .ahk), который предположительно должен выбрать все/прошлое ** в любом текстовом поле, где мой курсор стоял перед использованием ярлыка ** (например, он будет выбирать/вырезать текст содержится в поле поиска google моего браузера). (Я не хочу ничего делать с cmd, cf my edit). –