重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

vb.net屏幕取单词 vba单词

VB 屏幕取词

如果你装了金山词霸,可以这样

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、虚拟空间、营销软件、网站建设、任县网站维护、网站推广。

从“引用”中添加XdictGrb.dll

Option Explicit

Implements IXDictGrabSink

Private gp As GrabProxyPrivate Sub Form_Load()

Set gp = New GrabProxy

With gp

.GrabEnabled = True '是否有效

.GrabInterval = 30 '指定抓取时间间隔

.GrabMode = XDictGrabMouse '模式(鼠标是否加按键)

.AdviseGrab Me '接口指向自身End WithEnd SubPrivate 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获取屏幕信息

在有些软件里当鼠标移到某单词上,其注释就会显示单词的中文解释.这样的软件是如何制作的呢?下面我就介绍以下获取鼠标所在单词的方法,至于中文结实要关系到数据库及字库问题在此我不做解释.

首先建立新工程,在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如何实现屏幕取词

用API函数GetWindowText。

GetWindowText

VB声明

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

说明

取得一个窗体的标题文字,或者一个控件的内容

返回值:Long,复制到lpString的字串长度;不包括空中止字符。会设置GetLastError

参数表

hwnd: Long,欲获取文字的那个窗口的句柄

lpString: String,预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入

cch: Long,lpString缓冲区的长度

注解

不能用它从另一个应用程序的编辑控件中获取文字

我要补充以下,如果不知道句柄,那么可以用For计数循环进行穷举。

vb.net随机产生英文字母的代码

1.随机产生英文字母

Randomize() '功 能:初始化随机数发生器

Me.txt1.Text = Chr(Asc("a") + Int(Rnd() * 26))

'Rnd 函数返回小于 1 但大于或等于 0 的值。

'0 = Rnd() * 26 26 是含小数位的数

'Int(Rnd() * 26) 转换为整型,就是0~25的随机数

'Asc("a") 得到a的ASCii数值,是整数97(A是65)

'a~z的ASCii为97~122 ,即为a~z之间的字母为97加(0~25)

'Asc("a") + Int(Rnd() * 26)为97到122的随机数

'Chr()又可以起到转换成字符的功能,Chr(97)表示a (a转换成数值又是Asc("a")=97)

'Chr(Asc("a") + Int(Rnd() * 26))就是a~z的随机数了

Randomize() '再次初始化随机数发生器

Me.txt2.Text = Chr(Asc("A") + Int(Rnd() * 26)) '这里是A~Z的随机数

'也可以换这种写法

Randomize()

Me.txt1.Text = Chr(Int((26 * Rnd()) + 97)) '这里是a~z的随机数

'这是在你知道ASCII码的情况之下(a~z为97~122,A~Z为65~90)

'Rnd()为0~0.9999999.....的随机数

' 26 * Rnd()为0~25.9999...的随机数

'Int((26 * Rnd())为0~25的随机数

'Int((26 * Rnd()) + 97)为97~122的随机数

'Chr(Int((26 * Rnd()) + 97))就是a~z的随机数了

Randomize()

Me.txt2.Text = Chr(Int((26 * Rnd()) + 65)) '这里是A~Z的随机数

'至于同时在一处随机大写或小写,ASCII码的数字又不挨在一起(65-90,97-122),比较麻烦。想写的话,你可以自己想一下怎么办

2.数字怎样转换成ASCII码所对应的字母

Chr()函数将数字转换成ASCII对应的字母,Asc()函数将字母根据ASCII表转换成数字

Chr(97)表示a (a转换成数值又是Asc("a")=97)

3.加到数组,你可以放在一个for循环里

比如

Dim arylst1 As New ArrayList

Dim arr1() As String '数组

Dim str1 As String

For i As Integer = 1 To 15 '比如我想要15个随机字母

Randomize()

str1 = Chr(Int((26 * Rnd()) + 65)) '这里是A~Z的随机数

arylst1.Add(str1)

Next

ReDim arr1(arylst1.Count - 1) '这里是为了比较动态,可以只改变 i 的范围来决定要多少个随机字母

'当然也可以写死,在前面直接定义为 arr1(14),下次要改的时候就要改定义的地方和i的范围,改两个地方

arylst1.CopyTo(arr1)

'就把数值拷贝到数组里面了


分享文章:vb.net屏幕取单词 vba单词
链接地址:http://cqcxhl.com/article/dohchih.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP