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

one

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

Dr.Pipetka

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

Ахилес

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

Dr.Pipetka

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

Pendolf

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

Dr.Pipetka

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

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
116
Благодарностей
33
Баллы
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
Сообщения
46
Благодарностей
5
Баллы
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

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