Сниппет вставки из буфера обмена для ZennoPoster (многопоточный, с блокировками) [Дон шампиньон]

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
У меня метод из старто поста уже сколько лет работает. Встявляет картинки в пост на ФБ. В конкурсах где то есть этот шаблон с этим методом.
 
  • Спасибо
Реакции: Pierre Paul Jacques

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 240
Благодарностей
806
Баллы
113
Хз как под локом он может пересечся. Или речь идет о пересечении при работе человека за пк?
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
886
Благодарностей
364
Баллы
63
Хз как под локом он может пересечся. Или речь идет о пересечении при работе человека за пк?
запросто... просто посмотри какой лок используется в коде и сразу будет ясно в каких случаях он не будет работать. ;-)
не то что всегда не будет работать... но как всегда есть НО...
 
  • Спасибо
Реакции: Pierre Paul Jacques

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 240
Благодарностей
806
Баллы
113
запросто... просто посмотри какой лок используется в коде и сразу будет ясно в каких случаях он не будет работать. ;-)
не то что всегда не будет работать... но как всегда есть НО...
Не врублюсь, а чем этот лок не подходит?
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
  • Спасибо
Реакции: Pierre Paul Jacques

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 240
Благодарностей
806
Баллы
113
Видимо лок распределяется на один проект, а у людишек проекты одновременно работают с одним и тем же функционалом.
Нет, этот лок не работает на один проект.
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
126
Благодарностей
34
Баллы
28
Воскресенье - время для отдыха, поэтому это Zenno:bo.

Использование буфера обмена в автоматизации следует избегать, но в некоторых случаях я использую его, потому что:

Эмуляция текста занимает слишком много времени (если установлен быстрый режим, текст не распознается/область текста не активирована). Для целей SEO, когда я не могу отправить HTML/разметку в качестве гостя. Чтобы избежать конфликтов в многопоточном использовании буфера обмена, я использую: lock(SyncObjects.InputSyncer), но это работает только во время выполнения блока C#.

Однако в некоторых случаях я выполняю операции копирования и вставки, между которыми есть несколько блоков, которые не являются пользовательскими блоками C# (и которые я не могу/не хочу преобразовывать). Поэтому на данный момент я использую простое решение: внешний файл, который действует как "блокировка" с булевым выбором, управляющим доступом к буферу обмена! Цель состоит в том, чтобы убедиться, что когда элемент копируется в буфер обмена, это не другой поток вставляет его, потому что между блоками есть задержка в несколько секунд, и может быть переплетение.

Я создал нижеуказанный код, что вы думаете об использованном методе?

Могло ли быть более простое/надежное решение?

C#:
// Блокировка: True

// Построить путь к файлу

var lockFilePath = Path.Combine(project.Directory, "01 - The Base\01 - Cookies\The Lock.txt");

// Проверить, доступен ли буфер обмена

if (File.ReadAllText(lockFilePath) == "False")

{

// Буфер обмена доступен, записать "True", чтобы заблокировать его

File.WriteAllText(lockFilePath, "True");

}

else

{

// Подождите, пока буфер обмена не станет доступным

while (File.ReadAllText(lockFilePath) != "False")

{

// Подождите 1 секунду перед повторной попыткой

Thread.Sleep(1000);

}

// Как только буфер обмена станет доступным, записать "True", чтобы заблокировать его

File.WriteAllText(lockFilePath, "True");

}
Затем в конце процесса мы записываем "False" в текстовый файл.

Заранее спасибо за ваш совет!


PS :

Прошу прощения за возможные странности в моем русском тексте, я использую сервис перевода для своих сообщений. На данный момент я не владею русским языком, но с большим интересом и вниманием читаю русскую часть форума благодаря сервису перевода. Все ясно, что именно здесь, в русскоязычном сообществе, скрывается больше всего ценной информации. Так что, если я хочу продвинуться с Zenno, мне нужно отправиться на сторону русского сообщества!
На данный момент, единственное слово, которое я знаю на русском, это 'здоровье'
 
  • Спасибо
Реакции: Morti

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
Воскресенье - время для отдыха, поэтому это Zenno:bo.

Использование буфера обмена в автоматизации следует избегать, но в некоторых случаях я использую его, потому что:

Эмуляция текста занимает слишком много времени (если установлен быстрый режим, текст не распознается/область текста не активирована). Для целей SEO, когда я не могу отправить HTML/разметку в качестве гостя. Чтобы избежать конфликтов в многопоточном использовании буфера обмена, я использую: lock(SyncObjects.InputSyncer), но это работает только во время выполнения блока C#.

Однако в некоторых случаях я выполняю операции копирования и вставки, между которыми есть несколько блоков, которые не являются пользовательскими блоками C# (и которые я не могу/не хочу преобразовывать). Поэтому на данный момент я использую простое решение: внешний файл, который действует как "блокировка" с булевым выбором, управляющим доступом к буферу обмена! Цель состоит в том, чтобы убедиться, что когда элемент копируется в буфер обмена, это не другой поток вставляет его, потому что между блоками есть задержка в несколько секунд, и может быть переплетение.

Я создал нижеуказанный код, что вы думаете об использованном методе?

