如何在屏幕上输入插入符号位置?

时间:2015-07-28 12:48:12

标签: windows winforms

我想在当前插入符号的屏幕上获得坐标(x,y)。

我的目标是找到在用户输入的任何地方添加自定义工具提示。

不仅在我的应用程序上,而且在所有打开的窗口中。

有办法吗?

2 个答案:

答案 0 :(得分:1)

我认为知道主动控件就足够了 - 用户当前具有焦点的位置,以及键盘光标:

Form.ActiveForm.ActiveControl

如果您需要任何地方获取信息,而不仅仅是在您的应用程序中,您需要下拉到本机P / Invokes:

[DllImport("user32.dll")]
static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);

public struct GUITHREADINFO
{
  public int cbSize;
  public int flags;
  public IntPtr hwndActive;
  public IntPtr hwndFocus;
  public IntPtr hwndCapture;
  public IntPtr hwndMenuOwner;
  public IntPtr hwndMoveSize;
  public IntPtr hwndCaret;
  public System.Drawing.Rectangle rcCaret;
}

[DllImport("user32.dll")]
static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint);

public void Main()
{
  GUITHREADINFO gti = default(GUITHREADINFO);
  gti.cbSize = Marshal.SizeOf(typeof(GUITHREADINFO));

  if (!GetGUIThreadInfo(0, ref gti)) return;

  Console.WriteLine(gti.rcCaret); // The position of the caret in the parent, 
                                  // if the active control is a text box or similar

  var point = gti.rcCaret.Location;
  if (!ClientToScreen(gti.hwndCaret, ref point)) return;

  Console.WriteLine(point); // The position of the caret in screen-coördinates
}

答案 1 :(得分:-2)

好的,您可以使用https://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.caretposition(v=vs.110).aspx 来自PresentationFramework。这将是另一种类型的WindowsForms,因此您需要重写所有内容才能使其正常工作