VB_API调用,实现获取窗口信息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB编程:浅谈API的应用——实现获取目标窗口的信息
1.第一部分
废话不说,先把几个用到的API声明源码发出来,我是在“模块”里声明的
Option Explicit
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long '窗口置顶
Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long '捕获鼠标所在窗口信息
Declare Function ReleaseCapture Lib "user32" () As Long ' 与setcapture对应
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long '返回鼠标所在窗口的句柄
Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long '坐标转化
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '获取指定窗口类名
Public Type POINTAPI
X As Long
Y As Long
End Type
大家看到了,这里我用到了6个API,每个API声明的后面我都把它的功能注释出来了。
2.第二部分
下面是实现获取窗口信息源码,我是写在“窗体”源码里的
Dim TuBiaoFlag As Boolean
Dim ShuBiao As POINTAPI
Private Sub Check1_Click()
ZhiDing (Check1.Value)
End Sub
Private Sub Form_Load()
Picture1.Picture = LoadPicture(App.Path & "\pass.ico")
TuBiaoFlag = 0
Private Sub ZhiDing(ByVal ZhiDingCanShu As Boolean)
If ZhiDingCanShu = True Then
FanHuiZhi = SetWindowPos(Form1.hwnd, -1, 0, 0, 0, 0, 3)
Else
FanHuiZhi = SetWindowPos(Form1.hwnd, -2, 0, 0, 0, 0, 3)
End If
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
TuBiaoFlag = True
Screen.MouseIcon = Picture1.Picture
Screen.MousePointer = vbCustom
SetCapture (Form1.hwnd)
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) TuBiaoFlag = False
Screen.MousePointer = vbDefault
ReleaseCapture
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If TuBiaoFlag = True Then
Dim ShuBiaoJuBing As Long
Dim FanHuiZiFuChuan As String
Dim FanHuiZiFuChuanChangDu As Long
Dim FanHuiZhi1, FanHuiZhi2 As Long
ShuBiao.X = X
ShuBiao.Y = Y
FanHuiZhi1 = ClientToScreen(Form1.hwnd, ShuBiao)
Text1 = Str(ShuBiao.X) & "," & Str(ShuBiao.Y)
ShuBiaoJuBing = WindowFromPoint(ShuBiao.X, ShuBiao.Y)
Text3 = Str(ShuBiaoJuBing)
FanHuiZiFuChuan = Space(235)
FanHuiZiFuChuanChangDu = Len(FanHuiZiFuChuan)
FanHuiZhi2 = GetClassName(ShuBiaoJuBing, FanHuiZiFuChuan, FanHuiZiFuChuanChangDu)
Text2 = FanHuiZiFuChuan
End If
End Sub
3。第三部分
1 窗体:1个checkbox控件1个picturebox控件3个label控件3个textbox控件
2工程信息上面的第一部分是模块Module1里的代码,第二部分是在Form1里的代码
4第四部分
最后要特别说明的一点就是,Form1的ScaleMode属性,VB6.0默认的是1_Twip,我们要选择3_Pixel.