Эмуляция Ctrl+V

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Что делать если нужно вставить "котлету" из переменных?

{-Variable.zag-}
{ENTER}
{-Variable.ssylka-}{-Variable.metka_fb-}
{ENTER}
{-Variable.tegi-}
Код:
string zag = project.Variables["zag"].Value;
string ssylka = project.Variables["ssylka"].Value;
string metka_fb = project.Variables["metka_fb"].Value;
string tegi = project.Variables["tegi"].Value;

System.Windows.Forms.Clipboard.SetText(zag + "\r\n" + ssylka + metka_fb + "\r\n" + tegi);
instance.ActiveTab.KeyEvent("v","press","ctrl");
или если нужно, чтоб разделялось пустыми строками, то заменить
Код:
System.Windows.Forms.Clipboard.SetText(zag + "\r\n" + ssylka + metka_fb + "\r\n" + tegi);
на
Код:
System.Windows.Forms.Clipboard.SetText(zag + "\r\n\r\n" + ssylka + metka_fb + "\r\n\r\n" + tegi);
 
Последнее редактирование:
  • Спасибо
Реакции: noble

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Код:
string zag = project.Variables["zag"].Value;
string ssylka = project.Variables["ssylka"].Value;
string metka_fb = project.Variables["metka_fb"].Value;
string tegi = project.Variables["tegi"].Value;

System.Windows.Forms.Clipboard.SetText(zag + "\r\n" + ssylka + metka_fb + "\r\n" + tegi);
instance.ActiveTab.KeyEvent("v","press","ctrl");
или если нужно, чтоб разделялось пустыми строками, то заменить
Код:
System.Windows.Forms.Clipboard.SetText(zag + "\r\n" + ssylka + metka_fb + "\r\n" + tegi);
на
Код:
System.Windows.Forms.Clipboard.SetText(zag + "\r\n\r\n" + ssylka + metka_fb + "\r\n\r\n" + tegi);
Большое спасибо :bo:
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Хороший метод, однако, есть некоторые не совсем приятные моменты. Например тот, что если работать на компе в каком-то редакторе, во время исполнения данного скрипта, то есть вероятность того, что из клипбоарда вставится та информация, которая в данный момент была использована в стороннем редакторе.
ВОПРОС: как избежать такого момента?
 

rostonix

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

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Да есть такой момент с буфером! Мешает иногда, хочешь ссылку вставить,а он тебе раз и скрипт редиректа. Может есть внутренний буфер зеннопостер? Или может его можно реализовать?
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Да есть такой момент с буфером! Мешает иногда, хочешь ссылку вставить,а он тебе раз и скрипт редиректа. Может есть внутренний буфер зеннопостер? Или может его можно реализовать?
Тут играем, тут не играем а тут мы рыбу заворачиваем))) Как вы себе это представляете?
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Чё-то вы сразу пессимистично настроились

Тут играем, тут не играем а тут мы рыбу заворачиваем))) Как вы себе это представляете?
Например, Зенно ставит в какую-то особую ячейку буфера, доступную лишь ему. То есть разграничивает буфер.

Я не программист, как это реализовать не знаю, но вот нашёл пару статей на данную тему, в которых, вроде бы (на мой взгляд) предлагается решение
- Новый подход к реализации контроля и разграничения прав доступа к данным в информационных системах
- Контроль доступа
Может кто-то, кто более посвящён в тему, почитает и поймёт как решить задачу?

