Я пытаюсь создать программу, которая берет ваш выделенный текст, а затем инвертирует регистр, используя скрипт python. Логика c по сути: получить выделенный текст в буфер обмена, выполнить преобразование, затем вернуть текст в буфер обмена и вставить его.
Я пытаюсь выполнить это, создав командный файл, который запускается из горячая клавиша AutoHotKey, но дело в том, что командный файл должен запускаться без всплывающего окна cmd, потому что тогда он меняет фокус окна и не может правильно получить выделенный текст.
Код работает, когда я запускаю его внутри PyCharm, и я могу заставить файл запускаться с помощью горячей клавиши, но окно все еще появляется очень быстро, что разрушает процесс.
Курс I Я сказал, что в пакетном файле нужно поставить @pyw вместо @py at для запуска python без окон, но окно все равно всплывает очень быстро. Кажется, я не могу найти решение, которое работает.
Я пытался запустить его через файл .vbs, но это не сработало так, как я хотел. Я проверил, чтобы убедиться, что pythonw.exe работает, и это так. Я попытался изменить имя файла на .pyw в коде пакета.
Что я делаю не так? Это с моим python кодом или кодом партии? Я не знаю.
Мой пакетный код:
@pyw "C:\Users\offic\PycharmProjects\test\automate the boring stuff\projects\change case of selected.pyw" %*
Мой Python Код:
#! python 3
import pyperclip
import pyautogui as pya
import time
import sys
#mystery code I tried to make work as a solution
# import ctypes
# import os
# import pywin32_system32
#
# hwnd = ctypes.windll.kernel32.GetConsoleWindow()
# if hwnd != 0:
# ctypes.windll.user32.ShowWindow(hwnd, 0)
# ctypes.windll.kernel32.CloseHandle(hwnd)
# _, pid = pywin32.GetWindowThreadProcessId(hwnd)
# os.system('taskkill /PID ' + str(pid) + ' /f')
def copy_clipboard():
pyperclip.copy("") # <- This prevents last copy replacing current copy of null.
pya.hotkey('ctrl', 'c')
time.sleep(.01) # ctrl-c is usually very fast but your program may execute faster
return pyperclip.paste()
clipboard = copy_clipboard()
try: #check if there is an argument
# convert clipboard to uppercase if arg is 'u'
if sys.argv[1] is 'u':
pyperclip.copy(clipboard.upper())
# convert clipboard to lowercase if arg is 'l'
elif sys.argv[1] is 'l':
pyperclip.copy(clipboard.lower())
#else just swap the case of every character if the arg is not u or l
else:
pyperclip.copy(clipboard.swapcase())
#if there are no args just swap the case of every charater
except:
# put swapped string to clipboard
pyperclip.copy(clipboard.swapcase())
pya.hotkey('ctrl', 'v')
# hELLO
Мой код AutoHotKey (если это как-то важно):
^+q::
Run, "C:\Users\offic\Documents\MY BATCH FILES\swapcase.bat"
return