Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17

Как имитировать нажатие клавиш внутри формы c#

28.06.2013, 12:57. Показов 3713. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне надо имитировать нажатие клавиши. Я пробовал в таймере вызывать класс SendKeys.SendWait("{TAB}"); Но если я переведу фокус на другое приложение, то там будет нажиматься "tab", а мне надо только внутри формы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2013, 12:57
Ответы с готовыми решениями:

Как имитировать нажатие мыши ВНУТРИ формы - Visual basic & C# ?
Как имитировать нажатие левой кнопки мыши по заданным координатам ВНУТРИ ФОРМЫ ? C# или visual basic Есть Form1, необходимо нажать левой...

Как имитировать нажатие клавиш
Каким образом с помощью C# можно вызвать событие любой кнопки клавиатуры. н.п. У меня есть форма на ней одна кнопка какой код занести в...

Как имитировать нажатие клавиш?
Всем привет. Пишу небольшую программу и вот тут пришел к вопросу как имитировать нажатие клавиш клавиатуры? Например у меня есть форма...

17
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
28.06.2013, 15:57
А если проверять наличие фокуса у нужной формы, перед тем, как послать сообщение о нажатии клавииши TAB?
C#
1
if(ContainsFocus) SendKeys.SendWait("{TAB}");
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 16:07  [ТС]
Я рассматривал такой вариант, но мне всё же нужно найти способ, чтоб tab нажимался только на форме, в независимости от фокуса. На Delphi это возможно, неужели на C# нельзя так сделать?
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 16:15
А кто вам мешает поставить фокус перед нажатием явно на нужную форму?

Добавлено через 2 минуты
плюс думаю есть какие-то настройки, с помощью которых не получится перевести фокус на другое приложение или еще куда-то, ну это поискать надо
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 16:20  [ТС]
Нет, вы не поняли. Мне нужно, чтоб имитировалось нажатие на форме, а я, к примеру, мог в это время заниматься своими делами за компьютером.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 16:34
ага, а можно узнать э, какая именно задача, для чего на форме должны нажиматься клавиши? то есть вы как бы хотите, чтобы программа как бы работала в фоновом режиме, допустим свернута где-то в трее и при этом делала что-то себе там?
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 16:44  [ТС]
то есть вы как бы хотите, чтобы программа как бы работала в фоновом режиме, допустим свернута где-то в трее и при этом делала что-то себе там?
Именно так. У меня есть компонент webbrowser, в нём табом перескакивает по сылкам и по нужной производится клик (имитация ENTER).

Так скажите, возможно ли это на C#?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
28.06.2013, 16:48
@nextwe, посылайте сообщения через WINAPI (SendMessage)
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 17:00
Думаю возможно, но придется покопаться это точно, так за 5 минут эту задачу не решить, тем более если нет опыта в решении таких задач =) Такс, попробуем что-нибудь найти

Добавлено через 47 секунд
Цитата Сообщение от kodv Посмотреть сообщение
@nextwe, посылайте сообщения через WINAPI (SendMessage)
Куда он должен будет их отсылать?

Добавлено через 4 минуты
На сколько я помню SendMessage просто отправляет некое сообщение в приложение, ну отправим мы сами же себе сообщение какое-то, а толку? другое дело, что можно попробовать с помощью вин апи имитировать нажатие клавиши, там скорей всего оно будет принимать хэндлер приложения, в котором необходимо это сделать, но муторно это все конечно)

