C# 用于复制的后台工具&;粘贴

C# 用于复制的后台工具&;粘贴,c#,windows,background,copy,paste,C#,Windows,Background,Copy,Paste,有没有一种简单的方法来创建一个在后台工作并模拟CTRL+V键的工具 例如:每当我按下F1按钮时,windows都会将复制的文本粘贴到活动文本框中 PS:对不起,这是CTRL的德语版本 好的,第二部分: 这种方法对我很有效: private void Form1_Load(object sender, EventArgs e) { this.KeyPreview = true; this.KeyDown += new System.Windows.Form

有没有一种简单的方法来创建一个在后台工作并模拟CTRL+V键的工具

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

PS:对不起,这是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)");
        }
    }
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)
    {

    } 


  }
}
但它只在我的应用程序中起作用。我也不希望我的程序在其他应用程序中起作用。 例如:当我按[WindowsKey]+[R]时,“继续窗口”打开,如果我点击f4,那么我的程序应该模拟[CTRL]+[V]并粘贴复制的文本。有帮助吗


解决方案:

我终于得到了它,它为我工作的方式:

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

    } 


  }
}
此链接是必需的:

我曾经创建过一个类似的东西。我附加了一个OnDataReceivedHandler从串行端口读取输入(读取EAN代码并将其写入聚焦文本框)。您的目标是在用户按F1时获取事件。然后您只需调用:

SendKeys.Send(data);

SendKeys是表单的一部分,所以别忘了使用System.Windows.Forms;

一个选项是使用。它将SendInput包装在引擎盖下,但抽象掉了所有PInvoke调用和其他复杂性。它是一个内嵌式DLL(针对您的情况),应该只包含一行代码

InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C); 
下一步(取决于您要查找的内容-windows全局还是仅表单活动)是为F1注册“热键”

我建议查看一些关于这个问题的答案,以获得一个全局热键:或这篇CodeProject文章:

如果要查找当前表单上处于活动状态的热键,可以使用:

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

是否要在应用程序中或在每个打开的应用程序中模拟CTRL+V?对于未来的读者:我在Windows 7计算机上所做的SendKeys测试在2/4计算机上崩溃,没有任何提示或调试信息。请使用SendInput、SendMessage、PostMessage、InputSimulator库,但不要使用SendKeys。