Любитель
![]() 1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,483
|
|
Как имитировать нажатие клавиш Ctrl+C08.06.2020, 12:52. Показов 2812. Ответов 17
Метки нет Все метки)
(
Всем привет. Задача такая,при нажатии своей кнопки Button1 выделенный текст в стороннем приложении(например Блокнот) копируется в буфер обмена,А при нажатии Button2 вставляется в стороннее приложение из БО.
Перепробовал много вариантов с этого форума,но ничего не работает И часто появляется такая ошибка,причем при вызове разных функций.
0
|
08.06.2020, 12:52 | |
Ответы с готовыми решениями:
17
Как описать нажатие клавиш Ctrl+Enter? Как имитировать нажатия клавиш Как отловить в своей программе нажатие CTRL + F |
263 / 215 / 53
Регистрация: 01.08.2016
Сообщений: 829
|
|
08.06.2020, 14:10 | |
Тим70, По сути вопрос состоит как записать информацию в буфер обмена с помощью кнопки если я правильно понял:
https://docs.microsoft.com/ru-... -clipboard
0
|
![]() |
|||||||||||||||||||||||||||||||||||||||||
09.06.2020, 08:15 | |||||||||||||||||||||||||||||||||||||||||
![]() Решение
В принципе-то вроде как ничего сложно и нет. Есть такая штука как
Keyboard.SendKeys Метод (Microsoft.VisualBasic.Devices) | Microsoft Docs Ну или SendKeys.Send(String) Метод (System.Windows.Forms) | Microsoft Docs Таблицу сочетаний клавиш лучше читать на английском )) Так что, все вроде просто, отправляешь ^c - копирует, отправляешь ^v - вставляет. Проблема только в том, что и копируется и вставляется все это дело только тогда, когда соответствующее окно активно и фокус именно на том элементе управления, с которым нужно провести данную манипуляцию (копирование или вставку). И если со своим приложением это сделать несложно, то с внешним - все совсем не так просто. Обычно для этого используются либо WinApi, либо UIAutomation. Приведу простой пример с UIAutomation. Сначала к проекту подключаем библиотеки UIAutomationClient.dll и UIAutomationTypes.dll . Это стандартные библиотеки, входят во фреймворк с версии 3.5 кажись.Далее импортируем
Spy++ . Его можно найти в меню Средства. Там можно поискать среди открытых окон, найти то что надо и получить сведения, включая имя класса. Например мы работаем с блокнотом. Из Spy++ несложно узнать, что имя класса окна в нем называется Notepad, а имя класса текстового поля - Edit. Допустим у нас открыт блокнот с текстом, в тексте некоторая часть выделена. Делаем так
Собственно дальше, для того чтобы активировать окно и элемент управления можно сделать так
Теперь нам снова надо искать окно блокнота, но уже другое. Для этого мы используем помимо поиска по классу еще и используем то, что у запущенного нами процесса мы можем получить его идентификатор и добавим это условие к условию, использованному ранее
8
|
![]() |
|
22.06.2020, 12:06 | |
Тим70, ну ясно же, что для того, чттбы подписаться на событие Button1, надо чтобы такая кнопка была на форме.
0
|
![]() |
|
22.06.2020, 12:13 | |
Тим70, ну, а какие ещё ошибки могут быть в этой строке? Ну и о самой ошибке информацию тоже надо давать.
0
|
Любитель
![]() 1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,483
|
|
22.06.2020, 12:15 [ТС] | |
Для предложения "Напсііез" требуется переменная с Р
модификатором "\МітЬЕчепіз", определенная во вмещающем типе или в одном из его базовых типов. Добавлено через 1 минуту diadiavova, Вот ,извиняюсь,сразу не дал.
0
|
![]() |
|
22.06.2020, 12:21 | |
Тим70, предложение, по всей видииости Handles, а не то, что написано, остального вообще не понял. Сообщение провитано с помощью OCR-системы что ли?
0
|
![]() |
|
22.06.2020, 12:29 | |
Тим70, а без переводчика можно увидеть?
Добавлено через 3 минуты Тим70, короче, просто нужно на форму добавить кнопку, клацнуть по ней дважды, и в обработчик вставить код.
0
|
![]() |
|
22.06.2020, 12:34 | |
Тим70, а скопировать, никак? Я чуть позже найду проект и выложу.
0
|
![]() |
|
22.06.2020, 13:16 | |
Тим70, ну, раз программа не нашла окна блокнота, значит его там не было. Ты все выполнил, что было написано? Нужно открыть окно блокнота, ввести туда какой-то текст, часть текста выделить, после этого переходить к программе и жать кнопку.
На всякий случай выкладываю проект. Там еще одна кнопка, выводит заголовки всех открытых окон. Ну так, если надо все окна найти. И еще, те окошки, что показываются с сообщениями об ошибках, там в самом низу есть ссылочка "Скопировать сведения исключения в буфер обмена". А если ошибка во время разработки возникла, то она в окошке "Список ошибок" есть, оттуда ее тоже скопировать можно.
1
|
Любитель
![]() 1023 / 722 / 158
Регистрация: 27.01.2019
Сообщений: 1,483
|
|
22.06.2020, 16:48 [ТС] | |
diadiavova, Ну вообшем да ,так и получается.Открываю свой блокнот,чтото копирую в нем ,а потом перехожу в параллейный блокнт,чтобы туда скопировать запись.
Добавлено через 6 минут diadiavova, Да.Тут скорее моя ошибка,а не ваша,буду потихоньку разбираться. Добавлено через 38 секунд diadiavova, Да.Тут скорее моя ошибка,а не ваша,буду потихоньку разбираться.
0
|
22.06.2020, 16:48 | ||||||
Помогаю со студенческими работами здесь
18
Как запретить нажатие клавиш?
Как имитировать нажатие клавиш внутри формы c# Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
|
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
|
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
|
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
|
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
|
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
|
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
|
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
|
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
|
TypeScript vs JavaScript: Отличия и когда что использовать
Reangularity 09.04.2025
JavaScript появился в 1995 году как творение Брендана Эйха и быстро стал основой интерактивности в вебе. За свою историю он прошел путь от простого языка для манипуляций с DOM до полноценной. . .
|