用findwindowex去找这个文本框的句柄,结果是0。
确认没有找错,应为上面的控件不多,也没有重名。我的想法是,能不能用先找到他父亲的句柄,然后用确定坐标的方法,来获得里面的文字。
想想而已,没有依据。大家有好的建议吗?谢了先!
确认没有找错,应为上面的控件不多,也没有重名。我的想法是,能不能用先找到他父亲的句柄,然后用确定坐标的方法,来获得里面的文字。
想想而已,没有依据。大家有好的建议吗?谢了先!
解决方案 »
- 求高效的取高字节VB6的函数
- TreeView 控件 中 节点显示顺序的问题 ??
- 冰天雪地赤裸跪地求高手解决datagrid字段求和问题?
- 大家好!我需要帮助!!!
- 【请问DriveListBox、 DirListBox、FileListBox三个控件组合成一个类似的资源浏览器时,有什么办法可以只显示*.bmp的文件?
- 在VB6.0当中如何声明API函数中的函数指针类型的参量?
- VB报表打印问题
- 为什么打包后不能执行了?哪位大哥帮我解决下
- VB6+access97不能同时更新太多的字段,急急急
- 怎样在vb中生成lotus能打开的文件?(急!)
- 急求:16进制字符串补位问题
- 如何取得Excel工作表中有数据或被修改过的最大行号和最大列号?
http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21018080.html
LZ用坐标的办法是可以找到EDIT的,之后就可以用WM_GETTEXT消息来取得内容了。
帮你顶
在骗得QQ聊天窗口时 这一句改为 在用findwindowex 等函数
我说的就是firefox的地址栏,你们自己去看看吧。
这种情况下可以试试复制该控件的屏幕显示画面,再进行ocr之类的文字识别不过这可不是一般的烦。
更有甚者,直接用dx画输入框,那就更烦了。
//我说的就是firefox的地址栏,你们自己去看看吧。我建议你看看firefox的SDK
我曾看到一个抓图软件,可以抓取用户选择区域内的所有文字的
帖子我先hold住了。
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();
}
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
可是“屏幕取词”技术是通过拦截文本绘制API来实现的,用VB写拦截API程序太不方便了
//可是“屏幕取词”技术是通过拦截文本绘制API来实现的,用VB写拦截API程序太不方便了
着个方法我还是同意的,只要WINDOWS能画出来的文本,就一定有办法获取到。
不过VB本身限制的缘故,也许楼主需要配合VC等可以写纯Dll的语言共同实现这一功能
这里有一个获得光标下的窗口的句柄的小程序试试看对你有没有帮助
GetWindowText.exe
//GetWindowText.exe从名字上来看就知道不行.LABEL这种控件是轻量控件,自身并没有独立句柄.那个程序应该就是用的SendMessage或GetWindowText这几个API的,它们没有句柄可就不行了.
http://blog.joycode.com/yaodong/articles/25506.aspx
1.文字被选定,但是实际需求文字一定不能被选定(变蓝)。
2.鼠标的位置会跑来跑去。由于代码是在计时器里面执行的,不可能让鼠标老是跑。
哈,记得有一个帖子里说过,拦截TextOut函数,再想办法把目标区域的内容让WINDOWS重画一下,就可以在TextOut的参数里得到目标区域的文本.这也是那些屏幕取词软件的基本原理.-------------------------------似乎比较可行,我想可能从这里入手。
//http://www.experts-//exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21018080.html这个只能截取VB6.0生成程序的Label文本,对于其他程序,如Dephli的同类控件,就没办法了吗?另外其他程序弹出的Msgbox中显示的文本内容也相当于一个Label,这个能不能截取到呢?