Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2023, 11:58   #31
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
мне тема интересна, так как сделал с помощью Python буфер обмена, но это встроено в Word и мне его нужно усовершенствовать, так вот прикладываю скрин - на нём то что имеется в Word из коробки....может ТС не в курсе
у меня сделано почти тоже самое, просто это окно буфера обмена Word в разных ситуациях является и этим окном и другим, чем мне надо
ТС поясните как вы это видите?, если вы работаете в Word, и где-то скопировали нужное и оно в Word вставилось не как хотелось бы, то нужно смотреть в сторону VBA, ну место где вы работаете может быть не Word, а МойОфис или Либре офис - без разницы у них тоже встроено что-то по подобию VBA, а то что обсуждается в теме даже если выстрелит будет неудобным в использовании - лишний НЕ удобный в пользовании костыль))
На вкус и цвет...
Так буфер в Ворде же есть встроенный
Esprit вне форума Ответить с цитированием
Старый 20.12.2023, 14:17   #32
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

Можно попытаться хранить все форматы (за исключением парочки):
Код:
import keyboard
from tkinter import Tk, Button
import time
import win32gui
import win32api
import win32clipboard as cbd

sh = []

def move(event):
    global hwnd
    hwnd = win32gui.GetForegroundWindow()
    if hwnd and hwnd != 0:
        sh.append(hwnd)
    if len(sh) > 20:
        del sh[0:15]

def b1(event):
    if hwnd != 0:
        win32gui.SetForegroundWindow(hwnd)
    else:
        win32gui.SetForegroundWindow(sh[-1])

def config_data(data):
    def config():
        cbd.OpenClipboard()
        cbd.EmptyClipboard()
        for cf, val in data.items():
            cbd.SetClipboardData(cf, val)
        cbd.CloseClipboard()
        keyboard.press_and_release('ctrl+v')
    return config

def add_buttons(root):
    bt_params = {
        "width": 15,
        "height": 1,
        "font": ("Times New Roman", 12)
    }
    bt_count = 0

    #кнопка копирования
    def _copy():
        global bt_count

        if win32api.GetKeyboardLayout() == 68748313:
            keyboard.press_and_release("ctrl+с")
        else:
            keyboard.press_and_release("ctrl+c")

        time.sleep(0.1)
        cbd.OpenClipboard()
        cf = 0
        data = {}
        while True:
            cf = cbd.EnumClipboardFormats(cf)
            if cf == 0:
                break
            if cf == cbd.CF_METAFILEPICT:
                # http://timgolden.me.uk/pywin32-docs/win32clipboard__GetClipboardData_meth.html
                # currently broken
                continue
            if cf == cbd.CF_ENHMETAFILE:
                continue
            data[cf] = cbd.GetClipboardData(cf)
        cbd.CloseClipboard()

        if not data:
            return

        text = data.get(cbd.CF_UNICODETEXT, "non-text-data")[:15].replace("\r\n", "")
        Button(root, text = text, bg = "white", command = config_data(data), **bt_params).place(x = 0, y = 30 * bt_count)
        bt_count += 1

    #кнопка очистки
    def _clear():
        global bt_count

        for widget in root.winfo_children():
            widget.destroy()
        Button(root, text = "Копировать", bg = "#556B2F", command = _copy, **bt_params).place(x = 0, y = 315)
        Button(root, text = "Очистить", bg = "#556B2F", command = _clear, **bt_params).place(x = 150, y = 315)
        bt_count = 0
        cbd.OpenClipboard()
        cbd.EmptyClipboard()
        cbd.CloseClipboard()

    _clear()

def main():
    root = Tk()
    root.title("Advanced Сlipboard")
    root.geometry("296x350")
    root.resizable(width = False, height = False)
    root.attributes("-topmost", True)
    root.configure(bg = "lightblue")
    root.bind("<Motion>", move)
    root.bind("<Button-1>", b1)
    add_buttons(root)
    root.mainloop()

main()
Для простоты перестал проверять уникальность вообще (например, при копировании картинки из пейнта текста вообще нет).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.12.2023 в 15:18.
BDA на форуме Ответить с цитированием
Старый 20.12.2023, 20:39   #33
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Это гениально! Вы лучший! Спасибо огромное! Вы не представляете, как вы мне помогли. Все работает!)))
Esprit вне форума Ответить с цитированием
Старый 20.12.2023, 20:49   #34
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от Esprit Посмотреть сообщение
Это гениально! Вы лучший! Спасибо огромное! Вы не представляете, как вы мне помогли. Все работает!)))
жаль не могу наверное опробовать, BDA можете переписать, чтобы у меня запустилось, была не состыковка с import win32gui, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 20.12.2023, 22:32   #35
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

