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

xatchikzzz

Client
Регистрация
08.09.2010
Сообщения
577
Благодарностей
41
Баллы
28


добавил кубик 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);
    }}
 
Последнее редактирование:

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Код взят из этого сообщения? Там мой косяк. Надо закомментировать вторую строку Нижеприведённый код безвозвратно удаляет содержимое буфера обмена.

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

UPD: код в сообщении поправлен.
 
Последнее редактирование:
  • Спасибо
Реакции: shifu

eee

Client
Регистрация
04.06.2018
Сообщения
134
Благодарностей
31
Баллы
28
+
 
Последнее редактирование:

GeGold

Client
Регистрация
28.09.2015
Сообщения
778
Благодарностей
370
Баллы
63
Доброго времени суток , попробовал коды выше -не получилось

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

C#:
var textcr = project.Variables["mail"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
Из кода понятно , что ничего не лочится и при работе более одного потока буфер будет одним, в силу "опыта" работы с C# своих мозгов не хватает, подскажите что именно добавить в буфер, чтобы можно было запустить шаблон во многопотоке

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

Vvafel

Client
Регистрация
24.12.2017
Сообщения
80
Благодарностей
35
Баллы
18
Желательно лочить на уровне потока
C#:
lock(SyncObjects.InputSyncer) // блокировка
{
    var textcr = project.Variables["mail"].Value;
    System.Windows.Forms.Clipboard.SetText(textcr);
    instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
это минимум, который вам нужен для работы
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113

Kulya

Client
Регистрация
11.09.2016
Сообщения
177
Благодарностей
48
Баллы
28
Не знаю что за глюк, но у меня почему то иногда вставляется на второй раз, или вообще буфер обмена системный
 
  • Спасибо
Реакции: GeGold

eee

Client
Регистрация
04.06.2018
Сообщения
134
Благодарностей
31
Баллы
28
Для 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

Master_slave

Client
Регистрация
22.05.2016
Сообщения
17
Благодарностей
0
Баллы
1
Иногда при постинге на чьём-то 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]"
 

Вложения

Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

Master_slave

Client
Регистрация
22.05.2016
Сообщения
17
Благодарностей
0
Баллы
1

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
" Компиляция кода Ошибка в действии "CS1009" "Unrecognized escape sequence". [Строка: 1; Cтолбец: 138]"
Ошибка и решения гуглятся на раз-два.
А без вашего отредактированного кода и примера что вставляете - гадание на кофейной гуще.
 

Master_slave

Client
Регистрация
22.05.2016
Сообщения
17
Благодарностей
0
Баллы
1
Ошибка и решения гуглятся на раз-два.
А без вашего отредактированного кода и примера что вставляете - гадание на кофейной гуще.
Код полностью такой же как и у вас. Только вместо 'text' вставляю свою переменную!
 

Master_slave

Client
Регистрация
22.05.2016
Сообщения
17
Благодарностей
0
Баллы
1
Код полностью такой же как и у вас. Только вместо 'text' вставляю свою переменную!
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["email_login"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 

Master_slave

Client
Регистрация
22.05.2016
Сообщения
17
Благодарностей
0
Баллы
1
Нашел в чем проблема. В другом блочке в #C коде была ошибка и через это не компилировался весь проект!
 

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
Спасибо за готовое решение ! Пригодилось!!!!!
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
А как скопировать в переменную не текст, а любые данные?

Поясню.

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

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

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

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А как скопировать в переменную не текст, а любые данные?

Поясню.

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

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

MST

Client
Регистрация
15.09.2017
Сообщения
31
Благодарностей
2
Баллы
8
Здравствуйте! Подскажите, как вставить текст из системного буфера обмена windows с сохранением форматирования? Тоесть я в ворде нажал Ctrl-C и мне теперь нужно нажать Ctrl-V в zennoposter в определенное поле.

Руками нажимаю - текст вставляется с необходимым форматированием.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Здравствуйте! Подскажите, как вставить текст из системного буфера обмена windows с сохранением форматирования? Тоесть я в ворде нажал Ctrl-C и мне теперь нужно нажать Ctrl-V в zennoposter в определенное поле.

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

galardo

Client
Регистрация
23.10.2010
Сообщения
46
Благодарностей
2
Баллы
8
здравствуйте, помогите пожалуйста, сил уже нету

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

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

зено версии 5.30 , винда 10
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
здравствуйте, помогите пожалуйста, сил уже нету

Все вариантов кодов у меня из этой темы не работают
выдает постоянно одну и ту же ошибку
"Выполнение действия CSharp OwnCode. No such variable:" и дальше содержимое переменной а именно текст с html тегами
Что-то Вы не так делаете.
Пришлите кусок кода, в котором идёт вставка из БО.
 
  • Спасибо
Реакции: galardo

galardo

Client
Регистрация
23.10.2010
Сообщения
46
Благодарностей
2
Баллы
8
Что-то Вы не так делаете.
Пришлите кусок кода, в котором идёт вставка из БО.
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["{-Variable.redytotranslate-}"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Попробуйте так:
C#:
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["redytotranslate"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
 
  • Спасибо
Реакции: Rimen и galardo

galardo

Client
Регистрация
23.10.2010
Сообщения
46
Благодарностей
2
Баллы
8
Попробуйте так:
C#:
lock(SyncObjects.InputSyncer) // блокировка
{
var textcr = project.Variables["redytotranslate"].Value;
System.Windows.Forms.Clipboard.SetText(textcr);
instance.ActiveTab.KeyEvent("v","press","ctrl");//вставить текст из переменной
}
Ого, большое спасибо, работает )))
подскажете еще пожалуйста как переведенный текст из буфера обмена положить в переменную
 

nicanil

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

galardo

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

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
спасибо
что то не хочет работать
"Выполнение действия CSharp OwnCode. No such variable: "
В моём примере использовалось имя переменной project_variable_name, Вам надо заменить это на имя своей переменной.
72018
 
  • Спасибо
Реакции: galardo

galardo

Client
Регистрация
23.10.2010
Сообщения
46
Благодарностей
2
Баллы
8

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
В качестве имени переменной использовать надо не макрос переменной ({-Variable.readytext-}), а только её имя - readytext (макросы вообще в коде использовать нельзя!)
Правильно так project.Variables["readytext"].Value
 
  • Спасибо
Реакции: galardo

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