P.S. Пришла в голову идея. Так как процедура длится какие-то доли секунды или секунды, можно сделать так:
- Копирование в фразы в буфер
- Блокирование буфера
- Вставка фразы Ctrl+V
- Очистка буфера
- Разблокировка буфера
Вроде бы в какой-то программе такое уже попадалось
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Можно сделать проще, да и думаю, будет достаточно, так: очистка буфера обмена > вставка текста из переменной > очистка буфера обмена.
Операция длится доли секунд. Единственным минусом будет только то, что при параллельной работе с буфером, могут затереться скопированные данные до того, как они будут куда-то выгружены (тупо не успеть сделать копи-паст).
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Можно сделать проще, да и думаю, будет достаточно, так: очистка буфера обмена > вставка текста из переменной > очистка буфера обмена.
Операция длится доли секунд. Единственным минусом будет только то, что при параллельной работе с буфером, могут затереться скопированные данные до того, как они будут куда-то выгружены (тупо не успеть сделать копи-паст).
По сути таки и происходит сейчас. Valiksim хочет 100% гарантию, того что в проекте не появится левый текст в результате его сёрфинга по инету
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
По сути таки и происходит сейчас. Valiksim хочет 100% гарантию, того что в проекте не появится левый текст в результате его сёрфинга по инету
99%, что левый текст в проект и так не попадет, т.к. код отрабатывает мгновенно. А вот избавиться от вставки ненужных данных из переменной проекта при параллельной работе с буфером, предложенный вариант спасет.
 
  • Спасибо
Реакции: noble

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
У меня к примеру 1 текст в 5 потоков. Но стоит интервал 2 секунды между назначением переменной и вставки ее в буфер, т.к. переменная подтягивает другие переменные и формирует текст. Корректно ли будет работать если я сразу сделаю без пауз?
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
У меня к примеру 1 текст в 5 потоков. Но стоит интервал 2 секунды между назначением переменной и вставки ее в буфер, т.к. переменная подтягивает другие переменные и формирует текст. Корректно ли будет работать если я сразу сделаю без пауз?
Не понятно зачем тебе формировать текст если в он один, закинул в переменную и все дела. Если не одни то сколь и как это шайтан схема работает?
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Не понятно зачем тебе формировать текст если в он один, закинул в переменную и все дела. Если не одни то сколь и как это шайтан схема работает?
Ну да кстати было бы логичнее использовать глобальную переменную и назначать текст 1 раз, спасибо за подсказку, ранее не использовал глобальные переменные, по ходу настало их время =)

UPD. Не получиться, так у меня интегрировано взятие из списка разных значений и далее формируется переменная, т.е. нужно каждый поток формировать новый текст.
 
Последнее редактирование:

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Ну да кстати было бы логичнее использовать глобальную переменную и назначать текст 1 раз, спасибо за подсказку, ранее не использовал глобальные переменные, по ходу настало их время =)

UPD. Не получиться, так у меня интегрировано взятие из списка разных значений и далее формируется переменная, т.е. нужно каждый поток формировать новый текст.
Как вариант: "для разнесения во времени потоков" можно использовать рендомные паузы. К приму 3 рендомные паузы от 0 до 10 сек на разных этапах выполнения проекта, сведут вероятность одновременного обращения к буферу к очень низкой вероятности
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Как вариант: "для разнесения во времени потоков" можно использовать рендомные паузы. К приму 3 рендомные паузы от 0 до 10 сек на разных этапах выполнения проекта, сведут вероятность одновременного обращения к буферу к очень низкой вероятности
У меня каждая секунда на счету, так капмонстр разгадывает по 10-20 секунд, так еще и рандомная пауза,неее.. мне надо быстро, у меня 5 потоков, а шаблон делается 1 минуту.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
У меня каждая секунда на счету, так капмонстр разгадывает по 10-20 секунд, так еще и рандомная пауза,неее.. мне надо быстро, у меня 5 потоков, а шаблон делается 1 минуту.
Думаю, что без пауз должно нормально работать. Попробуйте протестировать на каком-нибудь "левом" ресурсе, где можно через Ctrl+V в поле вставлять данные и сразу берите установленные значения с записью в файл для анализа.
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
99%, что левый текст в проект и так не попадет, т.к. код отрабатывает мгновенно. А вот избавиться от вставки ненужных данных из переменной проекта при параллельной работе с буфером, предложенный вариант спасет.
Каким-то чудесным образом (может Шайтан вмешивается?), но как назло, то, что попадает в буфер обмена при работе где бы то ни было ещё, обязательно попадает в буфер программы или наоборот.

Листал Инет, на тему буфера. Информации много, но вот про блокировку не нашёл. Нужен более компетентный в теме специалист, тема остаётся актуальной. Работать в программе при таком коде можно только в 1 поток, да ещё и ничего не делать на компе, связанное с буфером, во время работы. Либо, как по минному полю,- сверяться, где, в какой точке находится исполнение шаблона.
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
177
Благодарностей
10
Баллы
18
Код:
string text = project.Variables["Text"].Value;
System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl");
Подскажите, пожалуйста, что нужно прописать в код, чтобы после вставки текста был нажат enter?
Пробовал добавить в строку instance.ActiveTab.KeyEvent("enterl") то есть:

System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl")
instance.ActiveTab.KeyEvent("enterl")

Получаю сообщение об ошибке
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Подскажите, пожалуйста, что нужно прописать в код, чтобы после вставки текста был нажат enter?
Код:
string text = project.Variables["Text"].Value;
System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl");
Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, KeyboardEvent.Press);
или
Код:
string text = project.Variables["Text"].Value;
System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl");
instance.SendText("{ENTER}", 15);
 
  • Спасибо
Реакции: SilverSun и noble

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
В Microsoft Word есть встроенный буфер обмена. 1 запись основная, общая с буфером Машины, и несколько других, которые хранятся где-то в другом месте. Можно ли что-то подобное и тут организовать?
 
  • Спасибо
Реакции: pix

Sapfire65

Client
Регистрация
05.06.2016
Сообщения
103
Благодарностей
22
Баллы
18
Код:
string text = project.Variables["Text"].Value;
System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl");
Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, KeyboardEvent.Press);
или
Код:
string text = project.Variables["Text"].Value;
System.Windows.Forms.Clipboard.SetText(text);
instance.ActiveTab.KeyEvent("v","press","ctrl");
instance.SendText("{ENTER}", 15);
Люди добрые помогите адаптировать код для сочетания клавиш CTRL + A и Delete
 

Sapfire65

Client
Регистрация
05.06.2016
Сообщения
103
Благодарностей
22
Баллы
18
Нужно тупо очистить текст в поле сообщения.
 

GeGold

Client
Регистрация
28.09.2015
Сообщения
778
Благодарностей
370
Баллы
63
Ребят, подскажите - есть сайт, после манипуляций с ним появляется кнопка "скопировать в буфер обмена", нужно из буфера записать в список, буду оч благодарен
 
Последнее редактирование:
  • Спасибо
Реакции: Mikhail B.

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Ребят, подскажите - есть сайт, после манипуляций с ним появляется кнопка "скопировать в буфер обмена", нужно из буфера записать в список, буду оч благодарен
C#:
return System.Windows.Forms.Clipboard.GetText()
Ложим данное значение в переменную, а потом уже делаем с ней, что душе угодно.
В однопоточном режиме должно работать нормально. Если предполагается работа в многопоточном режиме, то стоит обратить внимание на эту тему и модифицировать код под себя.

clipboard.png
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 415
Благодарностей
5 454
Баллы
113
Ребят, подскажите - есть сайт, после манипуляций с ним появляется кнопка "скопировать в буфер обмена", нужно из буфера записать в список, буду оч благодарен
Должно работать, проверь)
Код:
lock(SyncObjects.InputSyncer) // блокировка
{
System.Windows.Forms.Clipboard.Clear(); //чистим буфер
return System.Windows.Forms.Clipboard.GetText();
}
 
Последнее редактирование:
  • Спасибо
Реакции: impul5e и GeGold

GeGold

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

spbalexpiter

Client
Регистрация
24.11.2013
Сообщения
399
Благодарностей
92
Баллы
28

Mikhail B.

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

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