我想在当前插入符号的屏幕上获得坐标(x,y)。
我的目标是找到在用户输入的任何地方添加自定义工具提示。
不仅在我的应用程序上,而且在所有打开的窗口中。
有办法吗?
答案 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,因此您需要重写所有内容才能使其正常工作