是否有一种简单的方法可以创建一个在后台运行并模拟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)
{
}
}
}
答案 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
}
}