Что нового

Копирование в буфер обмена (Текущего файла)

orange3100

Новичок
Сообщения
18
Репутация
0
Приветствую Знатоки своего дела;)

Подскажите, мы осуществляем работу в Excel документе, требуется скопировать в буфер обмена текущий файл.

(1) Шаг эмуляция Ctrl + S :
Код:
Send("^S")


а далее можно также проэмулировать переход в меню поиск, найти файл, так же проэмулировать нажатие Ctrl + C

Но понимаю, что это топорное решение, AutoIt более утонченная штука и можно сделать более красивое решение.

Спасибо, за советы
 

Oki

Продвинутый
Сообщения
452
Репутация
63
Шаг эмуляция Ctrl + S :
Код:
Send("^S")
Этот код эмулирует эмулирует не Ctrl + S, а Ctrl + Shift + S. Для первого нужно буквенный символ в коде набирать строчным, а не заглавным.

Что касается постановки задачи, то она не сформулирована вовсе. Непонятно, что именно ожидается получить в буфер обмена и в каком формате. Без этого постановка задачи практически отсутствует. Предложенный путь вообще приведёт лишь к копированию адреса файла в буфер, да ещё и в таком формате, что не каждая программа сможет его заполучить. Когда в справочниках говорится о копировании файлов через буфер, умалчивается, что содержимое файла туда не копируется, это лишь удобный способ на пальцах объяснить копирование для чайников, но при зрячей работе на уровне хотя бы скрипта это так не работает в принципе.
 

lettterssino

Знающий
Сообщения
109
Репутация
10
Приветствую Знатоки своего дела;)

Подскажите, мы осуществляем работу в Excel документе, требуется скопировать в буфер обмена текущий файл.

(1) Шаг эмуляция Ctrl + S :
Код:
Send("^S")


а далее можно также проэмулировать переход в меню поиск, найти файл, так же проэмулировать нажатие Ctrl + C

Но понимаю, что это топорное решение, AutoIt более утонченная штука и можно сделать более красивое решение.

Спасибо, за советы
Для работы с excel , есть целая библиотека. Может вам проще будет так?
Код:
#include <Excel.au3>
 
Автор
O

orange3100

Новичок
Сообщения
18
Репутация
0
Этот код эмулирует эмулирует не Ctrl + S, а Ctrl + Shift + S. Для первого нужно буквенный символ в коде набирать строчным, а не заглавным.

Что касается постановки задачи, то она не сформулирована вовсе. Непонятно, что именно ожидается получить в буфер обмена и в каком формате. Без этого постановка задачи практически отсутствует. Предложенный путь вообще приведёт лишь к копированию адреса файла в буфер, да ещё и в таком формате, что не каждая программа сможет его заполучить. Когда в справочниках говорится о копировании файлов через буфер, умалчивается, что содержимое файла туда не копируется, это лишь удобный способ на пальцах объяснить копирование для чайников, но при зрячей работе на уровне хотя бы скрипта это так не работает в принципе.
Представьте, что вы работаете в файле эксель, вы запускаете скрипт по горячей клавише и в этот момент, происходит сохранение и копирование файла в буфер обмена.
Сообщение автоматически объединено:

Для работы с excel , есть целая библиотека. Может вам проще будет так?
Код:
#include <Excel.au3>
Спасибо, про библиотеку не знал, будем копаться.
Для работы с excel , есть целая библиотека. Может вам проще будет так?
Код:
#include <Excel.au3>
но хотелось бы придумать универсальный метод
 
Последнее редактирование:

lettterssino

Знающий
Сообщения
109
Репутация
10
Представьте, что вы работаете в файле эксель, вы запускаете скрипт по горячей клавише и в этот момент, происходит сохранение и копирование файла в буфер обмена.
Сообщение автоматически объединено:


Спасибо, про библиотеку не знал, будем копаться.

но хотелось бы придумать универсальный метод
Правильно понял шаги:
1. Сохранение ексель.
2. Копирование файла в буфер или содержимого файла, или содержимого ячейки?
Какова конечная цель то?
 

Oki

Продвинутый
Сообщения
452
Репутация
63
копирование файла в буфер обмена
Это ни о чём. Нет такого понятия "копирование файла в буфер обмена". В буфер можно скопировать адрес файла, можно скопировать текст (с некоторыми элементами форматирования), можно скопировать рисунок. Копирование же файла в буфер не определено в качестве понятия.

