朋友写了一个WINSPY,无法获得有的密码框的密码,估计是重写了TextBox,我也写了一个TextBoxEx:
public class TextBoxEx:System.Windows.Forms.TextBox
{
public const int WM_GETTEXT=0x000d;
public TextBoxEx()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
protected override void WndProc(ref Message m)
{
if(m.Msg==WM_GETTEXT)return;
base.WndProc (ref m);
}
这样用SendMessage(hWnd,WM_GETTEXT,sb.Capacity,sb);//StringBuilder sb = new StringBuilder(1024);
无法获得文本框的Text,WM_GETTEXT被截获了
请问还有别的方法可以获得那个TextBoxEx的文本吗?
比如发送别的消息,如何反截获呢

解决方案 »

  1.   

    UpUp!
    如果是.net写的应用程序,可以通过FindWindow,找到那个窗体句柄,Form.FromHandle()得到窗体,再用反射找到那个文本框的句柄,进尔可以直接取其.Text尔!
      

  2.   

    如果不是重写了WndProc
    没有戴获wm_gettext的话,那没问题的,就是因为
    if(m.Msg==WM_GETTEXT)return;
    就得不到文本了
    还有如果在不同进程中,Form.FromHandle()恐怕不行吧
    我用Control.FromHandle()得不到不同进程中的控件
      

  3.   

    CSDN上的高手多哪里去了?
    怎么多没空帮我解决啊,如果不能通过发送消息获取文本框内容,那能不能用ReadProcessMemory将另一进程的TextBox(已知句柄hWnd)的内容读到本进程的内存变量中呢?
      

  4.   

    这个问题问错地方了,应该放到VC++里面更合适,一样用API不必非看C#的code
      

  5.   

    谢谢大家,我发现有的软件的文本框不是我想的那么简单
    比如QQ的密码框,我用WINSPY得到:
    窗口句柄:656328 标题:  类名:Static
    有个游戏的密码框:
    窗口句柄:66904 标题:  类名:Edit
    以上标题部份为空,即得不到文本框的内容
    我是先得到文本框的句柄,然后发送WM_GETTEXT消息的,为什么不行,该如何做?
    QQ的密码框连选择内容也不行,那游戏的密码框可以选择但按鼠标右键出现的菜单中的“复制”为灰色
    说明屏蔽了消息WM_GETTEXT,但我改用发WM_COPY消息(当然先发EM_SETPASSWORDCHAR,清除passwordchar),粘贴板中还是得不到,郁闷
    高手帮帮忙啊
      

  6.   

    QQ的就不用想了,VC也不行,它将消息处理掉了。只能做用于一般的textbox
      

  7.   

    如果Edit屏蔽了消息,那能不能用ReadProcessMemory从对方进程中读取呢?
    我把问题改一下:
    1.如何用ReadProcessMemory读取另一进程(比如记事本)中Edit的内容
    2.如何用WriteProcessMemory向记事本的Edit写内容呢?
    3.可以用FindwindowEx获得记事本和Edit的句柄
    用GetWindowThreadProcessId得到记事本进程id,OpenProcess(...)得到记事本进程的句柄,并赋予全部权限
    那WriteProcessMemory( hProcess, lpRemoteBuffer, ref buf,len,IntPtr.Zero );中的
    lpRemoteBuffer呢,不会就是Edit的句柄吧(我想应该是Edit在进程中的地址,我用句柄试了好象不行)
      

  8.   

    to dk385(大康):
    线程注入应该可行,可用C#怎么写?
    具体点,最好有C#例子
    别的语言的倒是可以找到好多,C#不易实现啊
    期待高手出现帮我解决:
    1.如何用ReadProcessMemory读取另一进程(比如记事本)中Edit的内容
    2.如何用WriteProcessMemory向记事本的Edit写内容呢?
    3.可以用FindwindowEx获得记事本和Edit的句柄
    用GetWindowThreadProcessId得到记事本进程id,OpenProcess(...)得到记事本进程的句柄,并赋予全部权限
    那WriteProcessMemory( hProcess, lpRemoteBuffer, ref buf,len,IntPtr.Zero );中的
    lpRemoteBuffer呢,不会就是Edit的句柄吧(我想应该是Edit在进程中的地址,我用句柄试了好象不行)
      

  9.   

    看看这个: http://www.codeproject.com/threads/winspy.asp
      

  10.   

    to  dk385(大康) 
    你这个链接我早就知道
    是线程插入的三种方法
    好象是用delphi写的吧,改写成C#很难,你写过吗,如果写过请给我代码行不?
      

  11.   

    用C#我没写过,单是用C#的话确是很难实现。不过写这类东西还是用VC++比较合适。关注楼下见解
      

  12.   

    怎么CSDN上高手都不屑一顾呢?
    谁来讲一讲内存分析的也行