11 个解决方案
#1
在你需要获取光标的控件上做设定,控件.focus();让其获得焦点
#2
要输入 你总在有个什么动作再输入吧
在 click事件的处理函数里,有个参数MouseEventArgs e e.X,e.y就是坐标,new一个textbox,然后textbox.location 设置成鼠标的坐标就可以了 输入完后销毁它
在 click事件的处理函数里,有个参数MouseEventArgs e e.X,e.y就是坐标,new一个textbox,然后textbox.location 设置成鼠标的坐标就可以了 输入完后销毁它
#3
如我在一个notepad中,我要取到notepad中光标的位置,然后再光标处插入数据,这样的。
#4
你要获得别的程序窗口的鼠标位置? 那要用到WINDOWS API接口,这个C#不熟悉,VC到时用过,做一个全局钩子就可以了
#5
textbox1.Cursor.HotSpot
#6
只是你的程序还是任何程序都可以?
自己程序就可以获得activeform然后找到焦点所在的控件,判断是否是textbox/richtextbox,如果不是则忽略,反之把新的字符串附加到text属性后面。
如果是其他的程序窗体,首先用GetForegroundWindow获得激活的窗体,然后获得焦点的控件,使用SendMessage发送WM_GETTEXT获取当前文本,使用WM_SETTEXT设置文本。
自己程序就可以获得activeform然后找到焦点所在的控件,判断是否是textbox/richtextbox,如果不是则忽略,反之把新的字符串附加到text属性后面。
如果是其他的程序窗体,首先用GetForegroundWindow获得激活的窗体,然后获得焦点的控件,使用SendMessage发送WM_GETTEXT获取当前文本,使用WM_SETTEXT设置文本。
#7
用在在其他程序窗体上,有没有现成的例子呢,给个谢谢
#8
用GetForegroundWindow找到焦点窗体,然后GetWindowThreadProcessId和GetGUIThreadInfo找到含有光标的控件句柄,即GUITHREADINFO中的hwndCaret,然后用该句柄发送消息。
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);
[StructLayout(LayoutKind.Sequential)]
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 RECT rectCaret;
}
public static GUITHREADINFO? GetGuiThreadInfo(IntPtr hwnd)
{
if (hwnd != IntPtr.Zero)
{
//Mbox.Info(GetTitle(hwnd), "O");
uint threadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero);
GUITHREADINFO guiThreadInfo = new GUITHREADINFO();
guiThreadInfo.cbSize = Marshal.SizeOf(guiThreadInfo);
if (GetGUIThreadInfo(threadId, ref guiThreadInfo) == false)
return null;
return guiThreadInfo;
}
return null;
}
public static void SendText(string text)
{
IntPtr hwnd = GetForegroundWindow();
if (String.IsNullOrEmpty(text))
return;
Hwindow.GUITHREADINFO? guiInfo = Hwindow.GetGuiThreadInfo(hwnd);
if (guiInfo != null)
{
IntPtr ptr = (IntPtr)guiInfo.Value.hwndCaret;
if (ptr != IntPtr.Zero)
{
for (int i = 0; i < text.Length; i++)
{
SendMessage(ptr, Message.WM_CHAR, (IntPtr)(int)text[i], IntPtr.Zero);
}
}
}
}
#9
public void guangbiao(int index)//处理光标跟随以及光标下移的问题
{
++index;
this.textBox1.Focus();//给richTextBox焦点
this.textBox1.Select(index, 0);
this.textBox1.ScrollToCaret(); //滚动到控件光标处
}
我写的,从选定光标之后开始输入,
{
++index;
this.textBox1.Focus();//给richTextBox焦点
this.textBox1.Select(index, 0);
this.textBox1.ScrollToCaret(); //滚动到控件光标处
}
我写的,从选定光标之后开始输入,
#10
SendKeys.SendWait(想输入的字符 + "{ENTER}"); //换行输出
SendKeys.SendWait(想输入的字符+"{TAB}"); //间隔输出
SendKeys.SendWait(想输入的字符+"{TAB}"); //间隔输出
#11
sendinput,光标在哪哪输入
#1
在你需要获取光标的控件上做设定,控件.focus();让其获得焦点
#2
要输入 你总在有个什么动作再输入吧
在 click事件的处理函数里,有个参数MouseEventArgs e e.X,e.y就是坐标,new一个textbox,然后textbox.location 设置成鼠标的坐标就可以了 输入完后销毁它
在 click事件的处理函数里,有个参数MouseEventArgs e e.X,e.y就是坐标,new一个textbox,然后textbox.location 设置成鼠标的坐标就可以了 输入完后销毁它
#3
如我在一个notepad中,我要取到notepad中光标的位置,然后再光标处插入数据,这样的。
#4
你要获得别的程序窗口的鼠标位置? 那要用到WINDOWS API接口,这个C#不熟悉,VC到时用过,做一个全局钩子就可以了
#5
textbox1.Cursor.HotSpot
#6
只是你的程序还是任何程序都可以?
自己程序就可以获得activeform然后找到焦点所在的控件,判断是否是textbox/richtextbox,如果不是则忽略,反之把新的字符串附加到text属性后面。
如果是其他的程序窗体,首先用GetForegroundWindow获得激活的窗体,然后获得焦点的控件,使用SendMessage发送WM_GETTEXT获取当前文本,使用WM_SETTEXT设置文本。
自己程序就可以获得activeform然后找到焦点所在的控件,判断是否是textbox/richtextbox,如果不是则忽略,反之把新的字符串附加到text属性后面。
如果是其他的程序窗体,首先用GetForegroundWindow获得激活的窗体,然后获得焦点的控件,使用SendMessage发送WM_GETTEXT获取当前文本,使用WM_SETTEXT设置文本。
#7
用在在其他程序窗体上,有没有现成的例子呢,给个谢谢
#8
用GetForegroundWindow找到焦点窗体,然后GetWindowThreadProcessId和GetGUIThreadInfo找到含有光标的控件句柄,即GUITHREADINFO中的hwndCaret,然后用该句柄发送消息。
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);
[StructLayout(LayoutKind.Sequential)]
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 RECT rectCaret;
}
public static GUITHREADINFO? GetGuiThreadInfo(IntPtr hwnd)
{
if (hwnd != IntPtr.Zero)
{
//Mbox.Info(GetTitle(hwnd), "O");
uint threadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero);
GUITHREADINFO guiThreadInfo = new GUITHREADINFO();
guiThreadInfo.cbSize = Marshal.SizeOf(guiThreadInfo);
if (GetGUIThreadInfo(threadId, ref guiThreadInfo) == false)
return null;
return guiThreadInfo;
}
return null;
}
public static void SendText(string text)
{
IntPtr hwnd = GetForegroundWindow();
if (String.IsNullOrEmpty(text))
return;
Hwindow.GUITHREADINFO? guiInfo = Hwindow.GetGuiThreadInfo(hwnd);
if (guiInfo != null)
{
IntPtr ptr = (IntPtr)guiInfo.Value.hwndCaret;
if (ptr != IntPtr.Zero)
{
for (int i = 0; i < text.Length; i++)
{
SendMessage(ptr, Message.WM_CHAR, (IntPtr)(int)text[i], IntPtr.Zero);
}
}
}
}
#9
public void guangbiao(int index)//处理光标跟随以及光标下移的问题
{
++index;
this.textBox1.Focus();//给richTextBox焦点
this.textBox1.Select(index, 0);
this.textBox1.ScrollToCaret(); //滚动到控件光标处
}
我写的,从选定光标之后开始输入,
{
++index;
this.textBox1.Focus();//给richTextBox焦点
this.textBox1.Select(index, 0);
this.textBox1.ScrollToCaret(); //滚动到控件光标处
}
我写的,从选定光标之后开始输入,
#10
SendKeys.SendWait(想输入的字符 + "{ENTER}"); //换行输出
SendKeys.SendWait(想输入的字符+"{TAB}"); //间隔输出
SendKeys.SendWait(想输入的字符+"{TAB}"); //间隔输出
#11
sendinput,光标在哪哪输入