Добавлено через 6 минут
Порыскал, порыскал, похоже тут без winapi не обойтись =)
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
28.06.2013, 17:07
Цитата Сообщение от 23Alex24 Посмотреть сообщение
На сколько я помню SendMessage просто отправляет некое сообщение в приложение
Совершенно верно. Что в этом плохого? Когда пользователь нажимает клавишу на клавиатуре, то активному приложению отправляется сообщение WM_KEYDOWN, когда отпускает, то отправляется сообщение WM_KEYUP. Именно при помощи данных сообщений приложение и узнает, что пользователь нажал клавишу. В Windows вообще все взаимодействие между окнами строится на поссылке друг другу соощений.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 17:15
Цитата Сообщение от kodv Посмотреть сообщение
Совершенно верно. Что в этом плохого? Когда пользователь нажимает клавишу на клавиатуре, то активному приложению отправляется сообщение WM_KEYDOWN, когда отпускает, то отправляется сообщение WM_KEYUP. Именно при помощи данных сообщений приложение и узнает, что пользователь нажал клавишу. В Windows вообще все взаимодействие между окнами строится на поссылке друг другу соощений.
С этим полностью согласен, тут как я понял основная загвоздка, что у нас на той форме, в которой мы хотим нажать клавишу не будет фокуса, тут придется вытащить хэндлер необходимого приложения(в котором надо нажать клавишу) и уже там имитировать нажатие =)
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 17:39  [ТС]
Я попробовал разобраться с SendMessage, но мне не удалось. Я пробовал искать примеры, но ничего не получилось. Не могли ли вы сказать, как именно пользоваться SendMessage.

using System.Runtime.InteropServices;

[DllImport("user32")]
static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

Это то, что я нашёл. Но как это вызвать я не знаю.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 17:52
вот что нашел http://easylab.net.ua/winapi/spravochnik-po-winapi типа справочник по winapi, в общем поройтесь, найдите необходимую функцию, мне уходить надо сейчас, если что пишите, будем решать
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 18:50  [ТС]
Мне не удалось разобраться.
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
28.06.2013, 19:30
угу, ну уже хорошо, ничего, разберемся =)
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 17
28.06.2013, 21:05  [ТС]
Короче, мне удалось сделать, чтобы текст вписывался в блокнот. Теперь помогите преобразовать, чтоб посылалось нажатие клавиши форме. Вот код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Runtime.InteropServices;
 
 const int WM_SETTEXT = 0x000C;
 
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        static extern IntPtr FindWindow(string className, string title);
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        static extern IntPtr FindWindowEx(IntPtr parent, IntPtr after, string className, string title);
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        static extern IntPtr SendMessage(IntPtr hwnd, int msg, IntPtr wParam, string text);
 
 
 private void Form1_Load(object sender, EventArgs e)
        {
 
            IntPtr hwnd = FindWindow("Notepad", null);
            IntPtr editWnd = FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
            SendMessage(editWnd, WM_SETTEXT, IntPtr.Zero, "Бла-Бла-Бла");
        }
0
3 / 3 / 1
Регистрация: 29.06.2013
Сообщений: 29
29.06.2013, 01:22
лучше бы написали приложение со своим браузером благо в два клика это делается....
0
644 / 198 / 5
Регистрация: 24.07.2010
Сообщений: 1,315
29.06.2013, 06:48
Цитата Сообщение от nextwe Посмотреть сообщение
Короче, мне удалось сделать, чтобы текст вписывался в блокнот. Теперь помогите преобразовать, чтоб посылалось нажатие клавиши форме. Вот код
Если смотреть на тот форум, ссыль на который ты скинул, там есть такая штука

j = SendMessage(h, WM_KEYDOWN, 'o', 1);
j = SendMessage(h, WM_KEYUP, 'o', 1);

то есть тебе надо найти хэндлер своего окна и ему послать нажатие и отпускание клавиши. еще там советуют прогу Spy++ через нее якобы можно все отглядеть, я думаю вам стоит более плотно почитать те обсуждения, там очень много полезной инфы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2013, 06:48
Помогаю со студенческими работами здесь

Как имитировать нажатие клавиш?
Как? Спасибо всем, кто ответит!

Как можно имитировать нажатие клавиш на клавиатуре без пользователя?
Как можно имитировать нажатие клавиш на клавиатуре без пользователя?

Имитировать нажатие комбинации клавиш
Хочу сделать себе расширение для Firefox. Всё сделал, осталась одна большая и главная проблема. Нужно с помощью JS выполнить имитацию...

Имитировать нажатие клавиш в неактивном окне
Здрасте:) У меня есть моя программа и есть программа другая. Другая программа завершает свою работу по нажатию в ней CTRL+Z (имеет...

Нажатие клавиш вне формы (глобальный перехват сочетания клавиш)
Всем доброго времени суток! Задумал сделать значок раскладки клавы, но беда в том, что если потерян фокус приложения, то значок не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru