Фоновый инструмент для копирования и вставки - PullRequest
1 голос
/ 08 ноября 2011

Есть ли простой способ создать инструмент, который работает в фоновом режиме и имитирует клавишу CTRL + V?

Например: всякий раз, когда я нажимаю кнопку F1, окна вставляют скопированный текст в активное текстовое поле.,

PS: извините за STRG :( это немецкая версия CTRL


Ok, часть II:

Этот способ работает для меня:

private void Form1_Load(object sender, EventArgs e)
    {
        this.KeyPreview = true;
        this.KeyDown += new System.Windows.Forms.KeyEventHandler(KeyEvent);
    }

    private void KeyEvent(object sender, KeyEventArgs e) //Keyup Event 
    {
        if (e.KeyCode == Keys.F4)
        {
            SendKeys.Send("^(V)");
        }
    }

Но это работает только в моем приложении. Я также не хочу, чтобы моя программа делала это в других приложениях. Например: когда я нажимаю [WindowsKey] + [R], открывается «окно продолжения», если я щелкаю f4тогда моя программа должна смоделировать [CTRL] + [V] и вставить скопированный текст. Любая помощь?


РЕШЕНИЕ:

Я наконец понял, как это работает для меня:

using Utilities;

namespace F4paste
{
public partial class Form1 : Form
{
    globalKeyboardHook gkh = new globalKeyboardHook();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        gkh.HookedKeys.Add(Keys.F4);
        gkh.KeyDown += new KeyEventHandler(gkh_KeyDown);
    }

    void gkh_KeyDown(object sender, KeyEventArgs e)
    {
        SendKeys.Send("^(V)");
        e.Handled = true;
    }

    private void label1_Click(object sender, EventArgs e)
    {

    } 


  }
}

Ссылка обязательна: Простая глобальная низкоуровневая клавиатура C # Hook

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Одним из вариантов будет использование InputSimulator .Он скрывает SendInput, но удаляет все вызовы PInvoke и другие сложности.Это капля в DLL, которая (для вашей ситуации) должна содержать только одну строку кода.

InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C); 

Следующий шаг (в зависимости от того, что вы ищете - глобальный для окон или активный только для формы)было бы зарегистрировать «горячую клавишу» для F1.

Я рекомендую проверить некоторые ответы на этот вопрос для глобальной горячей клавиши: Лучший способ справиться с глобальной обработкой горячей клавиши в c #? или в этой статье CodeProject: A SimpleC # Global Низкоуровневая клавиатура Hook

Если вы ищете горячую клавишу, активную в текущей форме, вы можете использовать:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
       // Send Ctrl + V
    }
}
1 голос
/ 08 ноября 2011

Я когда-то создал нечто подобное.Я прикреплял OnDataReceivedHandler для чтения ввода из последовательного порта (чтение кода EAN и запись его в текстовое поле с фокусом).Ваша цель - получить событие, когда пользователь нажмет F1.Тогда вы просто звоните:

SendKeys.Send(data);

SendKeys и часть форм, так что не забывайте о using System.Windows.Forms;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...