一个用delphi开发的程序有一个TRichView类的窗体(用spy++看的)
其显示的文本可能是只读的.现在希望用 C# 的Process启动一个进程 调用 该程序并去的该 TRichView类的窗体 中的文本.我用FindWindow ,FindWindowEx 已经找到该 窗体的 句柄.用SendMessage 发送 WM_GETTEXT 取得不到文本
EM_SETSEL 全选文本也选不到(想wm_copy)
发送按键{ctrl-A}等都不能取到其中的文本.(反正就是不能全选)
除了这些,哪位还知道其他的什么方法可以取 另外一个进程中 TRichXXX控件中的文本.
谁有高招?!
其显示的文本可能是只读的.现在希望用 C# 的Process启动一个进程 调用 该程序并去的该 TRichView类的窗体 中的文本.我用FindWindow ,FindWindowEx 已经找到该 窗体的 句柄.用SendMessage 发送 WM_GETTEXT 取得不到文本
EM_SETSEL 全选文本也选不到(想wm_copy)
发送按键{ctrl-A}等都不能取到其中的文本.(反正就是不能全选)
除了这些,哪位还知道其他的什么方法可以取 另外一个进程中 TRichXXX控件中的文本.
谁有高招?!
句柄找出来了,可是就是取不到其Text.
手动操作Ctrl+A可以全选,,,用SendMessage却不行.
取同一个程序的其他控件(TextBox)的就没有任何问题..
来了就是就绝招的了!
手动操作Ctrl+A可以全选,,,用SendMessage却不行.
....
PostMessage如何?
不过等会试试!
我试过 PostMessage 了 还是不行..
private void button1_Click(object sender, System.EventArgs e)
{
StringBuilder strB = new StringBuilder(100);
SendMessage(hWnd,WM_GETTEXT,100,strB);
string a = strB.ToString().Trim();
MessageBox.Show(a);
}
就是取不到该 TRichEdit 中的文本.
可是用SPY++ 监控该控件的信息 ,每按一次按钮 就有两条WM_GETTEXT 短信如下:<00001> xxxxxxx S WM_GETTEXT cchTextMax:100 lpszText:xxxxxx
<00002> xxxxxxx R WM_GETTEXT cchCopyied:0 lpszText: xxxxxxx ("所需要的字符串出现在这里")说明已经把字符从控件中取出,只是没有返回到C#程序中,看哪位老兄再出手相助!
public static extern int SendMessage(IntPtr hWnd,int wMsg,IntPtr wParam,StringBuilder lParam);
const int WM_GETTEXT=0x000D;
private void button1_Click(object sender, System.EventArgs e)
{
StringBuilder strB = new StringBuilder(100);
SendMessage(this.richTextBox1.Handle,WM_GETTEXT,new IntPtr(255),strB);
string a = strB.ToString().Trim();
MessageBox.Show(a);
}
TForm1 = class(TForm)
Memo1: TMemo;
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;Memo1内容:
Memo1
assdafasfasdf我尝试了,是可以拿到的. private void button1_Click(object sender, System.EventArgs e)
{
StringBuilder strB = new StringBuilder(100);
SendMessage((System.IntPtr)0x00020F54,WM_GETTEXT,new IntPtr(255), strB);
string a = strB.ToString().Trim();
MessageBox.Show(a);
}显示:
Memo1
assdafasfasdf