Ошибки zenopostera с буфером обмена

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
После обновления и выбора бразузера cromium творится полная дичь у всех так и ли я один такой счастливчик ? Ошибки zenopostera с буфером обмена
как правильно работать с ним ,
// ошибка
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
??? как исправить то дублирует то и ще какая то ... sos помогите пожалуйста ))) кто может переменная в логе есть текстовая много строчная

string text = project.Variables["tempUrl200"].Value;
string previous_text = "";
project.SendInfoToLog( text , true);

System.Windows.Forms.Clipboard.SetText(text);
instance.SendText("{CTRLDOWN}v{CTRLUP}", 20);
// стираем буфер и возвращаем его к первоначальному состоянию
System.Windows.Forms.Clipboard.Clear();
System.Windows.Forms.Clipboard.SetText(previous_text);
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Вот так попробуй:

C#:
lock(SyncObjects.InputSyncer) // блокировка
{
    //project.SendToLog("1", LogType.Info, true, LogColor.Default);
    var descr = project.Variables["tempUrl200"].Value;
    // Установленная пауза
    System.Threading.Thread.Sleep(1 * 1000);
    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();

    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    System.Threading.Thread.Sleep(1 * 1000);

    instance.ActiveTab.KeyEvent("v","press","ctrl");
    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("2", LogType.Info, true, LogColor.Default);
    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);

    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("3", LogType.Info, true, LogColor.Default);
}
 
  • Спасибо
Реакции: zava75

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 416
Благодарностей
9 119
Баллы
113
После обновления и выбора бразузера cromium творится полная дичь у всех так и ли я один такой счастливчик ? Ошибки zenopostera с буфером обмена
как правильно работать с ним ,
// ошибка
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
По видимому вы неполный код скопировали изначально.
Попробуйте после второй строки добавить previous_text = System.Windows.Forms.Clipboard.GetText();
 

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
Вот так попробуй:

C#:
lock(SyncObjects.InputSyncer) // блокировка
{
    //project.SendToLog("1", LogType.Info, true, LogColor.Default);
    var descr = project.Variables["tempUrl200"].Value;
    // Установленная пауза
    System.Threading.Thread.Sleep(1 * 1000);
    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();

    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    System.Threading.Thread.Sleep(1 * 1000);

    instance.ActiveTab.KeyEvent("v","press","ctrl");
    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("2", LogType.Info, true, LogColor.Default);
    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);

    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("3", LogType.Info, true, LogColor.Default);
}
СПАСИБО !! вроде работает))
 
  • Спасибо
Реакции: Mikhail B.

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
Вот так попробуй:

C#:
lock(SyncObjects.InputSyncer) // блокировка
{
    //project.SendToLog("1", LogType.Info, true, LogColor.Default);
    var descr = project.Variables["tempUrl200"].Value;
    // Установленная пауза
    System.Threading.Thread.Sleep(1 * 1000);
    // сохраняем предыдущее состояние буфера
    String previous_text = null;
    previous_text = System.Windows.Forms.Clipboard.GetText();

    // сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
    System.Windows.Forms.Clipboard.SetText(descr);
    System.Threading.Thread.Sleep(1 * 1000);

    instance.ActiveTab.KeyEvent("v","press","ctrl");
    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("2", LogType.Info, true, LogColor.Default);
    // стираем буфер и возвращаем его к первоначальному состоянию
    System.Windows.Forms.Clipboard.Clear();
    System.Windows.Forms.Clipboard.SetText(previous_text);

    System.Threading.Thread.Sleep(1 * 1000);
    //project.SendToLog("3", LogType.Info, true, LogColor.Default);
}
если несколько шаблонов работает все равно
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
ошибка
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
если несколько шаблонов работает все равно
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
ошибка
Еще пауз добавь
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
Так прежде чем что-то писать в буфер наверно стоит проверить есть ли в text значение.
Пример:
C#:
if(!string.IsNullOrEmpty(text)) System.Windows.Forms.Clipboard.SetText(text);
и
C#:
if(!string.IsNullOrEmpty(previous_text)) System.Windows.Forms.Clipboard.SetText(previous_text);
 
  • Спасибо
Реакции: zava75 и Mikhail B.

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Да забыл упомянуть, еще после назначения переменной пауза 2 сек.
 

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
Да забыл упомянуть, еще после назначения переменной пауза 2 сек.
var descr = project.Variables["tempUrl200"].Value;
// Установленная пауза
System.Threading.Thread.Sleep(2 * 1000)
//
сюда правильно понял ?
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
lock(SyncObjects.InputSyncer) // блокировка
{
//project.SendToLog("1", LogType.Info, true, LogColor.Default);
var descr = project.Variables["tempUrl200"].Value;
// Установленная пауза
System.Threading.Thread.Sleep(2 * 1000);
// сохраняем предыдущее состояние буфера
String previous_text = null;
previous_text = System.Windows.Forms.Clipboard.GetText();

// сохраняем нужный текст в буфер и вставляем его (программно делаем CTRL+V)
System.Windows.Forms.Clipboard.SetText(descr);
System.Threading.Thread.Sleep(2 * 1000);

instance.ActiveTab.KeyEvent("v","press","ctrl");
System.Threading.Thread.Sleep(2 * 1000);
//project.SendToLog("2", LogType.Info, true, LogColor.Default);
// стираем буфер и возвращаем его к первоначальному состоянию
System.Windows.Forms.Clipboard.Clear();
System.Windows.Forms.Clipboard.SetText(previous_text);

System.Threading.Thread.Sleep(2 * 1000);
//project.SendToLog("3", LogType.Info, true, LogColor.Default);
}
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113

zava75

Client
Регистрация
01.12.2019
Сообщения
161
Благодарностей
4
Баллы
18
Какая то х ... происходит с этим буфером обмена уже нет слов я вообще не понимаю как должно работать , после недели нормальной работы начало по несколько раз вставлять значения из буфера . Вместо 200 строк 400 + подряд . Есть нормальное решения для ZennoPoster V7 RU 7.7.1.0 / на chromium или на чем лучше работать что бы не жестило так ? /
 
Последнее редактирование:

NirvanaFlame

Client
Регистрация
15.07.2021
Сообщения
3
Благодарностей
2
Баллы
3
Так прежде чем что-то писать в буфер наверно стоит проверить есть ли в text значение.
Пример:
C#:
if(!string.IsNullOrEmpty(text)) System.Windows.Forms.Clipboard.SetText(text);
и
C#:
if(!string.IsNullOrEmpty(previous_text)) System.Windows.Forms.Clipboard.SetText(previous_text);
Добрый день!
А как в конечном коде будет выглядеть эти проверки? Ибо с паузами раз через раз работает.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 788
Благодарностей
2 453
Баллы
113
Добрый день!
А как в конечном коде будет выглядеть эти проверки? Ибо с паузами раз через раз работает.
Не нужно совсем заморачиваться - нужно после выполнения работы проверять, выполнена корректно или нет.
Если не корректно - вернулись обратно попробовали повторно.
Код ниже - это то, как я это вижу, но, не факт что это правильно - может быть как-то лучше надо.
C#:
string text = project.Variables["tempUrl200"].Value.Trim();
if(string.IsNullOrEmpty(text)) throw new Exception("Нельзя устанавливать в буфер пустое значение...");
string old_text = string.Empty;

lock(SyncObjects.InputSyncer) {
    bool check = false;
    old_text = System.Windows.Forms.Clipboard.GetText();
    old_text = old_text.Trim();
      
    while(!check) {
        // Установка данных в буфер, если что-то пошло не так - устанавливаем повторно...
        System.Windows.Forms.Clipboard.SetText(text);
        string temp =  System.Windows.Forms.Clipboard.GetText().Trim();
    
        check = text == temp;
        if(check) break;
        Thread.Sleep(1*1000);
    }
    
    instance.ActiveTab.KeyEvent("v","press","ctrl");
    Thread.Sleep(2*1000); // пауза должна быть такая, чтобы сайт на который вставляются данные успел отреагировать
        
    System.Windows.Forms.Clipboard.Clear(); // Чистим буфер в любом случае...
    if(!string.IsNullOrEmpty(old_text)) {
        check = false;
        while(!check) {
            // возвращаем старые данные в буфер, если что-то пошло не так - устанавливаем повторно...
            System.Windows.Forms.Clipboard.SetText(old_text);
            string temp =  System.Windows.Forms.Clipboard.GetText().Trim();
            check = old_text == temp;
            if(check) break;
            Thread.Sleep(1*1000);
        }
    }
}

// где-то тут проверяем, если на указанном сайте все вставилось корректно - идем по зеленой ветке
// если на желаемом сайте что-то не вставилось корректно - значит выходим по красной и возвращаемся к этому кубику с повторной попыткой
 

rumobik

Client
Регистрация
29.01.2024
Сообщения
24
Благодарностей
1
Баллы
3
Не нужно совсем заморачиваться - нужно после выполнения работы проверять, выполнена корректно или нет.
Если не корректно - вернулись обратно попробовали повторно.
Код ниже - это то, как я это вижу, но, не факт что это правильно - может быть как-то лучше надо.
C#:
string text = project.Variables["tempUrl200"].Value.Trim();
if(string.IsNullOrEmpty(text)) throw new Exception("Нельзя устанавливать в буфер пустое значение...");
string old_text = string.Empty;

lock(SyncObjects.InputSyncer) {
    bool check = false;
    old_text = System.Windows.Forms.Clipboard.GetText();
    old_text = old_text.Trim();
     
    while(!check) {
        // Установка данных в буфер, если что-то пошло не так - устанавливаем повторно...
        System.Windows.Forms.Clipboard.SetText(text);
        string temp =  System.Windows.Forms.Clipboard.GetText().Trim();
   
        check = text == temp;
        if(check) break;
        Thread.Sleep(1*1000);
    }
   
    instance.ActiveTab.KeyEvent("v","press","ctrl");
    Thread.Sleep(2*1000); // пауза должна быть такая, чтобы сайт на который вставляются данные успел отреагировать
       
    System.Windows.Forms.Clipboard.Clear(); // Чистим буфер в любом случае...
    if(!string.IsNullOrEmpty(old_text)) {
        check = false;
        while(!check) {
            // возвращаем старые данные в буфер, если что-то пошло не так - устанавливаем повторно...
            System.Windows.Forms.Clipboard.SetText(old_text);
            string temp =  System.Windows.Forms.Clipboard.GetText().Trim();
            check = old_text == temp;
            if(check) break;
            Thread.Sleep(1*1000);
        }
    }
}

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

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