C#程序将文本从剪贴板粘贴到鼠标单击的任何位置

时间:2013-07-03 10:26:59

标签: c# winforms clipboard

我想将文本框中的文本或C#windows窗体应用程序中的富文本框粘贴到表单的外侧,例如:

//on a button click event
textbox1.text=Clipboard.SetText();  // this will set text to clipboard 

现在我想要点击Firefox或Google Chrome的地址栏来获取与我在Windows窗体应用程序中输入相同的文本,因为我可以通过CTRL + V来完成,但我想要一个C#程序来执行此操作我点击地址栏或重命名文件夹时从剪贴板中获取文字。

2 个答案:

答案 0 :(得分:1)

你可以打开一些Windows残疾设置,如果拖动或粘贴太尴尬。

如果您真的想要实现这一点,则需要在鼠标上使用全局钩子,以便从应用程序外部接收鼠标事件。 See hereperhaps here

然后你有问题,你想粘贴在任何地方或只是在地址栏中。首先,你必须定义一个地址栏窗口是什么,如果那是焦点,那么就要计算出来。

它付出了很多努力,而且这种行为并不是特别可取。如果你真的想要这个,请扩展你的问题并提高其可读性,以便这篇文章对未来的访问者有用。

答案 1 :(得分:0)

这是完全未经测试的,我从来没有在C#中使用过这些DLL调用,但希望它能解决这个问题,或者至少接近......

public class Win32
{
   public const uint WM_SETTEXT = 0x000c;

   [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
   public static extern IntPtr SendMessage(HandleRef hWnd, uint Msg, IntPtr wParam, string lParam);

   [DllImport("user32.dll")]
   static extern IntPtr WindowFromPoint(int xPoint, int yPoint);
}

代码中的其他地方......

IntPtr theHandle = WindowFromPoint(Cursor.Position.X, Cursor.Position.Y);

if (theHandle != null)
{
   long res = Win32.SendMessage(theHandle, WM_SETTEXT, IntPtr.Zero, Clipboard.GetText());
}

注意:我不完全确定WindowFromPiont将获得另一个窗口的子控件(即实际文本框)的句柄,而不是窗口本身的句柄。您可能必须通过光标位置找到子项。不幸的是,很久以来我已经做过类似的事了。

此外,如果您希望通过获取窗口句柄获得一位发烧友,请参阅此问题:getting active window name based on mouse clicks in c#