[Need help] ctrl+c, ctrl+v - работаем с буфером обмена

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113
Покурил форум, но так ни одна конструкция и не заработала. Требуется помощь знатоков.

Копирование:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);

Вставка:
lock(SyncObjects.InputSyncer) //lock для эмуляции только в одном инстансе в каждый момент времени
{
Emulator.ActiveWindow(instance.FormTitle); //активация текущего инстанса
System.Windows.Forms.SendKeys.SendWait("^{v}");
}

Текст из переменной копируется в буфер, но не вставляется. Хотя если самому нажать ctrl+v, то вставляется.

Где ошибка?
 

KirillOFF

Client
Регистрация
18.12.2010
Сообщения
1 127
Благодарностей
517
Баллы
113
Давно делал для blogger.com:

Код:
var tab = instance.ActiveTab;
var he = tab.FindElementByAttribute("div", "class", @"CodeMirror cm-s-default CodeMirror-wrap", "text", 0);
if (tab.IsBusy) tab.WaitDownloading();
if (!he.IsVoid)
{
    int x = Convert.ToInt32(he.GetAttribute("leftinbrowser")) + 150;
    int y = Convert.ToInt32(he.GetAttribute("topinbrowser")) + 20;
    project.SendInfoToLog(x.ToString(), "X = ");
    project.SendInfoToLog(y.ToString(), "Y = ");
    he.RiseEvent("onclick", "full");

    lock(SyncObjects.InputSyncer)
    {
        Emulation.Emulator.MouseClick(instance.ActiveTab.Handle, MouseButton.Left, MouseButtonEvent.Click, x, y);
        System.Threading.Thread.Sleep(50);
        Emulator.ActiveWindow(instance.FormTitle);

        System.Threading.Thread.Sleep(50);
        System.Windows.Forms.SendKeys.SendWait("^(a)");
        System.Threading.Thread.Sleep(50);
        System.Windows.Forms.SendKeys.SendWait("{DELETE}");
        System.Threading.Thread.Sleep(50);
        System.Windows.Forms.Clipboard.SetText(project.Variables["html"].Value);
        System.Threading.Thread.Sleep(50);
        System.Windows.Forms.SendKeys.SendWait("^(v)");
        System.Threading.Thread.Sleep(150);
    }
}
Добавлено:
Видимо различие тут:
("^(v)")
("^{v}")
 

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113
Сапорт, кодеры, никто не знает? быть не может.
Не работает вариант выше(

Нужная вещь.
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
в пм работает instance.ActiveTab.KeyEvent("c","press","ctrl");
 

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
C KeyEvent баг был еще, поправили для билда 5.5
 

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113
Тестанул на последнем билде в пм. Ошибки больше не выдает, но не работает.
В буфер обмена значение переменной добавляется отлично.
Но ctrl+v не работает.
Ручками все отлично вставляется.

Может надо ещё какой-то код?
Пробовал и в одном и в разных C# шагах делать.

Что неверно делаю?

var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("c","press","ctrl");


Пробовал по разному.
 

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 812
Благодарностей
1 187
Баллы
113
Vot tak poprobuj

C#:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
 

KirillOFF

Client
Регистрация
18.12.2010
Сообщения
1 127
Благодарностей
517
Баллы
113
Думаю нужно копать в сторону установки фокуса в нужно поле, с этим бывает не все так просто
 

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113
Спасибо, парни.
Работает. С фокусом всё четко было.
Ошибся в последнем варианте случайно, "ctrl+c" пытался эмулировать для вставки, а не ctrl+v, как надо!
))
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Подскажите небольшо код, чтобы ведлить текст и удалить его в визинг редакторе какомнить. А то бекспейсами не надежно как то.
 

confirm2315

Новичок
Регистрация
26.01.2015
Сообщения
27
Благодарностей
10
Баллы
3
Нашел вот баг с этим кодом:
Vot tak poprobuj

C#:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
При тесте кода все нормально, проходит. При запуске с ProjectMaker вылетает просто из программы без оповещений.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
а в логи что пишется в папку Logs?
 

confirm2315

Новичок
Регистрация
26.01.2015
Сообщения
27
Благодарностей
10
Баллы
3
Ничего не пишет, просто закрывает программу и все, сразу же, не дожидаясь окончания выполнения. Удалил и заново поставил экшен - то же самое. Удалил первые две строчки - все равно вылетает.
Если есть рабочий вариант вставки из буфера обмена, очень прошу поделиться, без него шаб работает не так как нужно.
 

d4k

Client
Регистрация
24.12.2014
Сообщения
27
Благодарностей
5
Баллы
3
Ребят, так что, есть рабочий экшен по работе с буфером? Тоже очень нужен для шаблона, но все фрагменты, которые я видел на форуме не работают... Помогите ;-)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Ребят, так что, есть рабочий экшен по работе с буфером? Тоже очень нужен для шаблона, но все фрагменты, которые я видел на форуме не работают... Помогите ;-)
уверены что нет альнернатив? что за задача?
 

d4k

Client
Регистрация
24.12.2014
Сообщения
27
Благодарностей
5
Баллы
3
Задача - организация постинга на форуме с BBCODE разметкой. Хотя, суть в том, что возможности постить с разметкой нет (нет расширенного редактора или внесение данных в "source code"), но разметка добавляется в форму при ctrl+v. Другого способа как работать с буфером я не вижу.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
попробуйте устанавливать не value а innerhtml элементу
 

d4k

Client
Регистрация
24.12.2014
Сообщения
27
Благодарностей
5
Баллы
3
Rostonix - помогло. Отлично работает и постит теперь. Спасибо ;-)
 

j-moris

Client
Регистрация
21.10.2010
Сообщения
94
Благодарностей
11
Баллы
18
Vot tak poprobuj

C#:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");

а если нужно 2 переменных в буфер загнать?
их отдельно ообработать или добавить можно
C#:
var descr = project.Variables["des, des2"].Value;
 

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 812
Благодарностей
1 187
Баллы
113
а если нужно 2 переменных в буфер загнать?
их отдельно ообработать или добавить можно
C#:
var descr = project.Variables["des, des2"].Value;
отдельно
C#:
var descr = project.Variables["des"].Value + project.Variables["des2"].Value;
 

Budda

Client
Регистрация
13.07.2015
Сообщения
247
Благодарностей
41
Баллы
28
Спасибо, парни.
Работает. С фокусом всё четко было.
Ошибся в последнем варианте случайно, "ctrl+c" пытался эмулировать для вставки, а не ctrl+v, как надо!
))
Добрый день. Можете подытожить и написать рабочий вариант для (Ctrl+c) и (Ctrl+v)
Что-то я тыкаю-тыкаю, но ничего не работает))) Это же в C# кидать?
 

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Благодарностей
917
Баллы
113
Да в СИшарп. Что именно тыкаете и куда? Какя версия зенно?
Только сегодня затестил вариант этот:
Код:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
Всё работает.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Добрый день. Можете подытожить и написать рабочий вариант для (Ctrl+c) и (Ctrl+v)
Что-то я тыкаю-тыкаю, но ничего не работает))) Это же в C# кидать?
был выше итоговый код

C#:
var descr = project.Variables["des"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
 
  • Спасибо
Реакции: Brinkman

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