Скопировать сохранённый файл в память или на диск можно, но Excel вообще ни при чём. Можно даже прочесть содержимое сохранённого файла в переменную AutoIt, но опять-таки это не на тему буфера обмена. Формат для чтения в буфер обмена или сохранения в него связан с особыми CLP-файлами.

Таким образом, задача не сформулирована, а за корявой постановкой стоит непонимание потребностей и возможностей. И да, непонятно, стоит ли за этим всем вообще какая-то доступная цель.
 
Последнее редактирование:
Автор
O

orange3100

Новичок
Сообщения
18
Репутация
0
Правильно понял шаги:
1. Сохранение ексель.
2. Копирование файла в буфер или содержимого файла, или содержимого ячейки?
Какова конечная цель то?
Копирование не содержимого и не ячейки, а самого файла.

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

Oki

Продвинутый
Сообщения
452
Репутация
63
далее самому скопировать его в буфер обмена
Ещё раз. Файлы не копируются в буфер обмена.
Сообщение автоматически объединено:

отправить кому-нибудь файл
Отправить куда? Файлы не отправляются через буфер обмена.
 
Автор
O

orange3100

Новичок
Сообщения
18
Репутация
0
Нет такого понятия "копирование файла в буфер обмена"
Ни о чем, это утверждать, что нет такого понятия "копирование файла в буфер обмена", поскольку уборщица, которая сидит в одноклассниках и отправляет фотки подруге, знает что это за понятие и как скопировать тот или иной файл в буфер обмена. Опираясь на Ваш рейтинг "Продвинутый", буду считать что вы имели ввиду отсутствие таких функций в AutoIt, которые бы могли это сделать - это уже другой вопрос.
Сообщение автоматически объединено:

Ещё раз. Файлы не копируются в буфер обмена.
Сообщение автоматически объединено:


Отправить куда? Файлы не отправляются через буфер обмена.
Вы "ручками" сидите в чатики, нажимается сочетание Ctrl + V и файлик вставляется из буфера обмена что в Телеграм, что в любой др. мессенджер
 

Oki

Продвинутый
Сообщения
452
Репутация
63
уборщица, которая сидит в одноклассниках и отправляет фотки подруге, знает что это за понятие и как скопировать тот или иной файл в буфер обмена
Уборщицу ввели в заблуждение. Файл не копируется в буфер обмена. Туда копируется адрес файла в специальном формате. Это можно сделать как-то так.
Код:
#include <Misc.au3>
_ClipPutFile("C:\Folder\Subfolder\file name.extension")

Вы "ручками" сидите в чатики, нажимается сочетание Ctrl + V и файлик вставляется из буфера обмена что в Телеграм, что в любой др. мессенджер
Мессенджер видит в буфере обмена адрес, по формату понимает, что это адрес файла, и сам делает вид, что копирует из буфера, а в реальности просто подгружает файл. Уборщица из одноклассников обо всём этом процессе за сценой даже понятия не имеет и радуется.
 
Автор
O

orange3100

Новичок
Сообщения
18
Репутация
0
Уборщицу ввели в заблуждение. Файл не копируется в буфер обмена. Туда копируется адрес файла в специальном формате. Это можно сделать как-то так.
Код:
#include <Misc.au3>
_ClipPutFile("C:\Folder\Subfolder\file name.extension")


Мессенджер видит в буфере обмена адрес, по формату понимает, что это адрес файла, и сам делает вид, что копирует из буфера, а в реальности просто подгружает файл. Уборщица из одноклассников обо всём этом процессе за сценой даже понятия не имеет и радуется.
Благодарю Вас, буду пытаться создать скрипт и дам ответ получилось ли у меня скопировать адрес файла в специальном формате ;)
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Для получения пути можно так:
Код:
$hWnd=WinGetHandle('[Class:XLMAIN]')
If $hWnd=0 Then Exit
$b=ObjGet('','Excel.Application')
If 0=IsObj($b)Then Exit
$sFile=$b.ActiveWorkBook.FullName
MsgBox(4096,'$sFile',$sFile)

