如何用VB获取屏幕信息在有些软件里当鼠标移到某单词上,其注释就会显示单词的中文解释.这样的软件是如何制作的呢?下面我就介绍以下获取鼠标所在单词的方法,至于中文结实要关系到数据库及字
如何用VB获取屏幕信息
在有些软件里当鼠标移到某单词上,其注释就会显示单词的中文解释.这样的软件是如何制作的呢?下面我就介绍以下获取鼠标所在单词的方法,至于中文结实要关系到数据库及字库问题在此我不做解释.
首先建立新工程,在FORM上添加一个TEXT文本框.
声明SendMessage函数.
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const EM_CHARFORMPOS=HD7注释:在API浏览器里无此值请自己加上.
自定义过程:
Private Sub Text1_MouseDown(Button As Intege,Shift As Integer,x As Single, y As Single)
注释:获取鼠标所点的是第几行第几个字符
Dim pos As Long,Lc As Long
Dim Line As Integer,CharPos As Integer
x=x/Screen.TwipsPerPixelX
y=y/Screen.TwipsperPixelY
pos=x+y*65536
Lc=SendMessage(Text1.hwnd,EM_CHARFROMPOS,0,ByVal pos)
Line=Lc65536 注释:第几行
CharPos=Lc MOD 65536 注释:第几个字符
End Sub
注释:接下来才是真正的读取函数
Function GetWord(txt As TextBox,pos As Integer) As String
Dim bArr()As Byte,pos1 As Integer,pos2 As Integer, i As Integer
bArr=StrConv(txt.Text,vbFromUnicode)注释:转换成Byte数组
pos1=0:pos2=UBound(bArr)
注释:向前搜索分格符的位置
For i=pos-1 To 0 Step -1
If IsDelimiter(bArr(i)) Then
pos1=i+1
Exit For
End If
Next
注释:向后搜寻分隔符字符的位置
For i=pos To UBound(bArr)
If IsDelimiter(bArr(i)) Then
pos2=i-1
Exit For
End If
Next
注释:截取pos1-pos2之间的字符,以构成一个单词
If pos2pos1 Then
ReDim bArr2(pos2-pos1) As Byte
For i=pos1 To Pos2
bArr2(i-pos1)=bArr(i)
Next
GetWord=StrConv(bArr2,vbUnicode)
Else
GetWord=""
End If
End Function
注释:IsDelimiter函数
Functon IsDelimiter(ByVal Char As Byte) As Boolean
Dim S As String
S=Chr(Char)
IsDelimiter=False
If S=" " Or S="," Or S="." Or S="?" Or S="vbCr Or S=vbLf Then
IsDelimiter=True
End If
End Function
vb 屏幕取词
代码没错
你复制别人代码要注意回车
你下载了XdictGrb.dll后
在”工程”>”引用”>选择词霸的”XdictGrb.dll”
Option Explicit
Implements IXDictGrabSink
Private gp As GrabProxy
Private Sub Form_Load()
Set gp = New GrabProxy
With gp
.GrabEnabled = True '是否有效
.GrabInterval = 30 '指定抓取时间间隔
.GrabMode = XDictGrabMouse '模式(鼠标是否加按键)
.AdviseGrab Me '接口指向自身
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set gp = Nothing
End Sub
Private Function IXDictGrabSink_QueryWord(ByVal WordString As String, ByVal lCursorX As Long, ByVal lCursorY As Long, ByVal SentenceString As String, lLoc As Long, lStart As Long) As Long
Label1.Caption = "当前坐标:" "(" lCursorX "," lCursorY ")"
Label2.Caption = "当前语句:" SentenceString
Label3.Caption = "当前字符:" Mid(SentenceString, lLoc + 1, 1000)
End Function
VB.Net 单击事件各个单词的含义?
我一开始也是这样,很迷惑,在使用一段时间后,就基本了解了:
Button1_Click是函数名,可以随便改,而Vb6一个字都不能变
sender是System.Object类型的变量,代表控件对象,当此事件对应多个按钮点击事件时,就要用sender来区分,而VB6用控件数组中的index来区分
e是System.EventArgs类型的变量,代表一个委托声明,是包含事件数据的类的基类,用于传递事件的细节,你暂时不用理会这是什么意思,以后慢慢会了解的
简单点说就是对象sender导致了某个事件的发生,事件的内容就是(e)
handles是一个委托,相当于由handles后面的参数间接引发事件,以你的例子就是Button1的Click事件引发这个函数的调用,你还可以添加别的按钮甚至别的事件进来:
Private Sub MyExampleClickEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.DoubleClick, PictureBox1.MouseDown
' Button1单击事件、Button2双击事件、PictureBox1鼠标按下事件共享同一个MyExampleClickEvent过程。
VB.NET如何实现撷取区域屏幕
既然能够取得整个屏幕,可以取到整个屏幕以后创建一个全屏窗体显示静态的屏幕图像,然后在窗体上实现部分截取。
估计别的截图也是这个原理,因为一点开始截图屏幕就变为静态不动了,肯定是在截图初期复制了当时的屏幕场景