Эмуляция нажатия клавиш

  • Автор темы Rema
  • Дата начала
R

Rema

Гость
#1
Как программно иммитировать нажатие клавиши ?
 
R

Rema

Гость
#3
SendKeys хороший метод, только как к нему прицепить коды служебных клавиш,
например Insert ?
 
F

fenhuan

Гость
#4
ну тогда только сканкод посылать, наверное
 
R

Rema

Гость
#5
Win32 API юзать в "безопасном коде" нельзя. Надо ScanCod послать средствами .NET
 
P

Pasha

Гость
#6
Win32 API юзать в "безопасном коде" нельзя
Можно, если у вызывающего кода есть SecurityPermission на UnmanagedCode. Если нет - можно вынести вызывающий код работы с Win32 API в отдельную dll, и через CAS Policy дать этой dll нужные права.
EDIT: как и сделал MS для SendKeys :)
 
R

Rema

Гость
#7
У меня SendKeys посылает Unicod-аналог скан-кода, а это далеко не то, что хотелось бы
 
P

Pasha

Гость
#8
Rema
Unicode-аналог скан-кода? Это как o_O? Что, например, приходит при отправке "{INS}"?
 
R

Rema

Гость
#9
Поставим вопрос так: как передать Keys.Insert в качестве строкового параметра методу SendKeys.Send(keys) ?
 
F

fenhuan

Гость
#11
Вот такой код успешно работает:

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}
 
R

Rema

Гость
#12
Да, пожалуй срабатывает. Только не понятно как метод определяет, что {INS} соответствует Keys.Insert и где найти соответствия для остальных скан-кодов
 
P

Pasha

Гость
#13
Rema
Судя по всему, в MSDN по SendKeys.Send ты даже не заглядывал? Действительно, зачем? Ведь напрячь сидящих на форуме проще, они же удовольствие получают от копипаста документации по используемым тобой функциям.
 
R

Rema

Гость
#14
Напряги с английским. Если бы все ходили в MSDN, тогда зачем нужны русско-язычные форумы ?
 
R

Rema

Гость
#15
RSDN создавался как раз с этой целью, но почему-то переродился в обычный форум
 
P

Pasha

Гость
#16
Rema
Наверное потому что довольно скучно на голом энтузиазме переводить кучу технической документации на русский. Особенно если учесть, что для освоения технического английского достаточно потратить месяц-два. Тебе ведь все равно придется его выучить, так зачем оттягивать неизбежное?
 
R

Rema

Гость
#17
Я это к тому, что обычно люди смотрят информацию на родном языке,
а уж если нет ничего подходящего, лезут в 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 раза.