用于复制和粘贴的背景工具

时间:2011-11-08 10:57:37

标签: c# windows background copy paste

是否有一种简单的方法可以创建一个在后台运行并模拟CTRL + V键的工具?

例如:每当我按下F1按钮时,窗口都会将复制的文本粘贴到活动文本框中。

PS:抱歉STRG :(它是CTRL的德语版本


好的第二部分:

这种方式对我有用:

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)
    {

    } 


  }
}

此链接是必需的: A Simple C# Global Low Level Keyboard Hook

2 个答案:

答案 0 :(得分:1)

我曾创造过类似的东西。我附加了一个OnDataReceivedHandler来读取串口输入(读取EAN代码并将其写入聚焦文本框)。当用户按F1时,您的目标是获得活动。然后你打电话:

SendKeys.Send(data);

SendKeys是表单的一部分,所以不要忘记using System.Windows.Forms;

答案 1 :(得分:1)

一种选择是使用InputSimulator。它封装了引擎盖下的SendInput,但抽象出所有PInvoke调用和其他复杂性。它是DLL的一个下降(对于你的情况)应该只有一行代码。

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

下一步(取决于你要找的东西 - 全局到窗口而不是仅活动到窗体)将注册一个"热键"对于F1。

我建议您查看全局热键问题的一些答案:Best way to tackle global hotkey processing in c#?或此CodeProject文章:A Simple C# Global Low Level Keyboard Hook

如果您正在寻找在当前表单上处于活动状态的热键,您可以使用:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
       // Send Ctrl + V
    }
}