用findwindowex去找这个文本框的句柄,结果是0。
确认没有找错,应为上面的控件不多,也没有重名。我的想法是,能不能用先找到他父亲的句柄,然后用确定坐标的方法,来获得里面的文字。
想想而已,没有依据。大家有好的建议吗?谢了先!

解决方案 »

  1.   

    你可以看看这个,获得其它vb程序中的标签上的文本的程序:
    http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21018080.html
      

  2.   

    文本框应该有句柄的,你用Spy++看有没有句柄
      

  3.   

    EDIT窗口不可能没有句柄的,所以问题本身就不对。
    LZ用坐标的办法是可以找到EDIT的,之后就可以用WM_GETTEXT消息来取得内容了。
      

  4.   

    控件只要存在,一定有句柄,不然windows都用不了
      

  5.   

    //控件只要存在,一定有句柄,不然windows都用不了这句话不对,轻权控件就没有句柄,比如说form 2.0控件组里的textbox
      

  6.   

    我不同意暴风雨的看法,当然有句柄,只是它们用的就是窗体的句柄而已。比如LABEL,IMAGE等,实际上就是把内容写到FORM里面,VB只是把他们的区域给注册了一下。
      

  7.   

    //我不同意暴风雨的看法,当然有句柄,只是它们用的就是窗体的句柄而已。比如LABEL,IMAGE等,实际上就是把内容写到FORM里面,VB只是把他们的区域给注册了一下。晕,你这么说也可以,事实上我关注的是控件自身
      

  8.   

    怎么说喃  这个问题很有趣,  我也遇到过  在骗得QQ聊天窗口时   聊天信息的那个TextBox的的确确没有hwnd         我也想知道    看有没有高手
            帮你顶
      

  9.   

    嘿嘿 打错字了  
      在骗得QQ聊天窗口时     这一句改为   在用findwindowex  等函数
      

  10.   

    谁说QQ聊天窗口没有句柄。发送消息的窗口是个RICHEDIT,聊天记录是RichEdit20A。
      

  11.   

    用spy++看过啦,或者不能叫他文本框。
    我说的就是firefox的地址栏,你们自己去看看吧。
      

  12.   

    rainstormmaster(暴风雨 v2.0) 大哥给的链接要付费才能访问啊能不能直接贴出来呢?
      

  13.   

    你找个下载工具,把http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21018080.html这个页面down下来后再看
      

  14.   

    我用了flashget,下载了,可以还是要登陆了才能看。。
      

  15.   

    如果是lable之类的控件很难用常规方法得到文本。
    这种情况下可以试试复制该控件的屏幕显示画面,再进行ocr之类的文字识别不过这可不是一般的烦。
    更有甚者,直接用dx画输入框,那就更烦了。
      

  16.   

    //我用了flashget,下载了,可以还是要登陆了才能看。。晕了,我怎么直接就可以看,留下email,我给你发过去
    //我说的就是firefox的地址栏,你们自己去看看吧。我建议你看看firefox的SDK
      

  17.   

    我的email是[email protected],谢谢rainstormmaster(暴风雨 v2.0),真是好人啊。嗬嗬!
      

  18.   

    to  lsftest() ( ) 信誉:115 
    我曾看到一个抓图软件,可以抓取用户选择区域内的所有文字的
      

  19.   

    我用过,的确是那样,而且还有SDK的,不过,没仔细分析,就是忘了名字了
      

  20.   

    再次感谢rainstormmaster(暴风雨 v2.0)和所有热心人,我空下来立刻去研究你们提供的方法。
    帖子我先hold住了。
      

  21.   

    我也碰到过类似的情况,不过如果是"//我说的就是firefox的地址栏",你可以这样.将firefox最大化后:
    1.让地址栏得到焦点.
    SetCursorPos(785,63);//(785,63)为地址栏中一个点的坐标位置
    mouse_event(MOUSEEVENTF_LEFTDOWN,785,63,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,785,63,0,0);2.选择全部(CTRL+"A")
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event('A', MapVirtualKey('A', 0), 0, 0);
    keybd_event('A', MapVirtualKey('A', 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
    3.复制到剪切板(CRTL +"C")
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event('C', MapVirtualKey('C', 0), 0, 0);
    keybd_event('C', MapVirtualKey('C', 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
    4.显示剪切板的内容.
    if(OpenClipboard())
    {
        HANDLE hClip;
        char *pBuf;
        hClip=GetClipboardData(CF_TEXT);
        pBuf=(char*)GlobalLock(hClip);
        GlobalUnlock(hClip);
        MessageBox(pBuf);
        CloseClipboard();
    }
      

  22.   

    Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
    Private Const KEYEVENTF_KEYUP = &H2
    Private Const KEYEVENTF_KEYDOWN = &H0Private Sub Command1_Click()
        SetCursorPos 785, 63
        mouse_event MOUSEEVENTF_LEFTDOWN, 760, 63, 0, 0
        mouse_event MOUSEEVENTF_LEFTUP, 760, 63, 0, 0    keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), 0, 0
        keybd_event vbKeyA, MapVirtualKey(vbKeyA, 0), 0, 0
        keybd_event vbKeyA, MapVirtualKey(vbKeyA, 0), KEYEVENTF_KEYUP, 0
        keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), KEYEVENTF_KEYUP, 0    keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), 0, 0
        keybd_event vbKeyC, MapVirtualKey(vbKeyC, 0), 0, 0
        keybd_event vbKeyC, MapVirtualKey(vbKeyC, 0), KEYEVENTF_KEYUP, 0
        keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), KEYEVENTF_KEYUP, 0
        Me.Show
        MsgBox Clipboard.GetText(vbCFText)
    End Sub
      

  23.   

    对于Label,理论上可以使用“屏幕取词”技术来获得文本
    可是“屏幕取词”技术是通过拦截文本绘制API来实现的,用VB写拦截API程序太不方便了
      

  24.   

    由于Label控件是COM对象,所以应该可以利用COM技术来控制另一进程的Label但是关于这方面的资料根本找不到,我都找了好几年了
      

  25.   

    //对于Label,理论上可以使用“屏幕取词”技术来获得文本
    //可是“屏幕取词”技术是通过拦截文本绘制API来实现的,用VB写拦截API程序太不方便了
    着个方法我还是同意的,只要WINDOWS能画出来的文本,就一定有办法获取到。
    不过VB本身限制的缘故,也许楼主需要配合VC等可以写纯Dll的语言共同实现这一功能
      

  26.   

    ftp://[email protected]/
    这里有一个获得光标下的窗口的句柄的小程序试试看对你有没有帮助
    GetWindowText.exe
      

  27.   

    哈,记得有一个帖子里说过,拦截TextOut函数,再想办法把目标区域的内容让WINDOWS重画一下,就可以在TextOut的参数里得到目标区域的文本.这也是那些屏幕取词软件的基本原理.
      

  28.   

    //这里有一个获得光标下的窗口的句柄的小程序试试看对你有没有帮助
    //GetWindowText.exe从名字上来看就知道不行.LABEL这种控件是轻量控件,自身并没有独立句柄.那个程序应该就是用的SendMessage或GetWindowText这几个API的,它们没有句柄可就不行了.
      

  29.   

    如果是firefox的地址栏的话那就分析一下firefox的源代码吧。
      

  30.   

    我都已经搞定了怎么不加分?屏幕取词的看这个,很老的了.
    http://blog.joycode.com/yaodong/articles/25506.aspx
      

  31.   

    dtv_c() 的方法是可以获得文字。这种方法之前我也有想过。但是有两个明显缺点:
    1.文字被选定,但是实际需求文字一定不能被选定(变蓝)。
    2.鼠标的位置会跑来跑去。由于代码是在计时器里面执行的,不可能让鼠标老是跑。
      

  32.   

    myjian(小马---->现在有点郁闷了(因为穷)) ( ) 信誉:100  2006-1-22 22:14:24  得分: 0  
       
    哈,记得有一个帖子里说过,拦截TextOut函数,再想办法把目标区域的内容让WINDOWS重画一下,就可以在TextOut的参数里得到目标区域的文本.这也是那些屏幕取词软件的基本原理.-------------------------------似乎比较可行,我想可能从这里入手。
     
      

  33.   

    //你可以看看这个,获得其它vb程序中的标签上的文本的程序:
    //http://www.experts-//exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21018080.html这个只能截取VB6.0生成程序的Label文本,对于其他程序,如Dephli的同类控件,就没办法了吗?另外其他程序弹出的Msgbox中显示的文本内容也相当于一个Label,这个能不能截取到呢?