Ципихович Эндрю, а что выдает "py -m pip install keyboard pywin32"? Мне кажется, легче разобраться с установкой пакетов, чем искать/писать аналоги функций.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 20.12.2023, 23:32   #36
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

В этом коде этот модуль нужен только для одного - вернуть фокус с окна, где нажимаем кнопку копировать, на окно, где был выделен текст, иначе без фокуса текст не захватить. Поищите аналоги этой функции и замените, тогда модуль win32gui не нужен будет.

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
жаль не могу наверное опробовать, BDA можете переписать, чтобы у меня запустилось, была не состыковка с import win32gui, спасибо

Последний раз редактировалось Esprit; 20.12.2023 в 23:35.
Esprit вне форума Ответить с цитированием
Старый 20.12.2023, 23:41   #37
Esprit
Пользователь
 
Регистрация: 14.12.2023
Сообщений: 30
По умолчанию

Хотя... без библиотеки pywin32 и другие ее дети-модули не пойдут наверно
Esprit вне форума Ответить с цитированием
Старый 22.12.2023, 07:42   #38
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
что выдает "py -m pip install keyboard pywin32"
это где опробовать нужно? командная строка? она ответила:
"py" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Ципихович Эндрю вне форума Ответить с цитированием
Старый 23.12.2023, 01:22   #39
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,299
По умолчанию

Тогда попробуйте "pip install keyboard pywin32".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.12.2023, 09:11   #40
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

попробовал "pip install keyboard pywin32".
пост 32, код укоротил, для решения проблемы с импортом
Код:
import keyboard
from tkinter import Tk, Button
import time
import win32gui
import win32api
import win32clipboard as cbd
print("удачно")
получил ошибку
import win32gui
ImportError: DLL load failed while importing win32gui: Не найден указанный модуль.
при установке win32gui в пайчарме
файл-сеттинг-пайтонИнтерпретатор-пип
в Детали:
Collecting win32gui
Using cached win32gui-221.5.tar.gz (605 kB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'error'

error: subprocess-exited-with-error

Getting requirements to build wheel did not run successfully.
exit code: 1

[22 lines of output]
Traceback (most recent call last):
File "C:\Users\q8902\AppData\Local\Progr ams\Python\Python311\Lib\site-packages\pip\_vendor\pyproject_hook s\_in_process\_in_process.py", line 353, in <module>
main()
File "C:\Users\q8902\AppData\Local\Progr ams\Python\Python311\Lib\site-packages\pip\_vendor\pyproject_hook s\_in_process\_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\q8902\AppData\Local\Progr ams\Python\Python311\Lib\site-packages\pip\_vendor\pyproject_hook s\_in_process\_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\q8902\AppData\Local\Temp\ pip-build-env-j7s9oac7\overlay\Lib\site-packages\setuptools\build_meta.py", line 325, in get_requires_for_build_wheel
return self._get_build_requires(config_set tings, requirements=['wheel'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\q8902\AppData\Local\Temp\ pip-build-env-j7s9oac7\overlay\Lib\site-packages\setuptools\build_meta.py", line 295, in _get_build_requires
self.run_setup()
File "C:\Users\q8902\AppData\Local\Temp\ pip-build-env-j7s9oac7\overlay\Lib\site-packages\setuptools\build_meta.py", line 480, in run_setup
super(_BuildMetaLegacyBackend, self).run_setup(setup_script=setup_ script)
File "C:\Users\q8902\AppData\Local\Temp\ pip-build-env-j7s9oac7\overlay\Lib\site-packages\setuptools\build_meta.py", line 311, in run_setup
exec(code, locals())
File "<string>", line 27, in <module>
File "C:\Users\q8902\AppData\Local\Temp\ pip-install-s7_vdw0a\win32gui_248fd28d90214bddb 75f9df71a314b0e\win32\distutils\gui .py", line 6, in <module>
from .command import win32_build_ext
ModuleNotFoundError: No module named 'win32.distutils.command'
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

Getting requirements to build wheel did not run successfully.
exit code: 1

See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование текста из RichEdit в EXCEL построчно с сохранением формата okunevskiy Общие вопросы Delphi 2 09.03.2016 16:04
перенести документ Word (таблица) в MS Excel c сохранением форматирования или обеспечить всплывающие подсказки в Word Serge_Bliznykov Microsoft Office Word 6 11.07.2011 11:02
Копирование значений и форматирования Eugenio Microsoft Office Excel 21 22.03.2010 19:28
Копирование таблицы без потери форматирования k1r1ch Microsoft Office Excel 3 09.07.2009 11:00
RichText1 с сохранением форматирования andrey4623 Общие вопросы Delphi 1 23.03.2008 21:06