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

ca8e52a47c7c0d93e6d1decc38f98615.png


добавил кубик c# и все даже взятие строки из файла перестало работать пишет ошибки сверху

я поменял на свою переменную значение ... и все пошли ошибки

-----------------------------------------------------------------------------------
Проблема решилась так, все четко быстро ... без проблем

C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
    var descr = project.Variables["Thema"].Value ;
    if (String.IsNullOrEmpty(descr)) {
        throw new Exception("Пустой текст для вставки");
    }
    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();
    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");
    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    if (!String.IsNullOrEmpty(previous_text)) {
        System.Windows.Forms.Clipboard.SetText(previous_text);
    }}
 
Последнее редактирование:
Код взят из этого сообщения? Там мой косяк. Надо закомментировать вторую строку Нижеприведённый код безвозвратно удаляет содержимое буфера обмена.

Я уже не могу отредактировать своё сообщение, сейчас кого-то из модераторов попрошу.

UPD: код в сообщении поправлен.
 
Последнее редактирование:
  • Спасибо
Реакции: shifu
+
 
Последнее редактирование:
Доброго времени суток , попробовал коды выше -не получилось

имеется вот такой вод код , он вставляет из переменной текст

C#:
Развернуть Свернуть Копировать
var textcr = project.Variables["mail"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной

Из кода понятно , что ничего не лочится и при работе более одного потока буфер будет одним, в силу "опыта" работы с C# своих мозгов не хватает, подскажите что именно добавить в буфер, чтобы можно было запустить шаблон во многопотоке

Желательно лочить на уровне потока
 
Последнее редактирование:
  • Спасибо
Реакции: nik-n и modeler
Желательно лочить на уровне потока

C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
    var textcr = project.Variables["mail"].Value;
    System.Windows.Forms.Clipboard.SetText(textcr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}

это минимум, который вам нужен для работы
 
Не знаю что за глюк, но у меня почему то иногда вставляется на второй раз, или вообще буфер обмена системный
 
  • Спасибо
Реакции: GeGold
Для Firefox в многопотоке работает приведенный ниже код, но в Chrome он работает через раз и вставляет содержимое системного буфера.
C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
    var descr = project.Variables["text"].Value;
 
    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();
 
    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");
 
    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);
}
А в Chrome я использую
C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
    var textcr = project.Variables["mail"].Value;
    System.Windows.Forms.Clipboard.SetText(textcr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
в многопотоке не тестировал, но в одном потоке работает стабильно.
 
Последнее редактирование:
  • Спасибо
Реакции: Kulya, Fedor5588 и GeGold
Иногда при постинге на чьём-то WEB 2.0 ресурсе возникает такая хрень, что поставлен какой-то хитрый кастомный WYSIWYG-редактор, в который не так то просто запихать текст, а эмуляция клавиатуры работает так долго, что ну просто не приемлемо (или просто нет желания её использовать).
Именно в такой ситуации спасает копирование текста в буфер обмена Windows, а затем вставка его в нужное поле с помощью ZennoPoster. Но при работе с буфером обмена не стоит забывать о важной особенности: буфер один, а потоков - много. Поэтому не редки ситуации, когда в нескольких потоках может вставиться один и тот же текст.

Чтобы решить эту задачу и не прострелить себе ногу - следует использовать C#-сниппет:
Код:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
    var descr = project.Variables["content"].Value;

    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();

    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");

    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);
}

Для работы этого кода нужно предварительно установить курсор (через эмуляцию клика мыши) в нужное поле. В следующий раз выложу сниппет для поиска элемента и клика мышью внутри него (если нужно?).
В данном коде нужно поменять переменную content на свою - в ней находится ваш текст для вставки.

Здраствуйте!
Подскажите, пожалуйста, в чем может быть проблема:
копирование с буфера обмена - Ок
вставка в нужное поле - Ок
но блочок #С отрабатывает с ошибкой!

Использую код для Хрома - вылезает следующая ошибка
" Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 1; Cтолбец: 138]"
 

Вложения

  • copy_paste.jpg
    copy_paste.jpg
    11,5 KB · Просмотры: 25
Последнее редактирование:
" Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 1; Cтолбец: 138]"
Ошибка и решения гуглятся на раз-два.
А без вашего отредактированного кода и примера что вставляете - гадание на кофейной гуще.
 
Ошибка и решения гуглятся на раз-два.
А без вашего отредактированного кода и примера что вставляете - гадание на кофейной гуще.

Код полностью такой же как и у вас. Только вместо 'text' вставляю свою переменную!
 
Код полностью такой же как и у вас. Только вместо 'text' вставляю свою переменную!

lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["email_login"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 
Нашел в чем проблема. В другом блочке в #C коде была ошибка и через это не компилировался весь проект!
 
А как скопировать в переменную не текст, а любые данные?

Поясню.

Для заливки страницы в один сервис прохожу по такому алгоритму:

1. Создаю randomname.html файл, в котором у меня находится сгенерированная страница с текстом, картинками и тд.
2. Открываю этот файл в браузере, Ctrl +a, Ctrl+c
3. Открываю страницу с редактором, куда будем постить.
4. Кликаем в поле редактора и Ctrl+v

Сам редактор загружается долго, поэтому буфер все это время занят.
Тут есть реализация, как скопировать текст в переменную, а потом уже вставить ее.
А можно ли как то загнать в переменную те данные, которые копировались на шаге №2?
Чтоб дождаться загрузки страницы и потом опять поместить содержимое переменной в буфер и вставить его

(Да, файл можно открывать в новой вкладке, копировать и сразу вернуться на вкладку редактора и вставить, но интересует, можно ли сохранить такое содержимое буфера, или же в переменных ЗП такое не сохранить? )
 
А как скопировать в переменную не текст, а любые данные?

Поясню.

Для заливки страницы в один сервис прохожу по такому алгоритму:

1. Создаю randomname.html файл, в котором у меня находится сгенерированная страница с текстом, картинками и тд.
2. Открываю этот файл в браузере, Ctrl +a, Ctrl+c
3. Открываю страницу с редактором, куда будем постить.
4. Кликаем в поле редактора и Ctrl+v

Сам редактор загружается долго, поэтому буфер все это время занят.
Тут есть реализация, как скопировать текст в переменную, а потом уже вставить ее.
А можно ли как то загнать в переменную те данные, которые копировались на шаге №2?
Чтоб дождаться загрузки страницы и потом опять поместить содержимое переменной в буфер и вставить его

(Да, файл можно открывать в новой вкладке, копировать и сразу вернуться на вкладку редактора и вставить, но интересует, можно ли сохранить такое содержимое буфера, или же в переменных ЗП такое не сохранить? )
надо использовать другие методы https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.clipboard?view=netcore-3.1

63438
 
  • Спасибо
Реакции: Nord
Здравствуйте! Подскажите, как вставить текст из системного буфера обмена windows с сохранением форматирования? Тоесть я в ворде нажал Ctrl-C и мне теперь нужно нажать Ctrl-V в zennoposter в определенное поле.

Руками нажимаю - текст вставляется с необходимым форматированием.
 
Здравствуйте! Подскажите, как вставить текст из системного буфера обмена windows с сохранением форматирования? Тоесть я в ворде нажал Ctrl-C и мне теперь нужно нажать Ctrl-V в zennoposter в определенное поле.

Руками нажимаю - текст вставляется с необходимым форматированием.
тему с начала не пробовал читать ?
 
здравствуйте, помогите пожалуйста, сил уже нету

Все вариантов кодов у меня из этой темы не работают
выдает постоянно одну и ту же ошибку
"Выполнение действия CSharp OwnCode. No such variable:" и дальше содержимое переменной а именно текст с html тегами

пытаюсь автоматизировать перевод текстовых фалов с html тегами в гугл переводчике
почти все сделал а вот как вставить текст из переменной в поле для перевода не знаю. И как потом из буфера обмена результат загнать в переменную или может вообще подскажете как проще реализовать перевод или может где взять готовые куски по это дело

зено версии 5.30 , винда 10
 
здравствуйте, помогите пожалуйста, сил уже нету

Все вариантов кодов у меня из этой темы не работают
выдает постоянно одну и ту же ошибку
"Выполнение действия CSharp OwnCode. No such variable:" и дальше содержимое переменной а именно текст с html тегами

Что-то Вы не так делаете.
Пришлите кусок кода, в котором идёт вставка из БО.
 
  • Спасибо
Реакции: galardo
Что-то Вы не так делаете.
Пришлите кусок кода, в котором идёт вставка из БО.
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["{-Variable.redytotranslate-}"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 
Попробуйте так:
C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["redytotranslate"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 
  • Спасибо
Реакции: Rimen и galardo
Попробуйте так:
C#:
Развернуть Свернуть Копировать
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["redytotranslate"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
Ого, большое спасибо, работает )))
подскажете еще пожалуйста как переведенный текст из буфера обмена положить в переменную
 
С помощью этого сниппета можно сохранить содержимое БО в переменную проекта.
project_variable_name замените на имя своей переменной.
C#:
Развернуть Свернуть Копировать
project.Variables["project_variable_name"].Value = System.Windows.Forms.Clipboard.GetText();

Учитывайте тот факт, что этот код работает с системным буфером обмена. Если Вы что-то скопируете в него во время работы шаблона, то это "что-то" может попасть в переменную.
 
  • Спасибо
Реакции: Rimen и galardo
С помощью этого сниппета можно сохранить содержимое БО в переменную проекта.
project_variable_name замените на имя своей переменной.
C#:
Развернуть Свернуть Копировать
project.Variables["project_variable_name"].Value = System.Windows.Forms.Clipboard.GetText();

Учитывайте тот факт, что этот код работает с системным буфером обмена. Если Вы что-то скопируете в него во время работы шаблона, то это "что-то" может попасть в переменную.
спасибо
что то не хочет работать
"Выполнение действия CSharp OwnCode. No such variable: "
 
спасибо
что то не хочет работать
"Выполнение действия CSharp OwnCode. No such variable: "
В моём примере использовалось имя переменной project_variable_name, Вам надо заменить это на имя своей переменной.
72018
 
  • Спасибо
Реакции: galardo
В качестве имени переменной использовать надо не макрос переменной ({-Variable.readytext-}), а только её имя - readytext (макросы вообще в коде использовать нельзя!)
Правильно так project.Variables["readytext"].Value
 
  • Спасибо
Реакции: galardo

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