0

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

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

现在我想当我单击 Firefox 或 Google chrome 的地址栏时获得与我在 Windows 窗体应用程序中键入的文本相同的文本,因为我可以通过 CTRL+V 来完成,但我想要一个 C# 程序为我这样做并得到当我单击地址栏或重命名文件夹时,剪贴板中的文本。

4

2 回答 2

1

如果拖动或粘贴太尴尬,您可以打开一些 Windows 禁用设置。

如果你真的想实现这个,你需要一个鼠标上的全局钩子,这样你就可以从应用程序外部接收鼠标事件。请参见此处此处

然后你有一个问题,你想粘贴在任何地方还是只是在地址栏中。首先,您必须定义地址栏窗口是什么,并确定它是否具有焦点。

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

于 2013-07-03T10:40:18.113 回答
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#

于 2013-07-03T11:04:39.700 回答