C# SendKeys. Отправить

Когда выполняется анализ решения Resharper и nCrunch Boths, он останавливает мой текстовый редактор.

Слишком много для моих шести ядер.

Решение - это 14 проектов и около 120 тыс. Строк кода.

5
задан John Saunders 21 April 2010 в 22:33
поделиться

9 ответов

Я решил эту проблему, зарегистрировав глобальные горячие клавиши. Спасибо. Этот был ресурсом, который я использовал для решения моей проблемы.

0
ответ дан 13 December 2019 в 22:14
поделиться

Я могу сделать неверное предположение, но если вы используете это с текстовым полем, вы можете:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'a')
    {
        e.Handled = true;
    }
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.A)
    {
        e.Handled = true;
        SendKeys.Send("s");
    }
}

Или даже проще:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'a')
    {
        e.Handled = true;
        SendKeys.Send("s");
    }
}

Или, если это не для использования просто с помощью текстового поля, тогда разве вы не можете просто перевернуть обратное пространство и отправить s-ключ?

if ((Keys)keyCode== Keys.A)
{                    
    SendKeys.Send("{BS}"); // remove A
    SendKeys.Send("s");    // add S
}
2
ответ дан 13 December 2019 в 22:14
поделиться

Возможно, это не то, что вам нужно / нужно, но если вы просто хотите переназначить некоторые клавиши клавиатуры, я бы посоветовал изучить использование другой раскладки клавиатуры или создание собственной раскладки. Вы можете создавать новые макеты следующим образом:

http://msdn.microsoft.com/en-ca/goglobal/bb964665.aspx

1
ответ дан 13 December 2019 в 22:14
поделиться

SendKeys.SendWait

1
ответ дан 13 December 2019 в 22:14
поделиться

Я бы отменил свои вызовы:

SendKeys.Send ("{BS}");

SendKeys.Send ("S");

EDIT (после обновления вопроса ):

Если вы работаете со строкой (для ваших специальных символов), можете ли вы просто захватить строку, сгенерированную нажатием клавиши ("a"), и изменить ее, установив для строки значение Unicode символа персонаж, которого вы пытаетесь изобразить? Если другие решения, о которых упоминали люди, не работают, я бы попробовал следующее ...

2
ответ дан 13 December 2019 в 22:14
поделиться

Другой вариант, который у вас есть, - использовать низкоуровневые перехватчики клавиатуры, чтобы поймать старого персонажа, а затем отправьте новый. Это потребует некоторого P / Invoke, но дает вам возможность полностью захватить исходный ключ, чтобы приложения его даже не видели.

2
ответ дан 13 December 2019 в 22:14
поделиться

Я думаю, что подход SendKeys.Send ("{BS}"); никогда не будет работать (в любом порядке). Это связано с тем, что исходное событие нажатия / отпускания клавиши обрабатывается после публикации SendKeys.Send . Я думаю, вам следует как-то отменить событие нажатия / нажатия клавиши для символа, которого вы хотите удалить, прежде чем оно будет обработано целевой оконной процедурой (например, блокнотом).

1
ответ дан 13 December 2019 в 22:14
поделиться

Я получаю "a", потому что backspace отправлено сразу после "s" и удаляет символ "s". Как я могу предотвратить это?

ммм .....

не отправлять backspace сразу после отправки s?

if ((Keys)keyCode== Keys.A)
            {
                Sendkeys.Send("{BS}"); // Deletes the "A" (already sent)
                SendKeys.Send("s"); // Sends the "S"
            }
1
ответ дан 13 December 2019 в 22:14
поделиться

Вы пробовали переключить .Send ({BS}) на .Send ("s") ? А иначе можете уточнить?

0
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: