Вопрос по c# – C # SendKeys.Send

5

Я работаю над проблемой с использованием метода C # SendKeys.Send. Я пытаюсь заменить клавиши клавиатуры другими клавишами, например, когда я нажимаю & quot; a & quot; на клавиатуре я хочу, чтобы эта клавиша была "s" например, когда я делаю это в моем коде:

<code>if ((Keys)keyCode== Keys.A)
{                    
    SendKeys.Send("s");                    

}
</code>

Прямо сейчас я получаю только "sa" символ печатается в моем блокноте, но вместо печати "sa" Мне нужно получить только & quot; s & quot; символ в этом случае, потому что, когда я нажимаю "а" на моей клавиатуре "а" должен быть заменен на "s".

Я попытался удалить последний символ, добавив эту строку:

<code>SendKeys.Send("{BS}");
</code>

Но все, что я получил, это "s" символ удален и "a" персонаж был там.

Как я могу предотвратить это?

Нет, это для проекта, который мне поручено сделать. На моем родном языке у нас есть некоторые специальные символы & quot; & xEB; & quot; и & quot; & xE7; & quot; который я должен переназначить «[» и & quot;] & quot; ключи, соответствующие специальным символам, которые я вам показал, для того, чтобы люди писали на нашем родном албанском языке, чтобы ключи были переназначены. milot
Это для шутки? Chad Ruppert

Ваш Ответ

8   ответов
2

SendKeys.Send("{BS}");

SendKeys.Send("S");

РЕДАКТИРОВАТЬ (после обновления вопроса):

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

2

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

1

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

1

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

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

Error: User Rate Limit Exceeded milot
0

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

Error: User Rate Limit Exceeded milot
1

sent immediately after "s" and it deletes the "s" character. How can I prevent this from happening?

ммм .....

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

if ((Keys)keyCode== Keys.A)
            {
                Sendkeys.Send("{BS}"); // Deletes the "A" (already sent)
                SendKeys.Send("s"); // Sends the "S"
            }
Error: User Rate Limit Exceeded milot
2

но если вы используете это с текстовым полем, вы могли бы:

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");
    }
}

Или, если это не для использования только с текстовым полем, то не можете ли вы просто отменить возврат и возврат клавиш?

if ((Keys)keyCode== Keys.A)
{                    
    SendKeys.Send("{BS}"); // remove A
    SendKeys.Send("s");    // add S
}
Error: User Rate Limit Exceeded milot
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded milot
0

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

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