Ошибки 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);
 
Вот так попробуй:

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
После обновления и выбора бразузера cromium творится полная дичь у всех так и ли я один такой счастливчик ? Ошибки zenopostera с буфером обмена
как правильно работать с ним ,
// ошибка
Выполнение действия CSharp OwnCode. Значение не может быть неопределенным.
Имя параметра: text
По видимому вы неполный код скопировали изначально.
Попробуйте после второй строки добавить previous_text = System.Windows.Forms.Clipboard.GetText();
 
Вот так попробуй:

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.
Вот так попробуй:

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
ошибка
 
Выполнение действия 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.
Да забыл упомянуть, еще после назначения переменной пауза 2 сек.
 
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);
}
 
Какая то х ... происходит с этим буфером обмена уже нет слов я вообще не понимаю как должно работать , после недели нормальной работы начало по несколько раз вставлять значения из буфера . Вместо 200 строк 400 + подряд . Есть нормальное решения для ZennoPoster V7 RU 7.7.1.0 / на chromium или на чем лучше работать что бы не жестило так ? /
 
Последнее редактирование:
Так прежде чем что-то писать в буфер наверно стоит проверить есть ли в 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);

Добрый день!
А как в конечном коде будет выглядеть эти проверки? Ибо с паузами раз через раз работает.
 
Добрый день!
А как в конечном коде будет выглядеть эти проверки? Ибо с паузами раз через раз работает.
Не нужно совсем заморачиваться - нужно после выполнения работы проверять, выполнена корректно или нет.
Если не корректно - вернулись обратно попробовали повторно.
Код ниже - это то, как я это вижу, но, не факт что это правильно - может быть как-то лучше надо.
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);
        }
    }
}

// где-то тут проверяем, если на указанном сайте все вставилось корректно - идем по зеленой ветке
// если на желаемом сайте что-то не вставилось корректно - значит выходим по красной и возвращаемся к этому кубику с повторной попыткой
 
Не нужно совсем заморачиваться - нужно после выполнения работы проверять, выполнена корректно или нет.
Если не корректно - вернулись обратно попробовали повторно.
Код ниже - это то, как я это вижу, но, не факт что это правильно - может быть как-то лучше надо.
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);
        }
    }
}

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

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

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