C#下如何获取光标的位置并在光标后输入字符 5
我想在一个C#程序运行的时候获取光标的位置!不管这个光标是在程序内部还是外部都能在光标处输入文字,就像如果光标在记事本上就在记事本上输入,在word上就在Word上输入,...
我想在一个C#程序运行的时候获取光标的位置!不管这个光标是在程序内部还是外部都能在光标处输入文字,就像如果光标在记事本上就在记事本上输入,在word上就在Word上输入,在网页上就在网页上输入文字!关键是获取光标的位置。
展开
1个回答
展开全部
[DllImport("user32.dll", 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(textBox1.Handle, EM_LINEFROMCHAR, -1, 0);
////通过向文本框传递EM_GETSEL消息可以得到编辑控件中一段选定内容的起点与终点字符的个数
//int s = (int)SendMessage(textBox1.Handle, EM_GETSEL, 0, 0);
////通过向文本框传递EM_GETSEL消息可以得到每一行的第一个字符在全文中的字符序号
//int li = (int)SendMessage(textBox1.Handle, EM_LINEINDEX, -1, 0);
//int Col = (s & 0xffff) - li + 1;
StringBuilder currentLine = new StringBuilder(256);
SendMessage(textBox1.Handle, EM_GETLINE, Row, currentLine);
MessageBox.Show(currentLine.ToString());
}
可以试一下
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(textBox1.Handle, EM_LINEFROMCHAR, -1, 0);
////通过向文本框传递EM_GETSEL消息可以得到编辑控件中一段选定内容的起点与终点字符的个数
//int s = (int)SendMessage(textBox1.Handle, EM_GETSEL, 0, 0);
////通过向文本框传递EM_GETSEL消息可以得到每一行的第一个字符在全文中的字符序号
//int li = (int)SendMessage(textBox1.Handle, EM_LINEINDEX, -1, 0);
//int Col = (s & 0xffff) - li + 1;
StringBuilder currentLine = new StringBuilder(256);
SendMessage(textBox1.Handle, EM_GETLINE, Row, currentLine);
MessageBox.Show(currentLine.ToString());
}
可以试一下
更多追问追答
追问
你能把你的工程文件发给我吗,shiwei.12369@qq.com
谢谢
追答
把我发给你的代码直接写成一个方法 然后哪个文本框需要用的话调用这个方法然后扩展一下就好了呀,代码晚上发给你,现在在上班 嘿嘿
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询