Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Эмуляция нажатия клавиш
Форум программистов > Системное программирование > .NET
Rema
Как программно иммитировать нажатие клавиши ?
sax_ol
Зачем?

[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
fenhuan
SendKeys.Send(...)
Rema
SendKeys хороший метод, только как к нему прицепить коды служебных клавиш,
например Insert ?
fenhuan
ну тогда только сканкод посылать, наверное
Rema
Win32 API юзать в "безопасном коде" нельзя. Надо ScanCod послать средствами .NET
sax_ol
Rema
А SendKeys по вашему как работает? wink.gif
Pasha
Цитата(Rema @ 12:03:2008 - 13:51) *
Win32 API юзать в "безопасном коде" нельзя
Можно, если у вызывающего кода есть SecurityPermission на UnmanagedCode. Если нет - можно вынести вызывающий код работы с Win32 API в отдельную dll, и через CAS Policy дать этой dll нужные права.
EDIT: как и сделал MS для SendKeys smile.gif
Rema
У меня SendKeys посылает Unicod-аналог скан-кода, а это далеко не то, что хотелось бы
Pasha
Rema
Unicode-аналог скан-кода? Это как O_o? Что, например, приходит при отправке "{INS}"?
Rema
Поставим вопрос так: как передать Keys.Insert в качестве строкового параметра методу SendKeys.Send(keys) ?
Pasha
Rema
Цитата(Rema @ 13:03:2008 - 08:40) *
как передать Keys.Insert в качестве строкового параметра методу SendKeys.Send(keys) ?

Цитата(Pasha @ 12:03:2008 - 17:43) *
Что, например, приходит при отправке "{INS}"?
fenhuan
Вот такой код успешно работает:

Form f = new Form();
RichTextBox tb = new RichTextBox();
tb.Dock = DockStyle.Fill;
f.Controls.Add(tb);
tb.Click += delegate { SendKeys.Send("{INS}"); };
f.ShowDialog();

т.е. SendKeys нормально отрабатывает {INS}
Rema
Да, пожалуй срабатывает. Только не понятно как метод определяет, что {INS} соответствует Keys.Insert и где найти соответствия для остальных скан-кодов
Pasha
Rema
Судя по всему, в MSDN по SendKeys.Send ты даже не заглядывал? Действительно, зачем? Ведь напрячь сидящих на форуме проще, они же удовольствие получают от копипаста документации по используемым тобой функциям.
Rema
Напряги с английским. Если бы все ходили в MSDN, тогда зачем нужны русско-язычные форумы ?
sax_ol
Цитата(Rema @ 14:03:2008 - 08:00) *
Если бы все ходили в MSDN, тогда зачем нужны русско-язычные форумы ?

Есть предположение, что совсем не для перевода этого самого MSDN, или нет?
Rema
RSDN создавался как раз с этой целью, но почему-то переродился в обычный форум
Pasha
Rema
Наверное потому что довольно скучно на голом энтузиазме переводить кучу технической документации на русский. Особенно если учесть, что для освоения технического английского достаточно потратить месяц-два. Тебе ведь все равно придется его выучить, так зачем оттягивать неизбежное?
sax_ol
Rema
А при чем тут RSDN, мы ведь не о нем, или опять ошибаюсь?
Rema
Я это к тому, что обычно люди смотрят информацию на родном языке,
а уж если нет ничего подходящего, лезут в MSDN.
На всякий случай, для таких же, как, я даю соответсвующую теме инфу:
Цитата
SendKeys Class:
Key Code
BACKSPACE {BACKSPACE},{BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DELETE {DELETE},{DEL}
DOWN {DOWN}
END {END}
ENTER {ENTER}
ESC {ESC}
HELP {HELP}
HOME {HOME}
INSERT {INSERT},{INS}
LEFT {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINTSCREEN {PRTSC}
RIGHT {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP {UP}
F1 {F1}
...... ..........
F16 {F16}
Keypad add {ADD}
Keypad subtract {SUBTRACT}
Keypad multiply {MULTIPLY}
Keypad divide {DIVIDE}

Коды ( + ^ % ~ ) имеют специальные значения, если не поместить их внутри
фигурных скобок {}. Например, чтобы задать код плюса, используйте "{+}".
Чтобы задать фигурные скобки, используйте "{{}" и "{}}".
Чтобы задать ключи, объединенные с любой комбинацией SHIFT, CTRL, ALT,
предваряйте ключевой код одним или несколькими из следующих кодов:
SHIFT +
CTRL ^
ALT %
Для задания любой комбинации SHIFT, CTRL, и ALT с набором других клавиш,
надо коды этих клавиш поместить в круглые скобки. Например, чтобы задать
нажатие SHIFT вместе с клавишами E и D, используйте "+ (ED)".
Чтобы задать SHIFT только с клавишей E, а D без SHIFTа, используйте "+ED".
Чтобы определить повторяющиеся ключи, используйте форму {key num}.
Например, {LEFT 42}, эмулирует нажатие клавиши LEFT 42 раза.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.