【问题标题】:Background tool for copy&paste复制粘贴的背景工具
【发布时间】:2011-11-08 10:57:36
【问题描述】:

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

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

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

【问题讨论】:

  • 您想在您的应用程序中还是在每个打开的应用程序中模拟 CTRL+V?
  • 对于未来的读者:我在装有 Windows 7 的计算机上进行的 SendKeys 测试在没有任何提示或调试信息的情况下在 2/4 计算机上崩溃。使用 SendInput、SendMessage、PostMessage、InputSimulator 库,除了 SendKeys。

标签: c# windows background copy paste


【解决方案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
    }
}

【讨论】:

    【解决方案2】:

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

    SendKeys.Send(data);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多