SendMessage如何获取其他程序(非.Net)中标准Edit控件中的值

boyyao 2006-06-28 09:17:13

http://community.csdn.net/Expert/topic/4835/4835886.xml?temp=.1253321

大概内容
昨天断网。用GPRS发的。乱码了。在发一次。

Knight94(愚翁),谢谢。但是我试验了一下。GetWindowText似乎只能吧SetWindowText设置的文本Get出来。但是我用SetWindowText方法却又不能正常。或许内存中已经有了。但是显示是没有的
API.SetWindowText(hwnd_textbox2, "hahah中文测试");//这条执行后hwnd_textbox2句柄对应的EDIT框没显示任何东西。但是我用GetWindowText却能正确得到“hahah中文测试”
API.SendMessage(hwnd_textbox2,API.WM_SETTEXT,0,"中文测试");//这条执行后hwnd_textbox2句柄对应的EDIT框正确显示了"中文测试"。但是我用GetWindowText却不能正确得到"中文测试"。
不知道有上面方法解决么?
我的代码

API.SetWindowText(hwnd_textbox2, "hahah中文测试");
MessageBox.Show(GetText(hwnd_textbox2));
API.SendMessage(hwnd_textbox2,API.WM_SETTEXT,0,"中文测试");
MessageBox.Show(GetText(hwnd_textbox2));

public string GetText(IntPtr hWnd)
{
// Allocate correct string length first
int length = API.GetWindowTextLength(hWnd);
StringBuilder sb = new StringBuilder(length + 1);
API.GetWindowText(hWnd, sb, sb.Capacity);
return sb.ToString();
}

[DllImport("user32.dll")]
public static extern int SetWindowText(IntPtr hwnd, string lpString);
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);

[DllImport("user32.dll")]
public static extern int GetWindowTextLength(IntPtr hWnd);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage( IntPtr hwnd, int wMsg, int wParam,string lParam);

public const int WM_SETTEXT = 0xC;
...全文
632 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovevsnet 2006-07-02
  • 打赏
  • 举报
回复
如果楼主是在RICHEDIT或别的edit控件中得到指定的内容,哈哈用WM_GETTEXT恐怕也不行,先用
EM_SETSEL选择文本,然后发,WM_COPY,将选择的文本复制到粘贴板,在别的地方发WM_PASTE就行了
相信楼主的问题我能解决,我可以给QQ群发,也能从QQ对话框中得到别人的聊天内容
lovevsnet 2006-07-02
  • 打赏
  • 举报
回复
好的,已经发送到你信箱,已在代码中添加copyright信息
boyyao 2006-07-02
  • 打赏
  • 举报
回复
谢谢lovevsnet(编程一把手) 收到你的邮件了。
awindyday 2006-07-01
  • 打赏
  • 举报
回复
up,lovevsnet(编程一把手),能把源码也给我一份吗?
awindyday@gmail.com
lovevsnet 2006-07-01
  • 打赏
  • 举报
回复
[DllImport("User32.dll")]
public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam,StringBuilder lParam);
------------------------------------
调用:
StringBuilder sb = new StringBuilder(1024);
const int WM_GETTEXT=0x000D;
SendMessage(hWnd,WM_GETTEXT,sb.Capacity,sb);
我已经把源代码发到你的信箱了,你去看一下,不行的话,请再回复
对一般的文本框的内容是可以得到的
boyyao 2006-06-30
  • 打赏
  • 举报
回复
up
boyyao 2006-06-29
  • 打赏
  • 举报
回复
up
boyyao 2006-06-28
  • 打赏
  • 举报
回复
zahuifan(杂烩饭) 你好。我在上面的例子中用GetWindowText 只能获取用SetWindowText发进去的内容,但是SetWindowText的内容实际又不显示的。

用SendMessage发进去的内容可以正常显示,但是用GetWindowText 却无法获取。
我记得GetWindowText 也可以获取内容的。不知道如何操作?
zahuifan 2006-06-28
  • 打赏
  • 举报
回复
GetWindowText 只能在Win98中得到其它程序的文本框中的值。Win2000以上版本的Windows已经对此作了保护。要想在Win2000以上版本的Windows使用GetWindowText得到其它程序的文本框中的值,必须使用钩子技术.具体的就是将GetWindowText 函数写在一个独立的DLL中,然后将此DLL使用钩子函数注入目标进程.网上可以找到相关的文章.

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