Для записи пути как ссылки для вставки в месенджер, не помню как... там как-то через _ClipBoard_SetDataEx
-----
Не увидел предыдущего сообщения - в общем так
Код:
#include <Misc.au3>
$hWnd=WinGetHandle('[Class:XLMAIN]')
If $hWnd=0 Then Exit
$b=ObjGet('','Excel.Application')
If 0=IsObj($b)Then Exit
$sFile=$b.ActiveWorkBook.FullName
_ClipPutFile($sFile)
 
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
63
По моему опыту этот формат помещения адреса в буфер обмена подходит для всех целей, подобных описанным в сообщении об уборщице и телеграме, надо было сразу сказать, каковы дальнейшие цели, вместо настаивания на некоректной промежуточной. А ведь о конечной цели запрос звучал также и от lettterssino, а не только от меня.

В моём опыте есть лишь одна ситуация, при которой этот формат не подходит при всей внешней схожести с видимым якобы копированием в буфер, а затем назад из буфера. Это в случае, если попытаться повторить копирование файла из папки в себя же. Проводник умеет поместить адрес файла в таком формате, чтобы на этот запрос откликнуться созданием файла с похожим названием и добавлением дополнительной информации о версии (путём дописывания чисел, слова "Copy" и тому подобного). Этот же путь на таком варианте задания спотыкается.
 
Последнее редактирование:

lettterssino

Знающий
Сообщения
109
Репутация
10
Так же есть банальная функция
Код:
FileCopy("", "")
 

Oki

Продвинутый
Сообщения
452
Репутация
63
Кстати, у меня именно для телеграм никогда не получалось даже обычным <Ctrl> + C и <Ctrl> + V вставить файл. Наверное, потому что мне привычнее через веб-версию, у которой интерфейс может отличаться.
 

lettterssino

Знающий
Сообщения
109
Репутация
10
Кстати, у меня именно для телеграм никогда не получалось даже обычным <Ctrl> + C и <Ctrl> + V вставить файл. Наверное, потому что мне привычнее через веб-версию, у которой интерфейс может отличаться.
Может из-за фокуса в окне? Что нужно активировать именно элемент чата
 

Oki

Продвинутый
Сообщения
452
Репутация
63
Так же есть банальная функция
Код:
FileCopy("", "")
Какую из обсуждавшихся проблем эта функция решает?
Сообщение автоматически объединено:

Может из-за фокуса в окне? Что нужно активировать именно элемент чата
Я имею в виду даже при ручной работе. Веб-интерфейс телеграма в это, похоже, не умеет.
 

lettterssino

Знающий
Сообщения
109
Репутация
10
А так автору просто сначала сесть и написать понятнее, что хочет.
Отправить файл можно и на сетевую папку и тот же телеграм и тп. И для каждой ситуации разное решение.
 

Oki

Продвинутый
Сообщения
452
Репутация
63
А так автору просто сначала сесть и написать понятнее, что хочет.
Отправить файл можно и на сетевую папку и тот же телеграм и тп. И для каждой ситуации разное решение.
Но он-то думал, что достаточно отправить в буфер обмена, потому что для простоты объяснения явления для чайников Windows решила рассказывать, что файлы копируются в буфер, но это сбивает с толку более продвинутых пользователей, которым важно вникать в суть.
 
Последнее редактирование:
Автор
O

orange3100

Новичок
Сообщения
18
Репутация
0
Уборщицу ввели в заблуждение. Файл не копируется в буфер обмена. Туда копируется адрес файла в специальном формате. Это можно сделать как-то так.
Код:
#include <Misc.au3>
_ClipPutFile("C:\Folder\Subfolder\file name.extension")


Мессенджер видит в буфере обмена адрес, по формату понимает, что это адрес файла, и сам делает вид, что копирует из буфера, а в реальности просто подгружает файл. Уборщица из одноклассников обо всём этом процессе за сценой даже понятия не имеет и радуется.
Код:
#include <Misc.au3>

; Получение Заголовка активного окна
$sText = WinGetTitle("[ACTIVE]")

; Получение Пути файла или Папки по Заголовку
$sPath = 

; Копирование файлов в буфер обмена, как это делает Explorer
_ClipPutFile($sPath & $sText)

Подскажите, а как выйти на Полное имя файла при получении заголовка Активного окна? или на папку его содержащую?
 
Верх