您希望检查剪贴板的代码始终运行。现在它只在按下按钮时对我有用。如何组织?
int i = 0;
if (e.KeyCode == Keys.A)
{
stroka = Clipboard.GetText();
for (i = 0; i < array.Length; i++)
{
if (array[i] == "")
{
array[i] = stroka;
break;
}
else if (array[9] != "")
{
DialogResult dr = MessageBox.Show("Ошибка. Буфер переполнен. Хотите очистить буфер ?","Предупреждение",MessageBoxButtons.OKCancel);
if (dr == DialogResult.OK)
{
for (i = 0; i < array.Length; i++)
{
array[i] = "";
}
}
break;
}
}
}
if (e.KeyCode == Keys.D0)
{
textBox3.Text = array[0];
}
if (e.KeyCode == Keys.D1)
{
textBox3.Text = array[1];
}
if (e.KeyCode == Keys.D2)
{
textBox3.Text = array[2];
}
if (e.KeyCode == Keys.D3)
{
textBox3.Text = array[3];
}
if (e.KeyCode == Keys.D4)
{
textBox3.Text = array[4];
}
if (e.KeyCode == Keys.D5)
{
textBox3.Text = array[5];
}
if (e.KeyCode == Keys.D6)
{
textBox3.Text = array[6];
}
if (e.KeyCode == Keys.D7)
{
textBox3.Text = array[7];
}
if (e.KeyCode == Keys.D8)
{
textBox3.Text = array[8];
}
if (e.KeyCode == Keys.D9)
{
textBox3.Text = array[9];
}
一些东西被复制到缓冲区,按下按钮 A 并将值从缓冲区输入到数组中,然后再次复制该值,按下 A 并将值复制到位置 i + 1 的数组。And I need this happen without pressing the A button. 它没有在无限循环中运行:程序根本没有启动。
当然,您可以在单独的线程中的某处运行无限循环,但在我看来,这样的解决方案至少是不正确的。Windows 提供了跟踪剪贴板变化的能力——也就是说,变化将被实时跟踪和处理。据我了解,您对此感兴趣,而不是
while (true):)Tom Archer 的一篇文章解释了如何在 WinForms 中设置跟踪。我将对“分步说明”部分进行简短的转录(包括翻译和代码中的一些更改)。
一
您需要调用 Win32 库中的几个函数 -
SetClipboardViewer、ChangeClipboardChain和SendMessage为了在 .NET 应用程序中执行此操作,您需要使用DllImport. 下面的示例将这些函数导入到 WinForms 应用程序中:2个
定义 一个类成员来保存剪贴板通知链中的当前第一个窗口:
3个
让我们调用函数
SetClipboardViewer。在示例中,它在表单的构造函数中被调用:四
让我们重新定义类内部的
frmMain方法WndProc。在该示例中,仅处理两条消息:WM_DRAWCLIPBOARD和WM_CHANGECBCHAIN。在处理 的代码中
WM_DRAWCLIPBOARD,调用了用户定义的方法DisplayClipboardData(),输出缓冲区的内容;然后将相同的消息传递到链中的下一个窗口。处理
WM_CHANGECBCHAIN检查以查看从缓冲区链中删除的窗口是否是下一个(相对于当前窗口)的代码。如果是,nextClipboardViewer则分配移除的窗口之后的窗口。protected override void WndProc(ref Message m)5个
Dispose最后,当 .NET Runtime 调用类方法时,窗口从缓冲区链中删除frmMain实际上,说明并没有描述方法
DisplayClipboardData。对我来说,它看起来像这样:也就是说,缓冲区中的文本仅显示在表单的文本字段中。在您的情况下,您需要插入数组处理。
为了以防万一,我发生的事情的完整清单:
另外,不要忘记在文件
ChangeClipboardChain(this.Handle, nextClipboardViewer);中的方法中添加一行DisposefrmMain.Designer.cs代码在 Win10 x64 上编译并运行良好。剪贴板中的文本在复制后立即插入到文本字段中,无需按其他按钮