Могло ли быть более простое/надежное решение?

C#:
// Блокировка: True

// Построить путь к файлу

var lockFilePath = Path.Combine(project.Directory, "01 - The Base\01 - Cookies\The Lock.txt");

// Проверить, доступен ли буфер обмена

if (File.ReadAllText(lockFilePath) == "False")

{

// Буфер обмена доступен, записать "True", чтобы заблокировать его

File.WriteAllText(lockFilePath, "True");

}

else

{

// Подождите, пока буфер обмена не станет доступным

while (File.ReadAllText(lockFilePath) != "False")

{

// Подождите 1 секунду перед повторной попыткой

Thread.Sleep(1000);

}

// Как только буфер обмена станет доступным, записать "True", чтобы заблокировать его

File.WriteAllText(lockFilePath, "True");

}
Затем в конце процесса мы записываем "False" в текстовый файл.

Заранее спасибо за ваш совет!


PS :

Прошу прощения за возможные странности в моем русском тексте, я использую сервис перевода для своих сообщений. На данный момент я не владею русским языком, но с большим интересом и вниманием читаю русскую часть форума благодаря сервису перевода. Все ясно, что именно здесь, в русскоязычном сообществе, скрывается больше всего ценной информации. Так что, если я хочу продвинуться с Zenno, мне нужно отправиться на сторону русского сообщества!
На данный момент, единственное слово, которое я знаю на русском, это 'здоровье'
Есть большая вероятность что при больших объемах потоков проект зациклиться и станет работать медленно, разумнее всего при итерации попыток вставки пробовать другие методы, такие как SET, либо эмуляцию клавиатуры на крайний вариант:dd:
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
Друзья, появилась новая инфа на счет вставки, но с помощью хот кеев. По сути метод прост: Устанавливаете софт который биндит хоткеи и эмулируете для каждого отдельного проекта с буфером обмена свой отдельный метод вставки. Так же возможно напрямую менять файл с вариацией вставки текста.:dt:
 
  • Спасибо
Реакции: Pierre Paul Jacques

Ахилес

Client
Регистрация
11.11.2020
Сообщения
886
Благодарностей
364
Баллы
63
Друзья, появилась новая инфа на счет вставки, но с помощью хот кеев. По сути метод прост: Устанавливаете софт который биндит хоткеи и эмулируете для каждого отдельного проекта с буфером обмена свой отдельный метод вставки. Так же возможно напрямую менять файл с вариацией вставки текста.:dt:
а буфер обмена как был один и не предназначеный для работы в многопотоке, так и остался :bk:
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
Друзья, появилась новая инфа на счет вставки, но с помощью хот кеев. По сути метод прост: Устанавливаете софт который биндит хоткеи и эмулируете для каждого отдельного проекта с буфером обмена свой отдельный метод вставки. Так же возможно напрямую менять файл с вариацией вставки текста.:dt:
Напитонил софт для вас, работает как с буфером так и с методом быстрой прописи текста, а так же есть настройка и пример. Не забудьте установить python с несколькими библиотеками, которые найдете в коде:bt:
Чтобы применить в инстансе необходима команда:

instance.ActiveTab.KeyEvent("Горячая клавиша", "press", "Клавиша с которой начинается комбинация");
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Pierre Paul Jacques

doc

Client
Регистрация
30.03.2012
Сообщения
8 608
Благодарностей
4 600
Баллы
113
Напитонил софт для вас, работает как с буфером так и с методом быстрой прописи текста, а так же есть настройка и пример. Не забудьте установить python с несколькими библиотеками, которые найдете в коде:bt:
Чтобы применить в инстансе необходима команда:

instance.ActiveTab.KeyEvent("Горячая клавиша", "press", "Клавиша с которой начинается комбинация");
что это меняет в глобальном смысле кроме того, что появился дополнительный костыль?
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
886
Благодарностей
364
Баллы
63
что это меняет в глобальном смысле кроме того, что появился дополнительный костыль?
ничего не меняет... просто глянь его историю сообщений ;-)

думаю он тебе ответит примерно так :bk:хотя может преды научили общаться...

121190
 

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
что это меняет в глобальном смысле кроме того, что появился дополнительный костыль?
Меняет то что теперь работает одна программа через которую проходит весь буфер обмена, вам теперь не нужно постоянно выполнять в каждом проекте и потоке кусок кода который отвечает за прерывание потока и установку текста в буфер. Все работает уже скомпилированным и тем является быстрым решением для многопоточного многопроектного проектища)

вы просто братья по несчастью, которые хотят быстрой и правильной работы от чего то одного. Так вот я предоставил вам несколько вариаций обхода неправильной логики дабы прийти к одному годному варианту.

вы просто братья по несчастью, которые хотят быстрой и правильной работы от чего то одного. Так вот я предоставил вам несколько вариаций обхода неправильной логики дабы прийти к одному годному варианту.
Единственный костыль с которым вы столкнетесь, это спам горячей клавиши если питон не включен.
 

Pendolf

Client
Регистрация
25.11.2019
Сообщения
50
Благодарностей
7
Баллы
8
Выдано очередное предупреждение.

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)