是否可以从python调用notepad ++的宏?

时间:2019-06-20 06:55:43

标签: python-3.x notepad++

我有一个宏,可对notepad ++中某个文件夹中的所有文件进行更改,但是我试图使用python代码自动执行该过程,但是我没有找到任何解决方案。也许我可以某种方式使用shortcuts.xml,但我完全迷路了。

如果有人需要,这是我的最终解决方案,您必须将宏设置为快捷方式,在这种情况下,请使用'ctr + alt + 9'(注释为西班牙语):

#
# Es necesario instalar las bibliotecas
# pip install pyautogui
# pip install pywin32
#
# ----------------------------------------------------------------
# Version: 1.3
# Date: 10/07/2019
# 
# Resumen: Pone Notepad++ como pantalla activa y pulsa ctrl+alt+9
# y acepta los pop ups de la macro
#
# Autor: Pedro Antonio Fondevila Franco
# ----------------------------------------------------------------
import pyautogui
import win32gui
import win32con
import time


# Copiado de Stackoverflow, retorna lista de las ventanas activas
# stackoverflow.com/questions/16770909/python-win32gui-setforegroundwindow

def window_enum_handler(hwnd, resultList):
    if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd) != '':
        resultList.append((hwnd, win32gui.GetWindowText(hwnd)))

def get_app_list(handles=[]):
    mlst=[]
    win32gui.EnumWindows(window_enum_handler, handles)
    for handle in handles:
        mlst.append(handle)
    return mlst

appwindows = get_app_list()
# ---------------------------------------------------------------- 

targetWindow = 0;
for window in appwindows:# Buscamos si notepad++ esta en la lista
    if ("Notepad++" in window[1]): 
        targetWindow = window[0]

if(targetWindow != 0): 

    win32gui.ShowWindow(targetWindow,win32con.SW_RESTORE) # Por si esta minimizada la pantalla
    win32gui.BringWindowToTop(targetWindow) # La ponemos delante
    win32gui.SetForegroundWindow(targetWindow) # La ponemos como ventana principal

    time.sleep(0.4) # Le damos tiempo a cambiar al notepad++
    pyautogui.hotkey('ctrl', 'alt', '9') # Pulsa ctrl+alt+9

    numberOfPopUps = 10
    for i in range(1, numberOfPopUps + 1):  
        time.sleep(0.4)
        pyautogui.press('left') # Pulsa izquierda
        pyautogui.press('enter') # Pulsa enter
else: 
    print("Inicie Notepad++")
    time.sleep(1.5)

1 个答案:

答案 0 :(得分:0)

您可能需要结合使用VBScript或PowerShell和Python。

在Notepad ++社区中有一个线程How to run a notepad++ macro from vbscript or PowerShell

引自Yaron的答案:

objShell.run …
' Let NPP load and open the file. Adjust the number of milliseconds to your machine.
WScript.Sleep(100)
' "^+9" is Ctrl+Shift+9. Replace it with your preferred shortcut.          
objShell.SendKeys("^+9") 
  1. 通过设置->快捷方式映射器->为您的宏分配快捷方式 宏。
  2. 将以上行添加到脚本中。

您将在此处找到第二部分Executing a vbs file with arguments created by python的可能解决方案。