C#下如何获取光标的位置并在光标处输入字符

C#下如何获取光标的位置并在光标处输入字符,第1张

有两种方式:

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#下如何获取光标的位置并在光标后输入字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9310183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存