有两种方式:
1、直接向窗口发消息,获取窗体句柄,然后SendMessage,这种方法麻烦在分析窗口句柄,如果你只向某一个程序写的话这种是比较通用的,如果换个程序的话就需要重新找句柄,但是窗体位置的变化对你没有影响,因为直接通过句柄+消息;
2、SetFoucus ,设置光标,然后激活窗体,写入,这种需要先知道窗体的位置,窗体位置变了就没用了。
你看下外挂编程吧,这是比较初级的,一开始就有介绍
首先要实现输入内容不同颜色是可以实现的,比如使用一个可编辑iframe就可以了,textarea是不行的。
至于功能的实现,我觉得不需要获取结束位置。
首先检测鼠标事件,如果有点击编辑区的某个位置,你就获取当前鼠标的落点,然后用innerHTML加入一对标签,<span class="color:#XXXXXX"></span>,所有输入内容都在这个span中间。效果就是输入的所有文字都变色。
不知道楼主明白没?
[DllImport("user32dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
[DllImport("user32 ")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
private void button2_Click(object sender, EventArgs e)
{
int EM_LINEINDEX = 0xBB;
int EM_LINEFROMCHAR = 0xC9;
int EM_GETSEL = 0xB0;
int EM_GETLINE = 0xC4;
//通过API完成很简单的
//通过向文本框传递EM_LINEFROMCHAR消息可以得到光标所在的行数
int Row = (int)SendMessage(textBox1Handle, EM_LINEFROMCHAR, -1, 0);
////通过向文本框传递EM_GETSEL消息可以得到编辑控件中一段选定内容的起点与终点字符的个数
//int s = (int)SendMessage(textBox1Handle, EM_GETSEL, 0, 0);
////通过向文本框传递EM_GETSEL消息可以得到每一行的第一个字符在全文中的字符序号
//int li = (int)SendMessage(textBox1Handle, EM_LINEINDEX, -1, 0);
//int Col = (s & 0xffff) - li + 1;
StringBuilder currentLine = new StringBuilder(256);
SendMessage(textBox1Handle, EM_GETLINE, Row, currentLine);
MessageBoxShow(currentLineToString());
}
可以试一下
[DllImport("user32dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, StringBuilder lParam);
[DllImport("user32 ")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
private void button2_Click(object sender, EventArgs e)
{
int EM_LINEINDEX = 0xBB;
int EM_LINEFROMCHAR = 0xC9;
int EM_GETSEL = 0xB0;
int EM_GETLINE = 0xC4;
//通过API完成很简单的
//通过向文本框传递EM_LINEFROMCHAR消息可以得到光标所在的行数
int Row = (int)SendMessage(textBox1Handle, EM_LINEFROMCHAR, -1, 0);
////通过向文本框传递EM_GETSEL消息可以得到编辑控件中一段选定内容的起点与终点字符的个数
//int s = (int)SendMessage(textBox1Handle, EM_GETSEL, 0, 0);
////通过向文本框传递EM_GETSEL消息可以得到每一行的第一个字符在全文中的字符序号
//int li = (int)SendMessage(textBox1Handle, EM_LINEINDEX, -1, 0);
//int Col = (s & 0xffff) - li + 1;
StringBuilder currentLine = new StringBuilder(256);
SendMessage(textBox1Handle, EM_GETLINE, Row, currentLine);
MessageBoxShow(currentLineToString());
}
this指针存放在主线程的堆栈中,传递到子线程的指针访问的其实是子线程的堆栈,当然不可能获得正确值,其实你直接传递光标坐标即可。在子线程对界面进行处理,会导致线程频繁切换,反而影响效率。
以上就是关于C#下如何获取光标的位置并在光标处输入字符全部的内容,包括:C#下如何获取光标的位置并在光标处输入字符、js怎样获取可编辑div中光标的位置、C#下如何获取光标的位置并在光标后输入字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)